3.1.6 BurstI/O
BurstI/O指的是云盘在一定时间内达到IOPS突发上限的能力,突发能力适用于云服务器的启动场景,如系统盘,若有持续突发能力,就能够大幅度地提升云服务器的启动速度。
CephRBD 设备突发能力的实现基于令牌桶。突发时,令牌的消耗速度大于令牌的生成速度,令牌的数量逐渐减少,最后IOPS 会维持和桶生成令牌的速度一致,即达到IOPS的上限,理论上:
可持续的突发时间= 最初令牌桶中的令牌数/( 实际 I/O 请求的速度- 令牌生成速度)然而实际上这样是无法控制突发速度的上限和突发时间的,这样的突发应该理解为可
突发的I/O请求量,举例说明一下,如卷的上限IOPS设置为1000IOPS(令牌生成的速率),卷突发设置为 2000IOPS,若实际 I/O请求速度刚好也是 2000IOPS,那么突发时长实际是 2s,而且实际 I/O请求速度并没有得到限制,若实际请求速度到了5000IOPS,那么实际突发时长仅为 0.5s,即 0.5s后请求速度就被稳定限制在1000IOPS。
为了解决上述问题, 需要对令牌桶算法进行优化, 将令牌桶的容量设置为 burst_second×burst,然后向该令牌桶中添加一个小桶(容量为burst),以令牌生成速度(也即 IOPS的上限速度)生成的令牌放入令牌桶中,令牌桶再将令牌以突发速度流入小桶中,请求总是从小桶中获取令牌。这样,当 burst_second> 1时,RBD 设备可以获得持续的突发能力,突发上限值由小桶容量 burst决定,突发持续时间由 burst_second控制,这些参数都可以通过指令在线动态地去设置。下面举例说明一下。
(1)在线设置参数
设置前如图 3-25所示。
图 3-25参数设置目
rbd_qos_read_iops_burst:读 I/O的突发限制。rbd_qos_read_iops_burst_seconds:读 I/O 突发的持续时间。rbd_qos_read_iops_limit:每秒读 I/O限制。
设置后如图 3-26所示
图 3-26参数设置后
将读 IOPS限制设置为 1000,并将读 IOPS突发设置为5000,RBD只能获得 2s的突发级别 IOPS,然后维持限制级别。
(2)对比测试
设置前的测试结果如图 3-27所示。
图 3-27 设置目的测试结果
设置后测试结果如图 3-28所示。
图 3-28 设置后的测试结果
(3)测试结果分析
设置后的单卷读 IOPS 理论值计算公式如下。
iops = {rbd_qos_read_iops_burst_seconds * rbd_qos_read_iops_burst + (total_time_of_rand_read - rbd_qos_read_iops_burst_seconds) * rbd_qos_read_iops_limit} / total_time_of_rand_read
单卷随机读理论值:iops= (2*5000+ 98*1000)/100= 1080
测试值:iops= 1097结论:符合预期