![Linux 内核 5 中不存在几个 blkio cgroup 文件](https://linux22.com/image/1594631/Linux%20%E5%86%85%E6%A0%B8%205%20%E4%B8%AD%E4%B8%8D%E5%AD%98%E5%9C%A8%E5%87%A0%E4%B8%AA%20blkio%20cgroup%20%E6%96%87%E4%BB%B6.png)
我有一台 Ubuntu 19.04 VM(内核 5.0.0),我发现其中缺少几个 blkio cgroup 文件:
ubuntu@ip-172-31-44-196:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.04
DISTRIB_CODENAME=disco
DISTRIB_DESCRIPTION="Ubuntu 19.04"
ubuntu@ip-172-31-44-196:~$ uname -an
Linux ip-172-31-44-196 5.0.0-1007-aws #7-Ubuntu SMP Thu May 16 15:18:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-31-44-196:~$ ls -la /sys/fs/cgroup/blkio/
total 0
dr-xr-xr-x 2 root root 0 Jun 17 03:17 ./
drwxr-xr-x 15 root root 380 Jun 17 03:14 ../
--w------- 1 root root 0 Jun 17 03:17 blkio.reset_stats
-r--r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.io_service_bytes
-r--r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.io_service_bytes_recursive
-r--r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.io_serviced
-r--r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.io_serviced_recursive
-rw-r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.read_bps_device
-rw-r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.read_iops_device
-rw-r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.write_bps_device
-rw-r--r-- 1 root root 0 Jun 17 03:17 blkio.throttle.write_iops_device
-rw-r--r-- 1 root root 0 Jun 17 03:17 cgroup.clone_children
-rw-r--r-- 1 root root 0 Jun 17 03:17 cgroup.procs
-r--r--r-- 1 root root 0 Jun 17 03:17 cgroup.sane_behavior
-rw-r--r-- 1 root root 0 Jun 17 03:17 notify_on_release
-rw-r--r-- 1 root root 0 Jun 17 03:17 release_agent
-rw-r--r-- 1 root root 0 Jun 17 03:17 tasks
在 Ubuntu 18.04 VM 中,我可以看到:
$ uname -an
Linux workstation 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ ls -la /sys/fs/cgroup/blkio
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_merged
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_merged_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_queued
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_queued_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_service_bytes
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_service_bytes_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_serviced
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_serviced_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_service_time
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_service_time_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_wait_time
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.io_wait_time_recursive
-rw-r--r-- 1 root root 0 Jun 14 06:25 blkio.leaf_weight
-rw-r--r-- 1 root root 0 Jun 14 06:25 blkio.leaf_weight_device
--w------- 1 root root 0 Jun 14 06:25 blkio.reset_stats
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.sectors
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.sectors_recursive
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.throttle.io_service_bytes
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.throttle.io_serviced
-rw-r--r-- 1 root root 0 May 31 16:53 blkio.throttle.read_bps_device
-rw-r--r-- 1 root root 0 May 31 16:53 blkio.throttle.write_iops_device
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.time
-r--r--r-- 1 root root 0 Jun 14 06:25 blkio.time_recursive
-rw-r--r-- 1 root root 0 May 31 16:53 blkio.weight
-rw-r--r-- 1 root root 0 May 31 16:53 blkio.weight_device
...
因此,似乎内核 5.0 中不存在几个 blkio cgroup 文件,有人知道原因吗?谢谢!
答案1
我遇到了同样的问题,经过一番调查后,我发现它与IO 调度器。
就我而言,使用时我可以看到这些文件内核 4.15和韓國调度程序,但使用时这些文件不存在内核 5.5和mq-截止期限调度程序。在较新的内核版本中,似乎其中一些文件仅在使用拜福调度程序。
您可以看到当前的 IO 调度程序星展银行使用以下命令阻止设备:
cat /sys/block/sda/queue/scheduler
您也可以切换到拜福使用以下命令:
sudo modprobe bfq
echo "bfq" | sudo tee /sys/block/sda/queue/scheduler
正如你所看到的此代码这些文件仅在内核选项中的 CONFIG_BFQ_CGROUP_DEBUG 启用时才使用,因此切换到 bfq 可能还不够。您可以使用以下命令查看当前内核选项:
less /boot/config-`uname -r`
如果配置文件中不存在 CONFIG_BFQ_CGROUP_DEBUG,则应更改此配置文件并重建内核。您可以使用此指令用于更改内核配置。只需将 CONFIG_BFQ_CGROUP_DEBUG=y 添加到配置文件,然后重建并安装内核。