欢迎大家来到IT世界,在知识的湖畔探索吧!
引言:
之前在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顺序读/顺序写:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/82976.html