DST & Get Log Page相关NVMe Command

Admin Command

1. Device Self-Test(DST)设备自检命令

参考SQE结构:
在这里插入图片描述

Namespace Test Action
NSID字段中如果设置为00000000h表示不包括NS,DST操作只包括Controller;
00000001~FFFFFFFEh表示指定NSID,当Namespace为invalid/inactive状态时Controller Abort该命令;
FFFFFFFFh表示操作可以通过Controller访问包括所有active状态在内的Namespace
在这里插入图片描述

DW10中定义**STC (Self-test Code)**包括如下action:

  • Short device
  • Extended device
  • Vendor-specific device
  • Abort in-process operation
    在这里插入图片描述
    对于CQE,Command Specific 状态值设置
    在这里插入图片描述
    在这里插入图片描述
    DST的Status Value(CQE中Status Field的Bits[24:17])为1Dh

Status Field有自己的数据结构,如下,包括了状态码等内容
在这里插入图片描述
Status Code Type Value定义如下
在这里插入图片描述
Status Code Type 类型如下:
对DST的CQE中Command Specific指定为1h

在这里插入图片描述

DST(Device Self-test)命令的使用场景
(1) 自检类型
Short Self-test(SCT=1h):快速检查控制器和NAND的基本功能(如寄存器、接口)。
Extended Self-test(SCT=2h):全面检测(包括坏块扫描、ECC校验、数据完整性)。
Abort Self-test(SCT=Fh):中止正在运行的自检。

  1. 短自检(Short Device Self-test):
    完成时间:2分钟以内
    测试范围:快速检查控制器的基本功能(如RAM、SMART状态、元数据等)。
    可中断性:可以被控制器重置、Format NVM命令、Sanitize操作或中止自检命令中断。

  2. 扩展自检(Extended Device Self-test):
    完成时间:由Identify Controller数据结构中的Extended Device Self-test Time字段指定。
    测试范围:更全面的测试,包括NVM介质完整性、数据完整性、介质检查等。
    可中断性:可以被Format NVM命令、Sanitize操作或中止自检命令中断,但会跨控制器重置和电源恢复继续执行。

自检操作分为多个段(Segment),每个段包含一组测试,具体定义可以参考NVMe协议中
在这里插入图片描述
包括RAM CHECK、SMART CHECK、MEDIA CHECK等。

段号测试内容失败条件
1RAM检查写入测试模式并验证读取结果。 任何不可纠正的错误或数据不匹配。
2SMART检查检查SMART/Health Log中的关键警告位。 任何关键警告位被设置为1。
3易失性内存备份验证备份电源的健康状态。 备份能力显著下降。
4元数据验证确认所有元数据副本的完整性。 元数据损坏且不可恢复。
5NVM完整性对NVM保留区域进行写/读/比较测试。 数据不匹配。
6数据完整性执行后台任务以增强数据完整性。 元数据损坏且不可恢复。
7介质检查从每个可用物理块执行随机读取。 无法访问物理块。
8驱动器寿命评估驱动器是否适合继续写入操作。 SMART/Health Log中的Percentage Used为255,或内部参数表明继续写入会危及数据。
9SMART检查与段2相同。 任何关键警告位被设置为1。

哪些命令可以同时处理,哪些命令需要暂停设备自检操作,具体取决于供应商,固件代码中可以自定义这些CHECK的实现方法。

中断自检操作的条件:Format NVM、Sanitize、中止命令等。

(2) 使用场景
出厂测试:
在SSD出厂前执行扩展自检,确保硬件无缺陷。
定期维护:
数据中心定期运行自检,预防潜在故障。
故障诊断:
当SSD出现异常(如频繁CRC错误),运行自检定位问题。
安全擦除前检查:
在安全擦除(Sanitize)前执行自检,确保设备状态正常。

2. Get Log Page

Get Log Page命令返回一个Log和对应的信息范围可能是Controller或NVM Subsystem,Dowrd10中低8位返回LID,对于DST命令指定的Log Identifier为06h ,当Identify Controller DS中的DSTO字段为0表示Controller Scope,1表示NVM Subsystem。
Device Self-test Log共564Bytes,Log中一共保存20个Self-test Result Data Structure,每个28Bytes。
在这里插入图片描述

Get Log Page – Self-test Result Data Structure
Bytes[00]Bits[3:0]中Value 9h表示因为sanitize操作,操作被abort
Segment Number表示第一次自检错误发生的段号。如果Status field中bits[3:0]不是0x111h,则该域应当被忽略。
在这里插入图片描述在这里插入图片描述

Device Self-test Log(与DST命令相关)
作用:记录设备自检(Device Self-test)的状态和结果。

关键字段:
Current Device Self-test Status:当前自检状态(0h=无操作,1h=短自检中,2h=扩展自检中)。
Newest Self-test Result:最近一次自检结果(成功/失败、自检类型、时间戳)。

与DST命令的关联:
执行 Device Self-test Command(启动或中止自检)后,通过Get Log Page获取自检日志。

Eg. 监控自检进度
步骤1:启动扩展自检

发送 Device Self-test Command(SCT=2h)。

步骤2:周期性获取自检日志

使用 Get Log Page(LID=??,假设为06h)获取Device Self-test Log。
Currenet Self-Test Operation: 表示有没有in progress
Currenet Device Self-Test Completion:表示进度
检查Current Device Self-test Status
bits[7:4] ST Code Value;
bits[3:0]表示result

  • 若为2h:aborted from namespace removal
  • 若为0h:自检完成,检查结果。

步骤3:处理结果

若自检失败,根据日志中的错误码进行修复或更换设备。

Get Log Page 命令流程

步骤1:构造命令
设置 LID 指定日志类型(如02h为SMART/Health)。
设置 NUMDL/NUMDU 定义请求的数据长度。
设置 LPOL/LPOU 定义读取偏移(通常从0开始)。
设置 Namespace ID 根据日志作用域(如SMART日志用FFFFFFFFh)。

步骤2:发送命令
将命令提交到Admin Submission Queue(Admin SQ)。

步骤3:控制器处理
控制器检查参数合法性:

  • 若LID不支持,返回 Invalid Field。
  • 若偏移量超过日志大小,返回 Invalid Field。
  • 若Namespace ID不匹配日志作用域,返回 Invalid Field。

控制器填充日志数据到主机内存。

步骤4:解析结果
从Data Pointer指向的缓冲区读取日志数据。根据LID解析具体字段(如SMART日志的温度、剩余寿命等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值