1
-
该机制下管理提交队列(Admin SQ)和所有 I/O 提交队列(I/O SQ)优先级完全平等,控制器会以轮询方式遍历所有有效提交队列。若仲裁突发值设为 N,控制器每轮从当前队列提取最多 N 条命令执行,完成后切换至下一个队列,循环往复。比如存在 4 个提交队列 SQ0 - SQ3,仲裁突发值为 2 时,调度顺序就是 SQ0(2 条)→SQ1(2 条)→SQ2(2 条)→SQ3(2 条)→SQ0(2 条)……
-
对于聚合命令(Fused Operations),这类由两条相邻命令组成的原子操作会被控制器视为一个整体调度,避免拆分导致的执行异常。若聚合命令执行中第一条命令失败,第二条会直接中止。
-
其优势在于适配 NVMe 最多 64000 个队列的高并发场景,实现简单且无队列饥饿问题;但缺陷也很明显,Admin 队列中的设备初始化、参数配置等关键命令无法优先执行,在高负载下可能导致管理命令延迟,影响设备响应及时性。
2
-
控制器通过 Capabilities 寄存器的 Arbitration Mechanism Supported 字段标识是否支持 WRR。主机软件需先读取该字段确认支持后,再配置权重参数,同时建议将仲裁突发值设为控制器推荐值,平衡吞吐量与延迟。
-
分为 Admin 类、Urgent 类、WRR 类三个层级,遵循 “高优先级队列完全处理完再调度低优先级队列” 的规则。Admin 类独占最高优先级,保障设备管理命令的即时响应;Urgent 类用于存储系统日志、数据库事务日志等延迟敏感的紧急 I/O;WRR 类承接普通 I/O 请求,处于最低级。需注意,过度使用 Urgent 类可能导致普通队列被饿死,主机配置时需严格控制该类队列数量。
-
WRR 类内部的高、中、低三个子层级,权重可通过 “Set Features” 命令配置。权重本质是控制器分配的处理时间片比例,而非固定命令数。例如高、中、低权重设为 4:2:1,意味着在一轮调度周期内,高优先级队列获得的处理资源是中优先级的 2 倍、低优先级的 4 倍。不过该权重比例仅为理论参考,实际处理量会受队列命令拥堵程度、命令执行耗时影响。
3
-
学术研究中提出的 D2FQ 调度方案就是基于该机制的扩展,它参考虚拟时间机制,动态调整 WRR 的队列权重和阈值,解决了标准 WRR 无法适配多租户不同 I/O 特征的问题,既保证租户间的性能公平性,又降低了 CPU 调度开销。
-
NVMe 标准 WRR 不考虑 I/O 请求大小,部分厂商会定制算法,对小文件随机读写队列提高调度优先级,对大文件顺序读写队列调整批次处理规模。例如三星企业级 SSD 会针对数据库小事务请求,动态提升对应队列权重,降低事务延迟。
-
面向云服务器的 SSD,厂商会设计基于租户的仲裁逻辑。如华为某款 SSD 可按租户分配独立队列组,通过仲裁机制限制单个租户的最大资源占用率,避免某一租户的高并发请求抢占其他租户的 I/O 资源。
-
部分 FPGA 实现的 NVMe 控制器,会将仲裁机制与 PCIe TLP 包管理结合,在设备高温或功耗过高时,优先调度功耗控制相关命令,同时降低非关键 I/O 的调度频率,实现性能与功耗的平衡。





