欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Linux Cgroups - 磁盘 I/O 限制

最编程 2024-07-15 22:00:48
...

我们先看一下我们的硬盘IO,我们的模拟命令如下:(从/dev/sda上读入数据,输出到/dev/null上)

dd if=/dev/sda of=/dev/null iflag=direct

dd 命令默认会使用一定的缓存来提高性能,这可能会导致短时间内的瞬时读取速度超过你设置的限制。可以尝试使用 dd 命令的 iflag=direct 选项来禁用缓存,这样可以更准确地测试实际的磁盘读取速度

我们通过iotop命令我们可以看到相关的IO速度是128MB/s(虚拟机内):

  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                                       
25722 be/4 root      128.87 M/s    0.00 B/s  0.00 %  1.30 % dd if=/dev/sda of=/dev/null

然后,我们先创建一个blkio(块设备IO)的cgroup

mkdir /sys/fs/cgroup/blkio/limit

并把读IO限制到1MB/s,并把前面那个dd命令的pid放进去(注:8:0 是设备号,你可以通过ls -l /dev/sda1获得):

echo '8:0 1048576'  > /sys/fs/cgroup/blkio/limit/blkio.throttle.read_bps_device 
echo [pid] > /sys/fs/cgroup/blkio/limit/tasks

再用iotop命令,你马上就能看到读速度被限制到了1MB/s左右。

  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                                       
13571 be/4 root     1043.21 K32    0.00 B/s  0.00 % 97.64 % dd if=/dev/sda of=/dev/null iflag=direct

推荐阅读