linux – 为什么cgroups(blkio服务字节)和iotop会产生不同的结果
我在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的最底部包括注释:
实际上,这意味着只有在绕过内核缓冲时,写操作才会出现在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不会发生会计处理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |