DST
Device Self-test命令
Device Self-test命令用于开始一个device self-test操作,或者中止一个device self-test操作(NVMe1.4 8.11).Device Self-test命令一般用于:
- 开始一个short device self-test操作
- 开始一个extended device self-test 操作
- 开始一个供应商特定的device self-test操作
- 中止一个正在进行的device self-test操作
Device self-test命令提交到控制器,由控制器执行。Namespace Identifier字段控制在device self-test中包含哪些namespaces在表1中指出。
表 1: Device Self-test Test Action
值 | 描述 |
---|---|
00000000h | Device self-test不包括任何namespace,只有控制器是该device self-test的一部分 |
00000001h ~ FFFFFFFEh | Device self-test包括这个字段代表的namespace.如果这个字段指示的是一个无效的namespace ID,那么控制器会中止掉device self-test命令,返回Invalid Field状态 |
FFFFFFFFh | Device self-test操作包括开始device self-test过程期间控制器所有可以访问的已激活的namespaces |
Device Self-test命令在Command Dword 10字段中,所有其他命令指定的字段都要保留。
表 2:Device Self-test – Command Dword 10
比特位 | 描述 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31:04 | 保留 | ||||||||||||||
03:00 | Self-test Code(STC):这个字段表示Device Self-test命令的行为
|
表 3: Device Self-test – Command Processing
Self-test in Progress | Self-test Code in new Drive Self-test command | 控制器行为 |
---|---|---|
是 | 1h | 中止新的device Self-test命令,返回状态Device Self-test in Progress |
2h | ||
Eh | 供应商指定 | |
Fh | 控制器按下列顺序执行:
| |
否 | 1h | 控制器按下列顺序执行:
|
2h | 控制器按下列顺序执行:
| |
Eh | 供应商指定 | |
Fh | 成功完成命令,不修改Device Self-test Log | |
注意: 如果在Identify Controller数据结构的Device Self-test Options(DSTO)中将位0清除为“ 0”(NVMe1.4 Figure247),则“Self-test in Progress”列表示控制器收到新的Drive Self-test命令,正在进行Device self-test操作。 如果在Identify Controller数据结构的“Device Self-test Options”(DSTO)中将位0设置为“ 1”,则“Self-test in Progress”列表示NVM子系统上正在device self-test操作。 |
Command Completion
在按照表3所示执行适当的操作之后,complete queue entry将放到Admin Completion Queue中。表4中定义了Device Self-test命令的特定的状态值。
表 4:Device Self-test – Command Specific Status Values
值 | 描述 |
---|---|
1Dh | Device Self-test in Progress:控制器或NVM子系统中已经有一个正在进行的device self-test操作 |
Device Self-test Operations (Optional)
Device Self-test操作是一个诊断测序列,用于测试控制器的功能和完整性,并且可以测试与命名空间相关的介质。该操作分多个segment,每个segment是一组供应商特定的测试。Self-test Result数据结构中的segment number(NVMe1.4 5.14.1.6)用于报告指示测试失败的位置(如果有)。对于short device self-test和extended device self-test操作,在每个segment中执行的测试可以相同。
设备自检操作在后台执行,允许并发处理某些命令,并且可能需要暂停当前设备自检操作来处理其他命令。哪些命令可以同时处理,哪些需要中止设备自检操作,这取决于供应商的要求。
如果控制器收到任何需要暂停设备自检操作以进行处理和完成的命令,则控制器应:
- 暂停当前设备自检操作
- 处理并完成收到的命令
- 继续设备自检操作
在设备自检操作期间,NVM子系统的性能可能会下降(如:控制器不执行设备自检操作也可能会出现性能下降)
下面定义了两种类型的设备自检操作,后面会具体解释:
a) Short device self-test operation
b) Extended device self-test operation
表5是一个具有相关segments的设备自检操作以及再每个segment中执行的测试示例:
表 5:Example Device Self-test Operation (Informative)
Short Device Self-Test Operation
一个short device self-test 操作应该在2S内(含2S)。short device self-test完成的百分比在Device Self-test Log里指出(NVMe1.4 5.14.1.6)。
一个正在进行的short Device Self-Test operation:
- 当device self-test正在执行时,任何会影响到controller的Controller Level Reset,short dst需要被中止
- 对于像表6中描述的Format NVM命令会中止short device self-test
- 一个Self-Test Code值为Fh的Device Self-test正在进行时,应该中止掉
- 当开始一个sanitize操作时,应该中止掉
- 如果从命名空间的清单中移除了某个命名空间,可能会被中止掉
表6:Format NVM command Aborting a Device Self-Test Operation
Extended Device Self-Test Operation
Extended Device Self-Test操作应在Identify Controller数据结构中“Extended Device Self-test Time”字段中指定的时间内完成。extended device self-test的完成百分比在Device Self-test Log的“Current Percentage Complete”字段中指示(请参阅第5.14.1.6节)。
extended device self-test操作应在所有Controller Level Reset中持续存在,并且应在reset完成或任何上电操作后(如有)恢复。恢复extended device self-test操作的segment是供应商指定的,但实现只应在reset之前的在最近测试的segment内再次执行测试。
Extended Device Self-Test操作:
a)如表6中所述的Format NVM命令,中止extended dst;
b)在开始sanitize操作时应中止(请参阅第5.24节);
c)如果处理了将“Self-Test Code”字段设置为Fh的Device Self-test命令,则中止;
d)如果从命名空间清单中删除了指定的名称空间,则可能会中止。