2015-03-02 128 views
7

我正在嘗試使用cgroups來限制CPU使用率。我使用本指南 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-cpu_and_memory-use_case.html使用Cgroups限制CPU使用率

我/etc/cgconfig.conf文件如下

mount { 
cpu  = /mnt/cgroup/cpu,cpuacct; 
cpuacct = /mnt/cgroup/cpu,cpuacct; 
} 

group wheel { 
    cpu { 
      cpu.shares="800"; 
    } 
    cpuacct { 
      cpuacct.usage="0"; 
    } 
} 
group test1 { 
    cpu { 
      cpu.shares="200"; 
    } 
    cpuacct { 
      cpuacct.usage="0"; 
    } 
} 

我cgrules.conf如下

​​

我們雖然當我嘗試運行:

dd if=/dev/zero of=/dev/null bs=1024k 

我看到cpu使用率爲100% ERS屬於組輪和test1的

我已經檢查與 服務cgconfig狀態 的服務和高達

Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; disabled) 
Active: active (exited) since Mon 2015-03-02 17:29:19 EET; 7min ago 
Process: 1240 ExecStop=/usr/sbin/cgclear -l /etc/cgconfig.conf -e (code=exited, status=3) 
Process: 56536 ExecStart=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf -s   1664 (code=exited, status=0/SUCCESS) 
Main PID: 56536 (code=exited, status=0/SUCCESS) 

誰能告訴我,我究竟做錯了什麼? 非常感謝

+0

你可以在運行'dd if =/dev/zero of =/dev/null bs = 1024k'時添加'top'命令的輸出嗎? – 2015-03-02 16:36:23

+5

'cgroup'股份只會在有競爭的情況下限制CPU資源*。在你的例子中,如果'test1'需要CPU資源,'wheel'沒有使用任何,那麼就沒有競爭,'test1'可以擁有任何想要的東西。如果兩者都需要資源,那麼您應該看到基於份額的限制生效。 – twalberg 2015-03-02 17:36:13

+0

你好輸出如下: ' 'PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND' '51535 USER1 20 0 108956 1680 556 - [R 100.0 0.0 0:27.74 dd' '51557 USER2 20 0 108956 1676 552 R 100.0 0.0 0:23.57 dd' user1屬於車輪組,user2屬於test1組 – SteveGr2015 2015-03-02 17:40:00

回答

12

cpu cgroup是工作保護,即。如果沒有競爭,任務不會停止使用CPU。如果您想對任務可以使用的cpu數量設置嚴格限制,請嘗試設置cpu.cfs_quota_uscpu.cfs_period_us

看文檔here

+0

非常感謝您使用cpu.cfs_quota_us和cpu.cfs_period_us – SteveGr2015 2015-03-03 08:13:17