In NVMe Protocol, NVMe Controller uses Weighted Round Robin Arbitration to select the Submission Queue, from which commands can be taken.

So what is exactly Weighted Round Robin Arbitration?

My understanding is that, suppose you have high priority class of weight 3, medium priority of weight 2 and low priority of weight 1. So in WRR Arbitration, in 6 rounds, Controller 3 times selects high priority class, 2 times medium priority class and 1 time low priority class, whereas in Round Robin Arbitration, it would be 2, 2, 2.

Kindly comment on my thoughts.


You're exactly right. I'm not familiar with NVMe, so I can't comment on the specific weightings and number of queues, but the general technique is quite popular in process scheduling.

Note that the weighted technique differs from the "priority-based" round-robin technique, where all the higher-priority tasks will be run (using round robin between them) before moving onto a round-robin rotation of the lower priority tasks.

You might also find this page on process scheduling interesting.

| improve this answer | |
  • Thanks a lot for answer. Can you say, in general, in WRR arbitration, who decides the weight of each queue(3, 2, 1 in this example)? Is it predecided by Controller/Arbiter or user decides it? – Mahesh Shah Apr 30 '15 at 6:53
  • Generally speaking it would be hard-coded (so the programmer of the scheduler decides), but it would be possible (though a lot more work) to have an adaptive algorithm that constantly changes weightings so that no task/queue is starved of time. I can't comment on NVMe specifically. – Jack Scott Apr 30 '15 at 6:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.