高级特性 - 队列管理(Feature Identifier 07h)分析 (第305页)
在 NVM Express® Base Specification, revision 2.0b 中,Set Features 和 Get Features 命令对于控制器的行为、性能优化和稳定性非常重要。以下是对一些特性的详细分析,尤其是与 队列管理 和 中断合并(Interrupt Coalescing)相关的内容。
队列管理(Feature Identifier 07h)分析
I/O 提交队列和完成队列的数量(NCQR 和 NSQR)
- I/O 提交队列请求数量(NSQR):
- 功能:此字段用于指示主机软件请求的 I/O 提交队列 的数量。
- 最小值:至少请求一个队列,表示最小支持一个 I/O 提交队列。
- 最大值:最大支持 65,534 个提交队列(即 65,535 个提交队列)。如果请求数量为 65,535,则控制器应当中止命令并返回错误代码
Invalid Field in Command。 -
注意:在虚拟化实现中,主机请求的队列数可能与控制器实际分配的队列数不同。控制器可能有自己的队列分配单位(例如,按照 2 的幂分配队列)。
-
I/O 完成队列请求数量(NCQR):
- 功能:此字段用于指示主机软件请求的 I/O 完成队列 的数量。
- 最小值:至少请求一个队列,表示最小支持一个 I/O 完成队列。
- 最大值:最大支持 65,534 个完成队列(即 65,535 个完成队列)。如果请求数量为 65,535,则控制器应当中止命令并返回错误代码
Invalid Field in Command。
命令完成(Completion)
- 控制器在处理
Set Features命令后会更新队列的分配情况,并通过 完成队列条目(Completion Queue Entry) 将 分配的提交队列和完成队列数量 返回给主机。具体细节在 Figure 323 中有详细说明,描述了实际分配的队列数。
中断合并(Interrupt Coalescing)功能(Feature Identifier 08h)分析
功能描述
Interrupt Coalescing 功能用于配置控制器的中断合并设置。中断合并可以减少频繁的中断触发,从而提高系统性能,尤其是在处理大量 I/O 请求时。
- 中断触发条件:控制器会在以下条件满足时触发中断:
- 聚合时间(Aggregation Time):在指定的时间范围内,控制器会根据完成的 I/O 请求数量来合并中断。
-
聚合阈值(Aggregation Threshold):在达到指定数量的完成请求时,控制器触发中断。
-
禁用中断合并:如果聚合时间或聚合阈值被清零(设为 0),则中断合并功能会被隐式禁用。
-
处理错误命令:建议对于那些处理失败的命令,不要进行中断合并,这样可以及时通知主机。
命令字段说明(Command Dword 11)
- 中断合并配置:通过
Command Dword 11来配置具体的中断合并设置,包括聚合时间和聚合阈值。
中断合并的工作机制
- 延迟中断:如果控制器检测到某个特定中断向量正在处理中(例如,完成队列头部正在更新),则可能会延迟触发更多的中断。这样做是为了避免频繁的中断处理,优化性能。
- 聚合时间和阈值重置:当更新相关属性(如完成队列头部的更新)时,聚合时间和/或阈值可能会被重置或重新启动,从而可能导致中断的延迟。
获取功能(Get Features)
- 使用
Get Features命令,主机可以查询当前中断合并的配置。查询结果将通过 完成队列条目(Completion Queue Entry) 返回。
总结
-
队列管理:
NSQR和NCQR字段用于设置和获取 I/O 提交队列 和 I/O 完成队列 的数量。主机软件可以通过这些设置优化 I/O 操作的效率。队列数量的配置应在初始化时完成,之后不得更改。 -
中断合并:
Interrupt Coalescing功能通过配置聚合时间和聚合阈值来优化中断触发频率,从而减少系统负载,提高性能。对于某些工作负载,中断可能会被延迟,尤其是在长时间的 I/O 操作过程中。