OCP NVME SSD规范解读-3.NVMe管理命令-part2

  1. NVMe-AD-8:在某些情况下(如Sanitize命令、Format NVM命令或TCG Revert方法后数据被清除),设备应允许读取已清除的LBAs而不产生错误,并在最后一次清除完成后,对未写入LBAs的读取返回所有零值给主机

  2. NVMe-AD-10:设备应支持Identify命令的UUID列表功能(CNS值17h)。

UUID是一个128位的数字,用于唯一标识信息或者对象。在NVMe SSD规范中,使用UUID是为了确保供应商特定的日志标识符和特性标识符能够访问到本规范中定义的功能,而不会意外地访问到其他供应商特定的、可能使用相同标识符的功能。

在规范中,定义了一个特定的UUID值(C194D55BE0944794A21D29998F56BE6Fh),这个UUID被包含在UUID List(NVMe-AD-10)中,并且其Identifier Association字段被设置为清除状态(00b)。

图片

Get Features和Set Features命令需要支持UUID Index功能。当使用这个特定的UUID或者一个零UUID Index,以及规范中使用的供应商特定的Feature Identifier时,这些命令将访问到规范中定义的供应商特定的特性。

Get Log Page命令也需要支持UUID Index功能。当使用这个特定的UUID或者一个零UUID Index,以及规范中使用的供应商特定的Log Page Identifier时,这个命令将访问到规范中定义的供应商特定的日志页。供应商特定的持久事件日志页也需要支持UUID Index功能。

  1. NVMe-AD-11:如果特定NVMe管理命令不使用Namespace Identifier(NSID),并且主机指定非零NSID,则控制器应以状态Invalid Field in Command中止命令。

  2. NVMe-AD-12:设备应支持Device Self-test命令。

  3. NVMe-AD-14/15/16:设备应支持Lockdown命令。Lockdown命令是NVMe管理命令集中的一个命令,主要用于安全和管理目的。当设备接收到Lockdown命令时,它会锁定指定的Admin命令或Features,限制对这些功能的访问或修改。

  4. NVMe-AD-17:"No-Deallocate Modifies Media After Sanitize"字段的设置是为了确保Sanitize操作后的数据安全性。当这个字段设置为01b时,即使Sanitize操作完成后,设备也不会再对已Sanitize的区域进行写入或修改操作。(nvme协议定义如下)

图片

这样的设计目的是防止在数据被Sanitize清除后,由于设备的内部操作或者意外情况,导致已经清除的数据区域被新的数据覆盖,从而可能影响数据的安全性和清除效果。通过禁止Sanitize操作后对媒体的额外修改,设备可以更好地保证Sanitize命令的执行效果,满足数据安全和隐私保护的需求。例如,在执行Crypto Erase(加密擦除)操作后,设置这个字段为01b可以确保解密密钥不会被再次写入或修改,从而确保被擦除的数据无法被恢复。

  1. NVMe-AD-18:这表示设备应在Identify Controller数据结构中的Sanitize Capabilities区域将No-Deallocate Inhibited位清零至0b。这个位主要影响设备在执行sanitize操作后的数据处理方式。

图片

与NVMe-AD-17正好相反,NVMe-AD-18要求设备不应禁止在sanitize操作后进行deallocations,也就是说,设备应该允许在sanitize操作完成后释放已擦除或覆盖的数据块。通过将No-Deallocate Inhibited位设置为0b,设备表明它支持并允许在sanitize操作后进行deallocations。

这一要求的意义在于确保设备在执行sanitize操作后能够有效地管理和回收存储资源,同时保持数据安全性和设备性能。通过遵循这一要求,设备可以更好地满足数据保护和存储管理的需求,特别是在需要频繁进行sanitize操作的高安全环境或特定应用场景中。

  1. NVMe-AD-19:
    如果设备在接收到Sanitize命令并成功完成操作后,无法返回全零(即使命令设置了No-Deallocate After Sanitize位为1b),设备应忽略不进行deallocations的请求,并执行deallocations操作。同时,设备应在Sanitize Status Log Page中将Sanitize Status字段设置为100b。

这表示在某些特定情况下,如果设备无法在sanitize操作成功完成后返回零(即无法确保已擦除的数据区域被填充为零),即使Sanitize命令设置了No-Deallocate After Sanitize位为1b(表示请求在sanitize操作后不进行deallocations),设备也应该执行deallocations。

在这种情况下,尽管主机请求不要进行deallocations,但由于设备无法保证返回零,为了数据的安全性和一致性,设备仍然会进行deallocations。同时,设备会在Sanitize Status Log Page中的Sanitize Status字段设置值为100b,以表明sanitize操作的特殊状态或异常情况。

图片

