队列模型 - 📘 一、加权轮询与紧急优先级类仲裁机制 (第118页)
NVME2.0协议解读 1 min read

队列模型 - 📘 一、加权轮询与紧急优先级类仲裁机制 (第118页)

Blog Author

继续深入分析 NVM Express® Base Specification, revision 2.0b 第 107 页,本页讨论了 加权轮询与紧急优先级类仲裁机制(Weighted Round Robin with Urgent Priority Class Arbitration),这是一个更加复杂的仲裁机制,涉及严格的优先级分类和加权轮询。


📘 一、加权轮询与紧急优先级类仲裁机制

仲裁机制概述

在这种仲裁机制下,提交队列根据优先级分为 三种严格优先级类三种加权轮询优先级级别。每个提交队列会被分配到某个优先级类,并按照该类的优先级顺序执行命令。


严格优先级类

  1. 管理员类(Admin Class)
  2. 优先级:最高的严格优先级类。
  3. 内容:包括所有提交到 管理提交队列(Admin Submission Queue) 的命令。
  4. 优先级说明:这些命令优先于任何其他队列的命令,确保管理命令的及时处理。

  5. 紧急类(Urgent Class)

  6. 优先级:紧急优先级类排在管理类之后,但优先于加权轮询优先级级别的队列。
  7. 内容:任何被分配到紧急优先级的 I/O 提交队列(I/O Submission Queue)
  8. 注意事项:主机软件在将队列分配到紧急优先级类时需谨慎,因为如果过多队列被分配到紧急优先级,可能会导致加权轮询优先级级别的队列被饿死(即无法获得足够的处理时间)。

  9. 加权轮询类(Weighted Round Robin Class)

  10. 优先级:最低的严格优先级类。
  11. 内容:包含三个加权轮询优先级级别(高优先级、中优先级、低优先级),这些队列共享剩余带宽,并通过加权轮询算法进行仲裁。
  12. 加权控制:主机软件可以通过 Set Features 命令来控制高、中、低优先级服务类的加权值。

加权轮询与紧急优先级类的仲裁

  • 加权轮询:在加权轮询类内部,使用 轮询仲裁(Round Robin Arbitration)来分配资源,即每个提交队列依次轮流获得处理时间。
  • 紧急优先级与加权轮询:紧急优先级类的队列始终优先于加权轮询类队列进行处理,而加权轮询类内部的队列优先级由加权值决定。

  • 优先级冲突处理:当提交队列 A 的优先级高于提交队列 B 时,所有来自提交队列 A 的候选命令将在提交队列 B 的命令开始处理之前被处理。


仲裁突发(Arbitration Burst)设置

  • 仲裁突发设置:指示控制器每轮可以从某个提交队列中启动的最大命令数。每轮的命令处理数量将受此设置限制。该设置确保了命令的处理量不会超过控制器的处理能力,并且通过调节突发大小来优化性能。

🧠 总结与核心要点

要素 说明
优先级类 提交队列根据 管理员类、紧急类和加权轮询类 分配优先级,决定了命令的处理顺序。
加权轮询类 加权轮询类内部有三个优先级级别(高、中、低),并且使用轮询仲裁进行命令的调度。
紧急优先级类 紧急优先级类的队列优先级最高,紧急命令会优先处理。
仲裁突发设置 控制器每轮处理的最大命令数由 仲裁突发设置 确定,优化处理性能并避免过度负载。

这种仲裁机制在 I/O 队列管理命令调度优化 中起到了关键作用,特别是在多个提交队列有不同优先级和资源需求的场景下,能够有效地平衡和优化命令处理效率。

如果你有任何关于这种仲裁机制的疑问,或想了解如何在实际应用中配置这些优先级和仲裁设置,随时告诉我!