天天看点

带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)

3.1.6  Burst I/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所示。

带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)

图 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所示

带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)

图 3-26参数设置后

将读 IOPS限制设置为 1000,并将读 IOPS突发设置为5000,RBD只能获得 2s的突发级别 IOPS,然后维持限制级别。

(2)对比测试

设置前的测试结果如图 3-27所示。

带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)

图 3-27 设置目的测试结果

设置后测试结果如图 3-28所示。

带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)

图 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结论:符合预期

继续阅读