在 NVMe 中协议中支持 out-of-order 传输数据,该如何理解这个 out-of-order?
1. 一个 IO command 内部。
1)write command : 数据传输是 in-order 的,SSD drive 接收数据也是 in-order 的,需要根据 SLBA 计算每个 AU/DU 数据块对应的 LBA 地址。
2)read command :写入SSD 块中的数据会落在不同的 channel,CE,Dies 上,并行处理时,每组(Channel,CE,Dies)上花费的时间可能稍许有些不同,所以传给 host 可以是 out-of-order,一般 SSD controller 都是支持的。 问题 ---- host 如何处理这些 out-of-order 数据的呢?(根据 PRP/SGL 在处理 read command 分配 buffer 时已经处理好各个 AU/DU 对应的 buffer, SSD controller 后端就直接 out-of-order 传给对应的 buffer即可。)
2. 多个命令处理之间的 in-order 和 out-of-order。
NVMe controller 同时支持很多的 Submision Queues(SQs),这些命令的调度是由 controller 自己按照决策来 (96条消息) NVME命令仲裁机制_eaglelau的博客-CSDN博客,所以是 out-of-order 的。也就是说命令的执行是 out-of-order 的。
Dataset Management command 数据集管理命令 中的 sequentilal option。
(96条消息) Dataset Management_BGONE的博客-CSDN博客
主机使用 “Dataset Management” 命令指示逻辑块范围的属性。 属性包括读取或写入数据的频率,访问大小以及可用于优化性能和可靠性的其他信息。 此命令是建议性命令; 兼容的控制器可能会根据提供的信息选择不采取任何措施。
该命令使用 Command Dword 10,Command Dword 11 字段,如果命令使用 PRPs 来传输数据,那么 PRP Entry1 和 PRP Entry2 会被使用。如果命令用 SGLs 来传输数据,那么 SGL Entry1 字段会被使用。所有其他命令中所规定的字段做保留。
数据集管理命令提供的数据是具有上下文属性的范围列表。每个范围都包含一个起始LBA、该范围包含的逻辑块长度以及要应用于该范围的上下文属性。“逻辑块中的长度”字段是基于1的值。Dataset管理命令范围字段的定义如图41所示。显示了256个范围的最大情况:
(96条消息) 6.7 Dataset Management command_csdh_shu的博客-CSDN博客
Context Attributes 上下文属性
为每个范围指定的上下文属性提供有关主机软件打算如何使用该范围的信息。此信息的使用是可选的,控制器无需执行任何特定操作。
注:无论主机软件提供的属性是否准确,控制器都需要保持NVM介质上数据的完整性。
下面字段如何使用,需要继续探讨。