DST Get Log Page相关NVMe Command

server/2025/2/20 14:14:45/

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 状态值设置
    在这里插入图片描述
    在这里插入图片描述
    CQE结构中DW0/1是命令指定,DST的Status Value应该放在哪儿可以由固件指定吗?

Status Field有自己的数据结构,如下,包括了状态码等内容
在这里插入图片描述
Status Code Type Value定义如下
在这里插入图片描述

在这里插入图片描述

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操作或中止自检命令中断,但会跨控制器重置和电源恢复继续执行。

自检操作分为多个端,每个段包含一组测试,具体定义可以参考NVMe协议中
在这里插入图片描述
哪些命令可以同时处理,哪些命令需要暂停设备自检操作,具体取决于供应商。
中断条件: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日志的温度、剩余寿命等)。


http://www.ppmy.cn/server/168951.html

相关文章

力扣-二叉树-700 二叉搜索树中的搜索

思路 根据左右大小关系&#xff0c;寻找节点 代码 class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {if(root->val val){return root;}if(root->val < val){if(root->right) return searchBST(root->right, val);}else{if(root->…

无人机常见的开源飞控项目

开源飞控软件项目为无人机等无人载具的开发和应用提供了丰富的资源和灵活的解决方案&#xff0c;以下是一些常见的开源飞控软件项目&#xff1a; 1、PX4 简介&#xff1a;PX4 是一个高度模块化、可扩展的开源飞行控制平台&#xff0c;被广泛应用于各种类型的无人机&#xff0…

MoE硬件部署

文章目录 MoE硬件部署硬件需求**专家硬件映射&#xff1a;模块化计算单元****路由硬件加速&#xff1a;门控网络专用单元****内存与通信优化****能效控制策略****实例&#xff1a;假设部署Mixtral 8x7B到自研AI芯片** 资源分配硬件资源预分配&#xff08;编译时&#xff09;运行…

【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

Qt笔记31-69

06QMainWindow 知识点1&#xff1a;QMainWindow概述 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff0c;多个工具栏&#xff0c;多个铆接部件&#xff0c;一个状态栏及一个中心部件 知识点2&#xff1a;菜单栏 菜单栏类QMenuBar 菜单类QMen…

【Java 面试 八股文】并发编程篇

并发编程篇 1. 线程和进程的区别&#xff1f;2. 并行和并发有什么区别&#xff1f;3. 创建线程的方式有哪些&#xff1f;4. runnable 和 callable 有什么区别5. 线程的 run()和 start()有什么区别&#xff1f;6. 线程包括哪些状态&#xff0c;状态之间是如何变化的7. 新建 T1、…

蓝桥杯小白打卡第五天

1230. K倍区间 问题描述 给定一个长度为 N N N 的数列&#xff0c; A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1​,A2​,…,AN​&#xff0c;如果其中一段连续的子序列 A i , A i 1 , … , A j A_i, A_{i 1}, \ldots, A_j Ai​,Ai1​,…,Aj​ 之和是 K K K 的倍数&a…

无人机集群路径规划:5种最新优化算法(CBSO、ECO、AOA、SFOA、PLO)求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…