背景
? 驗證cgroup v2對普通進(jìn)程io的統(tǒng)計是否正確
命令
? dd if=/dev/zero of=/xfs/file1 bs=128M count=1
基本信息
10G普通云硬盤
操作系統(tǒng)與內(nèi)核版本:Linux version 4.14.15-041415-generic (kernel@tangerine) (gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3)) #201801231530 SMP Tue Jan 23 20:33:21 UTC 2018
-
Cgroup v2的io.stat如下所示
root@VM-16-35-ubuntu:/xfs/cgroup2/cg3# cat io.stat 252:16 rbytes=0 wbytes=184549376 rios=0 wios=128
使用Cgroup v2的步驟
禁用cgroup v1
在/boot/grub/grub.cfg添加內(nèi)核啟動參數(shù):cgroup_no_v1=all辈毯,如下所示
-
reboot
linux /boot/vmlinuz-4.14.15-041415-generic root=UUID=971546b4-fe6b-4f81-9cbb-9186ff0454ea ro net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 crashkernel=auto crashkernel=384M-:128M cgroup_no_v1=all
-
掛載cgroup v2
- 為了不受其他進(jìn)程影響坝疼,我申請了一塊新盤,/xfs是掛載點
- mount -t cgroup2 nodev /xfs/cgroup2
-
使用I/O controller
-
創(chuàng)建新cgroup
mkdir /xfs/cgroup2/cg3
-
為了可以在新創(chuàng)建的cgroup上使用I/O controller來編輯I/O限制谆沃,需要在subtree_control中寫上io
echo "+io" > /xfs/cgroup2/cgroup.subtree_control
-
限制I/O(8:0是磁盤的主次設(shè)備號,1048576代表限制I/O為1MB/s)
echo "8:0 wbps=1048576" > /xfs/cgroup2/cg3/io.max
-
把bash session添加到cg3這個cgroup
echo $$ > /cgroup2/cg2/cgroup.procs
-
使用
dd
來生成一些I/O負(fù)載dd if=/dev/zero of=/tmp/file1 bs=512M count=1
-
結(jié)論
-
三個問題
- 使用dd寫新文件時钝凶,wbytes不增加
- 在未加入cgroup的進(jìn)程寫的同時,使用dd寫時(無論新舊文件)唁影,wbytes不增加
- 每次使用dd命令寫128M數(shù)據(jù)時耕陷,wbytes增加184549376
-
正確的地方
- 每次使用dd寫128M到已有文件時掂名,wbytes增加固定值
cgroups的io速率限制體現(xiàn)在page cache到磁盤的過程中。linux數(shù)據(jù)流可以參見https://lwn.net/Articles/457667/