• Cgroup(二)cpu子系统


    一、限制可使用的CPU百分比
    cpu.cfs_period_us:用来配置时间周期长度,单位微秒,取值范围1ms至1s
    cpu.cfs_quota_us:用来配置当前cgroup在设置的周期长度内所能使用的CPU时间数,单位微秒,取值大于1ms,-1代表不受限制

    1.限制只能使用1个CPU
    # echo 250000 > cpu.cfs_quota_us
    # echo 250000 > cpu.cfs_period_us
    
    2.限制使用2个CPU(内核)
    # echo 1000000 > cpu.cfs_quota_us
    # echo 500000 > cpu.cfs_period_us
    
    3.限制使用1个CPU的20%
    # echo 10000 > cpu.cfs_quota_us
    # echo 50000 > cpu.cfs_period_us
    二、cpu.shares
    用来设置CPU的相对值,并且是针对所有的CPU(内核),默认值是1024,假如系统中有两个cgroup,分别是A和B,A的shares值是1024,B的shares值是512,那么A将获得1024/(1204+512)=66%的CPU资源,而B将获得33%的CPU资源。shares有两个特点
    • 如果A不忙,没有使用到66%的CPU时间,那么剩余的CPU时间将会被系统分配给B,即B的CPU使用率可以超过33%
    • 如果添加了一个新的cgroup C,且它的shares值是1024,那么A的限额变成了1024/(1204+512+1024)=40%,B的变成了20%
    从上面两个特点可以看出:
    • 在闲的时候,shares基本上不起作用,只有在CPU忙的时候起作用,这是一个优点。
    • 由于shares是一个绝对值,需要和其它cgroup的值进行比较才能得到自己的相对限额,而在一个部署很多容器的机器上,cgroup的数量是变化的,所以这个限额也是变化的,自己设置了一个高的值,但别人可能设置了一个更高的值,所以这个功能没法精确的控制CPU使用率。
     
    三、cpu.stat
    包含了下面三项统计结果
    • nr_periods: 表示过去了多少个cpu.cfs_period_us里面配置的时间周期
    • nr_throttled: 在上面的这些周期中,有多少次是受到了限制(即cgroup中的进程在指定的时间周期中用光了它的配额)
    • throttled_time: cgroup中的进程被限制使用CPU持续了多长时间(纳秒)
     
    四、实例

    # cd /sys/fs/cgroup/cpu
    # mkdir container
    # ls -l container/
    total 0
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cgroup.clone_children
    --w--w--w- 1 root root 0 Nov 23 15:20 cgroup.event_control
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cgroup.procs
    -r--r--r-- 1 root root 0 Nov 23 15:20 cpuacct.stat
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpuacct.usage
    -r--r--r-- 1 root root 0 Nov 23 15:20 cpuacct.usage_percpu
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpu.cfs_period_us
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpu.cfs_quota_us
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpu.rt_period_us
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpu.rt_runtime_us
    -rw-r--r-- 1 root root 0 Nov 23 15:20 cpu.shares
    -r--r--r-- 1 root root 0 Nov 23 15:20 cpu.stat
    -rw-r--r-- 1 root root 0 Nov 23 15:20 notify_on_release
    -rw-r--r-- 1 root root 0 Nov 23 15:20 tasks
    # cd container/
    # more cpu.cfs_period_us #周期长度100ms
    100000
    
    # more cpu.cfs_quota_us #周期长度内可使用的CPU时间无限制
    -1
    # while : ; do : ; done &
    [1] 5969
    # pidstat -p 5969 1
    Linux 3.10.0-1062.9.1.el7.x86_64 (test-prd-10-47-4-40.gzyq.ts.lan)      11/23/2020      _x86_64_        (4 CPU)
    
    03:24:01 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    03:24:02 PM     0      5969   99.00    0.00    0.00   99.00     3  bash
    03:24:03 PM     0      5969  100.00    0.00    0.00  100.00     3  bash
    03:24:04 PM     0      5969  100.00    0.00    0.00  100.00     3  bash
    03:24:05 PM     0      5969  100.00    0.00    0.00  100.00     3  bash
    # echo 5969 >tasks 
    # echo 20000 >cpu.cfs_quota_us  # 设置可使用的cpu时间为20ms
    # pidstat -p 5969 1            
    Linux 3.10.0-1062.9.1.el7.x86_64 (test-prd-10-47-4-40.gzyq.ts.lan)      11/23/2020      _x86_64_        (4 CPU)
    
    03:24:48 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    03:24:49 PM     0      5969   20.00    0.00    0.00   20.00     3  bash
    03:24:50 PM     0      5969   20.00    0.00    0.00   20.00     3  bash
    03:24:51 PM     0      5969   20.00    0.00    0.00   20.00     3  bash
  • 相关阅读:
    C# 上传辅助方法
    C# 经纬度计算
    C#Excel导出反射数据集
    C# 数据模板导出
    C# 百度经纬度获取地址信息
    【平台开发】— 5.后端:代码分层
    【平台开发】— 4.mysql建库建表
    【平台开发】— 3.前端开发思路
    【平台开发】— 2.前端:vue-element-admin
    【平台开发】— 1.开篇
  • 原文地址:https://www.cnblogs.com/guoxianqi2020/p/14034017.html
Copyright © 2020-2023  润新知