这一要求的意义在于确保设备在执行sanitize操作后能够提供一致和可靠的数据清除效果,即使在某些硬件限制或异常情况下也能保证数据的安全性。通过遵循这一要求,设备可以更好地满足数据保护和安全合规的需求,特别是在需要严格的数据擦除和销毁的环境中。

  1. NVMe-AD-22:
    设备出厂时,应在Sanitize Status Log Page中的Sanitize Status字段清除为000b,表示NVM子系统从未进行过sanitize操作,并且Global Data Erased位在Sanitize Status字段中设置为1b,表示全局数据已被擦除。

图片

  1. NVMe-AD-24:
    设备应在Identify Controller数据结构中的Asynchronous Event Request Limit字段报告至少为4的值。这表示设备支持至少同时处理4个异步事件请求。

这项要求主要涉及到设备对非易失性内存(NVM)进行格式化的功能。Format NVM命令是一种高级的管理命令,用于在固态硬盘(SSD)上重新初始化或清除特定命名空间的数据。

NVMe-AD-24要求设备支持按命名空间基础执行Format NVM命令,这意味着设备应该能够针对每个独立的命名空间进行格式化操作,而不是同时影响所有命名空间。在Identify Controller数据结构中的Format NVM Attributes字段的位0和位1被设置为00b,这表示设备支持按命名空间进行格式化。

图片

Format NVM命令通常包括几种不同的erase模式,如User Data Erase(仅清除用户数据)、Cryptographic Erase(使用加密技术清除数据)等。特别是在设备退役、转售或更换时,这些erase模式可以帮助提高数据安全性和保护用户隐私。

当主机发送一个Format NVM命令到设备时,设备会根据指定的erase模式和命名空间来执行格式化操作。这个过程可能包括清除namespace中的所有LBA(逻辑块地址)映射、删除用户数据、重置元数据信息以及更新Namespace Utilization(NUSE)等。

Namespace Utilization (NUSE)是NVMe设备中一个重要的概念,用于表示命名空间中当前已分配的逻辑块数量。这些逻辑块已经被分配给数据存储,正在进行读写操作或者已经包含有效数据。

图片

NCAP(Namespace Capacity)是指命名空间的总容量,即可以分配的最大逻辑块数量。而NUSE则是实际已经分配和使用的逻辑块数量,它始终小于或等于NCAP。

NUSE的值是动态变化的。当在命名空间中写入新的数据时,NUSE的值会增加;当删除或覆盖已有数据时,如果设备支持数据压缩或者垃圾回收功能,那么NUSE的值可能不会立即减少,因为被删除或覆盖的数据所在的物理块可能仍然被标记为已使用,直到被设备的后台处理程序进行清理和重用。

通过查询NVMe Identify Namespace数据结构中的相应字段,可以获取到命名空间的NUSE信息。

比如,在一个200GB的设备上,执行Format NVM命令进行用户数据擦除后,NUSE会被设置为零,表示所有逻辑块都没有被分配和使用。然后,每当向设备写入1GB的数据,NUSE的值就会增加相应的逻辑块数量,同时设备的使用数据也会相应地显示已使用的存储容量。

图片

  1. NVMe-AD-25:
    如果发生了报告启用的异步事件,并且没有未完成的Asynchronous Event Request命令,控制器应保留这些异步事件类型的事件信息,并在未来对Asynchronous Event Request命令的响应中使用这些信息。排队的重复异步事件应只报告一次。

小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • PCIe surprise down异常与DPC功能分析

  • 过度加大SSD内部并发何尝不是一种伤害

  • NVMe over CXL技术如何加速Host与SSD数据传输?

  • 为什么QLC NAND才是ZNS SSD最大的赢家?

  • SSD在AI发展中的关键作用:从高速缓存到数据湖

  • 浅析不同NAND架构的差异与影响

  • SSD基础架构与NAND IO并发问题探讨

  • 字节跳动ZNS SSD应用案例解析

  • SSD数据在写入NAND之前为何要随机化?

  • 深度剖析:DMA对PCIe数据传输性能的影响

  • NAND Vpass对读干扰和IO性能有什么影响?

  • HDD与QLC SSD深度对比:功耗与存储密度的终极较量

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 如何通过优化Read-Retry机制降低SSD读延迟?

  • 关于硬盘质量大数据分析的思考

  • 存储系统性能优化中IOMMU的作用是什么?

  • 全景解析SSD IO QoS性能优化

  • NVMe IO数据传输如何选择PRP or SGL?

  • 浅析nvme原子写的应用场景

  • 多维度深入剖析QLC SSD硬件延迟的来源

  • 浅析PCIe链路LTSSM状态机

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试记录(被问倒的)

快排,设计模式(观察者模式 mvc模式 单例模式)及其优势,工作遇到的困难,解决过的问题,渲染管线,ui合批(动静分离),比较复杂的编辑器扩展,算法&…

鸿蒙开发之android对比开发《基础知识》

