QEMU 和 Ceph 的 I/O QoS 实现
目录 文章目录 目录 令牌桶算法 漏桶算法 前端 QoS:通过 QEMU 的块设备 IO 限速机制进行限速 后端 QoS:通过 librbd 的镜像 IO 限速机制进行限速 总结 参考文章 令牌桶算法 令牌桶算法是一个非常老牌的 I/O 控制算法,在网络、存储 I/O 上都有着广泛的应用。即:一个固定容量的桶装着一定数量的令牌,桶的容量即令牌数量上限。桶里的令牌每隔固定间隔补充一个,直到桶被装满。一个 IO 请求将消耗一个令牌,如果桶里有令牌,则该 IO 请求消耗令牌后放行,反之则无法放行。对于限制 IO 请求 bps,只需让一个 IO 请求消耗 M 个令牌即可,N 即为此 IO 请求的字节数。 令牌桶算法可以达到以下效果: 令牌桶算法可以通过控制令牌补充速率来控制处理 IO 请求的速率; 令牌桶算法允许一定程度的突发,只要桶里的令牌没有耗尽,IO 请求即可立即消耗令牌并放行,这段时间内 IO 请求处理速率将大于令牌补充速率,令牌补充速率实际为平均处理速率; 令牌桶算法无法控制突发速率上限和突发时长,突发时长由实际 IO 请求速率决定,若实际 IO 请求大于令牌补充速率且速率恒定,则: 突发时长 = 令牌桶容量 / (实际 IO 请求速率 - 令牌补充速率) 。 在令牌桶算法的描述中,有一个条件是无强制约束的,那就是在桶里的令牌耗尽时,无法放行的 IO 请求该怎么处理