美文网首页Docker容器
cgroup v2的调研与使用

cgroup v2的调研与使用

作者: 随笔随风 | 来源:发表于2019-04-25 12:39 被阅读0次

    背景

    ​ 验证cgroup v2对普通进程io的统计是否正确

    命令

    ​ dd if=/dev/zero of=/xfs/file1 bs=128M count=1

    基本信息

    • 10G普通云硬盘

    • 操作系统与内核版本: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添加内核启动参数: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

      • 为了不受其他进程影响,我申请了一块新盘,/xfs是挂载点
      • mount -t cgroup2 nodev /xfs/cgroup2
    • 使用I/O controller

      • 创建新cgroup

        mkdir /xfs/cgroup2/cg3
        
      • 为了可以在新创建的cgroup上使用I/O controller来编辑I/O限制,需要在subtree_control中写上io

        echo "+io" > /xfs/cgroup2/cgroup.subtree_control
        
      • 限制I/O(8:0是磁盘的主次设备号,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负载

        dd if=/dev/zero of=/tmp/file1 bs=512M count=1
        

    结论

    • 三个问题

      1. 使用dd写新文件时,wbytes不增加
      2. 在未加入cgroup的进程写的同时,使用dd写时(无论新旧文件),wbytes不增加
      3. 每次使用dd命令写128M数据时,wbytes增加184549376
    • 正确的地方

      • 每次使用dd写128M到已有文件时,wbytes增加固定值

    cgroups的io速率限制体现在page cache到磁盘的过程中。linux数据流可以参见https://lwn.net/Articles/457667/

    相关文章

      网友评论

        本文标题:cgroup v2的调研与使用

        本文链接:https://www.haomeiwen.com/subject/nhnngqtx.html