基于华为鸿蒙未来可能不再兼容android应用,推出鸿蒙开发系列文档,帮助android开发人员快速上手鸿蒙应用开发。 1. 鸿蒙使用什么基础语言开发? ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风…

二叉树题目:根到叶路径上的不足结点

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:根到叶路径上的不足结点 出处:1080. 根到叶路径上的不足结点 难度 6 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root…

LeetCode——链表

链表 链表类型:单链表(只有next指针)、双链表(pre指针和next指针)、循环链表(尾节点指向头节点) 增、删、改、遍历、翻转、交换 1.设计链表707中等 class LinkedNode {int val;LinkedNode n…

基于SpringBoot的精简博客系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的精简博客系统,java项目…

关键字:throw关键字

在 Java 中,throw关键字用于抛出异常。当程序执行过程中发生意外情况,如错误的输入、资源不足、错误的逻辑等,导致程序无法正常执行下去时,可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例: 抛出异常…

MySQL 四种插入命令及其特点与锁机制

目录 1. INSERT INTO 2. INSERT IGNORE INTO 3. INSERT INTO ... ON DUPLICATE KEY UPDATE 4. REPLACE INTO 总结 MySQL提供了多种数据插入方式,每种方式在处理唯一键冲突时的行为不同,同时也涉及不同的锁机制。 1. INSERT INTO INSERT INTO是标准…

JaveScript 的 newFunction

1、new Function的基础概念 new Function() 是 JavaScript 中的一个构造函数,它可以实例化一个新的函数对象并返回。该函数对象可以使用传递给 new Function() 的字符串参数作为函数体,并使用其他传递给它的参数作为函数参数,从而动态创建一…

42 个通过示例解释所有 JavaScript 数组方法

今天,就让我们一起来看看这 42 个数组方法。 1. at 获取特定索引处的元素。 负索引表示从末尾开始计数(例如:-1 是最后一个元素)。 const names ["Jhon", "Bob", "Alice", "Joe"]; c…

服装店收银系统不只是收银 还需要线上商城和线上批发

一个综合性的服装店收银系统可以结合线上商城和线上批发功能,提供以下特点和优势: 线上商城:将服装店的商品信息同步到线上商城平台,让顾客可以通过网站或移动应用程序浏览和购买商品。线上商城可以实现在线支付、订单跟踪、售后服…

MySQL数据库索引优化

一、引言 1. 索引的重要性 MySQL数据库索引的重要性主要体现在,一是查询速度优化,索引可以极大地提高查询速度。对于没有索引的表,MySQL必须进行全部扫描来找到所需的行,如果表中数据量很大,那么通常很慢。通过适当的…

大数据规模存储的几个核心问题

文章目录 三个关键问题RAID(独立磁盘冗余阵列)RAID是如何解决关于存储的三个关键问题?水平伸缩 大规模数据存储都需要解决几个核心问题,这些问题都是什么呢? 三个关键问题 1.数据存储容量的问题 既然大数据要解决的…

图像分割实战-系列教程1:语义分割与实例分割概述

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 下篇内容: Unet系列算法 1、图像分割任务概述 1.1 图像分割 分割任务就是在原始图像…

window的OPen方法,弹窗的特征

文章目录 一、介绍二、弹窗的特征 一、介绍 window.open() 方法是 JavaScript 中的一个内置方法,用于在浏览器中打开一个新的窗口或标签页。 语法: window.open(url, name, features, replace)二、弹窗的特征 open方法参数说明: 参数说明url要载入窗…

【算法】数论---取模运算法则

取模运算(余数运算)有一些基本的运算法则: (a b) % m (a % m b % m) % m(a - b) % m (a % m - b % m) % m(a * b) % m (a % m * b % m) % ma ^ b % p ((a % p)^b) % p 取模运算(余数运算)有一些基本的性质&…

2023年12月第4周面试算法题总结

809. 情感丰富的文字——阅读理解题 1、s “abcd”; words [“abc”]; 的情况怎么处理 2、怎么求lens与lenw?(连续出现的字符串长度) class Solution { public: bool isStretchy(const string& s, const string& word) {int i 0…

基于SpringBoot的医疗挂号管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的医疗挂号管理系统,java…

详述numpy中的np.random各个函数的用法

文章目录 引言np.random.rand()np.random.randn()np.random.randint(low,high,size,dtype)np.random.uniform(low,high,size)参考文献 引言 在机器学习还有深度学习中,经常会用到这几个函数,为…

AKShare学习笔记

AKShare学习笔记 本文内容参考AKShare文档。AKShare开源财经数据接口库采集的数据都来自公开的数据源,数据接口查询出来的数据具有滞后性。接口参考AKShare数据字典。 AKShare环境配置 安装Anaconda,使用Anaconda3-2019.07版本包,配置清华数…

Elasticsearch8集群部署

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…