Rev1.4 5-Jul-23
This document describes the instruction to run raNVMe-IP demo on FPGA development board for accessing one NVMe SSD. The demo is designed to run Identify, Write, Read, SMART, Flush, and Shutdown command. User controls test operation via FPGA console.
After user finishes FPGA board setup following “dg_nvmeip_fpgasetup” document, main menu is displayed and the user sets the input to the console for selecting test operation.
Figure 1‑1 raNVMe-IP main menu
On welcome screen, IP name and IP version number are displayed. The PCIe speed and number of PCIe lanes are displayed in the next message. Finally, the test menu is displayed on the console.
Select ‘0’ to send Identify command to NVMe SSD.
Figure 2‑1 Test result when running Identify command
After finishing the operation, the SSD information output from Identify command is displayed. The console shows two values.
1) SSD model number: This value is decoded from Identify controller data.
2) SSD capacity: This value is signal output from raNVMe-IP.
Figure 2‑2 Error when LBA unit does not support
When the SSD operates in LBA unit which is not equal to 512 bytes, the error message is displayed on the console, as shown in Figure 2‑2. After that, the system stays inactive status and user needs to reset the system to restart the demo.
Select ‘1’ to send Write command to NVMe SSD.
Figure 2‑3 Test result when running Write command
There are four input parameters for running Write command, described as follows.
1) Transfer Mode: Select address mode of the transfer. There are two modes supported - Sequential and Random mode. The first address is assigned by Start Address input while the next address can be generated by using two equations. First is sequential mode which creates the next address by adding by 8 (4 Kbyte) to store data in contiguous area. Another is the random mode which creates the next address by LFSR equation.
Note: The test data stored to the SSD in each address is similar for both Sequential mode and Random mode. The different point is the order of the address that stores the data. Therefore, if the transfer length is less than full-disk capacity, the free area that is not accessed in Random mode depends on the start address value.
2) Start Address: Input start address to write SSD as 512-byte unit. The input is decimal unit when user enters only digit number. User can add “0x” to be prefix for hexadecimal unit. This input must be aligned to 8 for 4-Kbyte alignment.
3) Transfer Length: Input total transfer size as 512-byte unit. The input is decimal unit when user enters only digit number. User can add “0x” to be prefix for hexadecimal unit. This input must be aligned to 8 for 4-Kbyte alignment.
4) Test pattern: Select test data pattern for writing to SSD. There are five patterns, i.e., 32-bit incremental, 32-bit decremental, all 0, all 1, and 32-bit LFSR counter.
When all inputs are valid, the operation begins. While the command is operating, the progress of transfer in percentage unit is displayed on the console every second. Finally, total size, total time usage, and test speed are displayed on the console as a test result.
Note: Most SSD shows better write performance when using Sequential addressing, comparing to Random addressing.
Figure 2‑4 Example Test data of the 1st and 2nd 4Kbyte data by using incremental/LFSR pattern
Test data in SSD is split into 4096-byte (4-Kbyte) unit. For incremental, decremental, and LFSR pattern, each 4-Kbyte data has a unique 64-bit header consisting of 48-bit address in 512-byte unit and 16-bit zero value. The data after 64-bit header is the test pattern which is selected by user.
The left window of Figure 2‑4 shows the example when using 32-bit incremental pattern while the right window shows the example when using 32-bit LFSR pattern. The unique header is not included when running all-0 or all-1 pattern.
Figure 2‑5 shows the example error message when the input from the user is invalid which may be caused from out-of-range or not aligned to 8. “Invalid input” is displayed as the error message and the operation is cancelled before returning to the main menu.
Figure 2‑5 Error message from the invalid input
Select ‘2’ to send Read command to NVMe SSD.
Figure 2‑6 Test result when running Read command
There are four or five inputs parameters for running Read command, described as follows.
1) Transfer Mode: Select address mode of the transfer. There are two modes supported - Sequential and Random mode. The first address is assigned by Start Address input while the next address can be generated by using two equations. First is sequential mode which creates the next address by adding by 8 (4 Kbyte) to store data in contiguous area. Another is the random mode which creates the next address by LFSR equation.
Note: The test data stored to the SSD in each address is similar for both Sequential mode and Random mode. The different point is the sequence of the address that stores the data.
2) Enable Data Verification: Select to enable or disable data verification for verifying the data.
Note: When the user enables data verification with Random mode and transfer length is not full-disk capacity, start address of Read command must be the same as Write command and transfer length must be less than or equal to transfer length in Write command.
3) Start Address: Input start address to read SSD as 512-byte unit. The input is decimal unit when user enters only digit number. User can add “0x” to be prefix for hexadecimal unit. This input must be aligned to 8 for 4-Kbyte alignment.
4) Transfer Length: Input total transfer size as 512-byte unit. The input is decimal unit when user enters only digit number. User can add “0x” to be prefix for hexadecimal unit. This input must be aligned to 8 for 4-Kbyte alignment.
5) Test pattern: This input is available only when data verification is enabled. Select test data pattern for verifying to SSD. There are five patterns, i.e., 32-bit incremental, 32-bit decremental, all 0, all 1, and 32-bit LFSR counter.
Similar to Write command menu, the progress of transfer in percentage unit is displayed on the console every second. Finally, total size, total time usage, and test speed are displayed on the console as a test result.
Note: The read performance of most SSD when using Sequential addressing is better than Random addressing.
Figure 2‑7 shows the error message when data verification is failed. “Verify fail” is displayed with the information of the 1st failure data, i.e., the error byte address, the expected value, and the read value.
User can press any key(s) to cancel read operation. Otherwise, the operation is still run until finishing Read command. After that, the output performance is displayed on the console.
When cancelling the operation, the Read command still runs as the background process and may not finish in a good sequence. It is recommended to power-off/on FPGA board and adapter board (if connected).
Figure 2‑7 Data verification is failed
In some conditions, CPU handles too much tasks until the speed to generate the command request is less than transfer performance of raNVMe-IP. Therefore, the test performance on the console is limited by CPU, not by raNVMe-IP and SSD. In this case, the caution message is displayed on the console, as shown in Figure 2‑8.
Figure 2‑8 Caution message when the performance is dropped from the firmware responses
Select ‘3’ to send SMART command to NVMe SSD.
Figures 2‑9 Test result when running SMART command
After finishing the operation, SMART/Health Information (output from SMART command) is be displayed as shown in Figures 2‑9. The console shows Health status and SMART log information. Health status shows the remaining life of the SSD in percent unit which is calculated from Percentage Used in the SMART log information.
The SMART log information shows seven parameters as follow.
1) Percentage used: Display SSD usage in percent unit.
2) Temperature in °C unit.
3) Total Data Read decoded as GB/TB unit. Also, raw data without decoding is displayed by 32 digits of hex number (128 bits). The unit size of raw data is 512,000 bytes.
4) Total Data Written decoded as GB/TB unit. Also, raw data without decoding is displayed by 32 digits of hex number (128 bits). The unit size of raw data is 512,000 bytes.
5) Power On Cycles: Display the number of power cycles.
6) Power On Hours: Display the period of time in hours to show how long the SSD has been powered on.
7) Unsafe Shutdowns: Display the number of unsafe shutdowns of SSD.
Select ‘4’ to send Flush command to NVMe SSD.
Figure 2‑10 Test result when running Flush command
“Flush Command Complete” is displayed after finishing Flush operation.
Select ‘5’ to send Shutdown command to NVMe SSD.
Figure 2‑11 Test result when running Shutdown command
The confirmation message is displayed on the console. User enters ‘y’ or ‘Y’ to continue the operation or enters other keys to cancel the operation.
After finishing Shutdown operation, “Shutdown command is complete” is displayed on the console as the last message. Main menu is not displayed anymore. User needs to power off/on test system to start new test operation.
Revision |
Date |
Description |
1.4 |
7-Nov-22 |
Update raNVMe-IP version and performance |
1.3 |
16-Jun-22 |
Update SMART info and test performance |
1.2 |
12-Jan-21 |
Correct IOPs value |
1.1 |
22-Dec-20 |
Update test result by new SSD model |
1.0 |
11-Aug-20 |
Initial version release |