加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为什么cgroups(blkio服务字节)和iotop会产生不同的结果

发布时间:2020-12-13 17:00:56 所属栏目:Linux 来源:网络整理
导读:我在ubuntu 14.04上使用lxc用户空间工具,我想在容器内执行一些压力测试和基准测试.我知道free和htop在容器中不能正常工作. 我在容器内使用dd和bonnie来强调它是SSD的硬盘. 现在在主机端,使用iotop我可以看到所使用的读写带宽,但在cgroup中我确实有不同的结果
我在ubuntu 14.04上使用lxc用户空间工具,我想在容器内执行一些压力测试和基准测试.我知道free和htop在容器中不能正常工作.

我在容器内使用dd和bonnie来强调它是SSD的硬盘.

现在在主机端,使用iotop我可以看到所使用的读写带宽,但在cgroup中我确实有不同的结果. cgroup仅捕获服务字节的一小部分,而iotop显示几百兆字节的带宽使用.

在cgroups中,我正在捕获此条目:/sys/fs/cgroup/lxc/disk_stress/blkio.throttle.io_service_bytes

任何想法为什么价值观不平等?哪一个是正确的?

解决方法

kernel documentation on blkio controller的最底部包括注释:

What works

  • Currently only sync IO queues are support. All the buffered writes are
    still system wide and not per group. Hence we will not see service
    differentiation between buffered writes between groups.

实际上,这意味着只有在绕过内核缓冲时,写操作才会出现在blkio.throttle.io_service_bytes中.

工具fio可以很容易地说明这一点.应在blkio.throttle.io_service_bytes中报告直接,无缓冲的写入:

fio --name wxyz --direct=1 --buffered=0 --size=1g --time_based --runtime=120s --bs=4k --rw=write --ioengine=sync --numjobs=1

而与直接相反的&缓冲选项,blkio.throttle.io_service_bytes中没有任何报告,因为写入通过内核缓冲区缓存并在以后安排.

fio --name wxyz --direct=0 --buffered=1 --size=1g --time_based --runtime=120s --bs=4k --rw=write --ioengine=sync --numjobs=1

此外,this thread与一名在cgroup上工作的RedHat工程师重申,一旦写入已经传递到内核中的写缓存,“由于这个额外的缓存层,我们会在IO到达设备时丢失上下文信息. “因此,blkio不会发生会计处理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读