在一个在 mdadm RAID 1 阵列上有两个磁盘的主机上运行的容器上,我尝试使用以下命令限制名为ci的 LXD 容器的磁盘 IO,但没有成功:
lxc config device set ci root limits.read 30MB
lxc config device set ci root limits.write 10MB
但是,在容器上运行例如此命令时:
dd if=/dev/zero of=/root/testfile bs=1G count=10 oflag=direct
结果是磁盘的整个容量,大约130MB/s ,而不是写入操作的预期结果大约10MB/s :
10737418240 bytes (11 GB, 10 GiB) copied, 81,3877 s, 132 MB/s
这也可以通过atop
在主机上运行来确认:
如何有效限制容器的磁盘 IO,使其无论发生什么事情,主机磁盘性能都不会过度使用?
在第二次测试中,我在客户机和主机上同时运行与上述相同的dd命令,但主机也没有优先级:
一些附加信息:
- 主机和访客都是 Ubuntu 16.04
- 服务器有两个分区相等的硬盘,加入 RAID 1 阵列
在最大的 RAID 阵列之上,根文件系统安装在 LVM 卷组上
root@server ~ # lvs LV VG Attr LSize root vg0 -wi-ao---- 2,72t swap vg0 -wi-ao---- 4,00g
LXD 存储后端是dir
如果这有助于限制容器的磁盘 IO,我可以对磁盘进行不同的分区,例如,拥有一个专用于 LXD 的 ZFS 的 RAID 阵列。那会有帮助吗?
I/O 限制在容器文件系统位于块设备上时起作用,但在使用 10.0.9 等旧版本时在 mdadm RAID 等虚拟设备上不起作用。
更新到 10.15 版后,限制有效。在 Ubuntu 中,您可以更新:
有关更多详细信息,请参阅https://discuss.linuxcontainers.org/t/limiting-disk-io-on-lxd-containers/261上的讨论和https://github.com/lxc/上的未解决问题lxd/问题/3515