加权循环仲裁WRR特性对NVME SSD性能有什么影响?

引言:

之前在NVME系列专题中,我们介绍过NVME命令仲裁机制的原理,本文主要是介绍加权循环仲裁(WRR,Weighted Round Robin Arbitration)对NVME SSD性能的影响。




在NVMe Spec没有规定Command存入SQ队列的执行顺序,Controller可以一次取出多个Command进行批量处理。一个SQ队列中的Command执行顺序是不固定,同时在多个SQ队列之间的Command执行顺序也不固定,这就涉及到了NVMe Spec定义的命令仲裁机制。


NVMe Spec中主要定义了两种命令仲裁机制:循环仲裁(Round Robin Arbitration)加权循环仲裁(Weighted Round Robin Arbitration).

对于循环仲裁,所有主控必须支持。

对于加权循环仲裁,主控可以选择性支持。

除了这两个仲裁机制以外,主控设计人员还可以自行定义仲裁机制。


1. 循环仲裁(Round Robin Arbitration)

当NVMe设备选择RR仲裁机制时,所有SQs(包括Admin Command SQ和IO Command SQ)都会执行RR仲裁。此时,所有SQs的级别一样高,按照顺序依次从所有SQs中分别取出一定数目的Commands(如下图).

这里的"一定数目"用参数Arbitration Burst定义,代表了一次从SQ中取Commands的数目。Arbitration Burst的数值可以通过Set feature定义。


2. 加权循环仲裁(Weighted Round Robin Arbitration)

加权循环仲裁(WRR)机制定义了3个绝对优先级3个加权优先级。

Admin Class: 只有Admin SQ具有这一最高优先级。也就是说,Admin Command必须最先被执行。

Urgent Class: 一人之下,万人之上。优先级仅次于Admin Class。被赋予Urgent Class优先级的IO SQ在Admin SQ中的命令执行后,紧接着执行。

WRR Class: 最低绝对优先级。包含了三个加权优先级:High,Medium,Low.用户可以用个set feature命令控制加权优先级中每个优先级的权重,也即每次执行Command的数目。每个加权优先级内部执行RR仲裁机制。


3. WRR对NVME SSD性能的影响

在使用WRR时,有两个事情需要考虑下:

问题1: IO队列SQ需要根据紧急程度赋予不同的优先级

问题2: 系统中不同的应用对应的IO如何分类,对应不同的优先级?


第一种IO分类的方案:根据IO相似的程度,直接指定不同的进程,赋予不同的优先级,然后绑定对应的不同CPU core处理。

这种方案最大的缺点就是灵活性不足,由于特定优先级与core的绑定,导致不能充分发挥计算机的能力。应用的运行特点也被限定了。



第二种IO分类的方案:每个core都可以处理不同的优先级IO,应用可以根据自身紧急程度提交IO给对应的队列。这样也可以充分释放计算机的能力。



具体修改的方式:在OS用ionice命令定义IO优先级,同时修改nvme驱动映射到不同优先级IO队列。

使用ionice调整IO优先级对性能的影响示例:


打开WRR后,性能对比:性能也会有相应的阶梯式变化,总体性能没有太大变化,只是改变了部分IO处理优先级。

4K随机读/随机写:

128K顺序读/顺序写:

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章