在具有 mdadm RAID 1 阵列上的两个磁盘的主机上运行的容器中,我尝试限制名为西和:
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/秒,而不是预期的结果10MB/秒对于写入操作:
10737418240 bytes (11 GB, 10 GiB) copied, 81,3877 s, 132 MB/s
atop
通过在主机上运行也证实了这一点:
如何才能有效地限制容器的磁盘 IO,以便无论发生什么情况,主机磁盘性能都不会过度使用?
在第二次测试中,我运行相同的日在客户机和主机上同时执行上述命令,但主机也没有优先级:
一些附加信息:
- 主机和客户机都是 Ubuntu 16.04
- 服务器有两块硬盘,分区大小相等,组成RAID1阵列
在最大的 RAID 阵列之上,根文件系统安装在 LVM 卷组上
root@server ~ # lvs LV VG Attr LSize root vg0 -wi-ao---- 2,72t swap vg0 -wi-ao---- 4,00g
LXD 存储后端是目录
如果这有助于限制容器的磁盘 IO,我可以对磁盘进行不同的分区,例如为 LXD 配备专用于 ZFS 的 RAID 阵列。这有帮助吗?
答案1
当容器文件系统位于块设备上时,I/O 限制有效,但在使用旧版本(如 10.0.9)时,它不适用于 mdadm RAID 等虚拟设备。
更新至版本 10.15 后,限制生效。在 Ubuntu 中,您可以使用以下命令进行更新:
sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
sudo apt-get update
sudo apt-get install lxd
有关详细信息,请参阅以下讨论https://discuss.linuxcontainers.org/t/limiting-disk-io-on-lxd-containers/261以及未解决的问题https://github.com/lxc/lxd/issues/3515