虚拟机的基于权重的块 IO 控制

set*_*thu 13 linux kvm io block-device cgroups

我使用 KVM 来管理我的虚拟机。我正在尝试限制为 VM 提供的资源。我可以使用 libvirt/cgroups 限制为 VM 分配的 CPU 和内存。现在我想通过应用一些权重来控制为每个 VM 分配的磁盘时间。我查看了 cgroups 中的 blkio 控件。由于 VM 只是一个 Linux 进程,我将能够使用 cgroups,但我不确定它是否也适用于异步 IO。如果没有,有人可以提出一个好的替代解决方案吗?

Cor*_*ren 2

cgroup 术语中的 Blkio代表对块设备上 I/O 的访问。它似乎并不是要规范软件开发人员手头用于 I/O 相关目的的所有不同方式。

它似乎主要针对设备上的 I/O ,而不是软件访问设备的方式。它可以限制其他进程的 iops 数量、带宽或权重等。blockio 目前似乎不支持缓冲写入。它在官方文档中:

目前,块 I/O 子系统不适用于缓冲写入操作。它主要针对直接 I/O,但也适用于缓冲读操作。

如果您看一下Red Hat 的 Linda Wang 和 Bob Kozdemba 的演示文稿(第 20 页以上),您会发现该图是关于每个虚拟机的设备带宽,而不是关于随机、阻塞和异步 I/O。

Red Hat最近 似乎已经将其直接实现到 virsh 中。它已于上周在 libvirt 0.9.9 中发布。几个月后,您将能够在您最喜欢的发行版中执行以下操作:

virsh blkiotune domA --device-weights /dev/sda,250
virsh blkiotune domB --device-weights /dev/sda,750
Run Code Online (Sandbox Code Playgroud)