日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux cgoup内存限制,Linux Cgroup系列(05):限制cgroup的CPU使用(subsystem之cpu)

發布時間:2023/12/10 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux cgoup内存限制,Linux Cgroup系列(05):限制cgroup的CPU使用(subsystem之cpu) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在cgroup里面,跟CPU相關的子系統有cpusets、cpuacct和cpu。

其中cpuset主要用于設置CPU的親和性,可以限制cgroup中的進程只能在指定的CPU上運行,或者不能在指定的CPU上運行,同時cpuset還能設置內存的親和性。設置親和性一般只在比較特殊的情況才用得著,所以這里不做介紹。

cpuacct包含當前cgroup所使用的CPU的統計信息,信息量較少,有興趣可以去看看它的文檔,這里不做介紹。

本篇只介紹cpu子系統,包括怎么限制cgroup的CPU使用上限及相對于其它cgroup的相對值。

本篇所有例子都在ubuntu-server-x86_64 16.04下執行通過

創建子cgroup

在ubuntu下,systemd已經幫我們mount好了cpu子系統,我們只需要在相應的目錄下創建子目錄就可以了

#從這里的輸出可以看到,cpuset被掛載在了/sys/fs/cgroup/cpuset,

#而cpu和cpuacct一起掛載到了/sys/fs/cgroup/cpu,cpuacct下面

dev@ubuntu:~$ mount|grep cpu

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)

cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)

#進入/sys/fs/cgroup/cpu,cpuacct并創建子cgroup

dev@ubuntu:~$ cd /sys/fs/cgroup/cpu,cpuacct

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct$ sudo mkdir test

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct$ cd test

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ ls

cgroup.clone_children cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.stat tasks

cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.shares notify_on_release

除了cgroup里面通用的cgroup.clone_children、tasks、cgroup.procs、notify_on_release這幾個文件外,以cpuacct.開頭的文件跟cpuacct子系統有關,我們這里只需要關注cpu.開頭的文件。

cpu.cfs_period_us & cpu.cfs_quota_us

cfs_period_us用來配置時間周期長度,cfs_quota_us用來配置當前cgroup在設置的周期長度內所能使用的CPU時間數,兩個文件配合起來設置CPU的使用上限。兩個文件的單位都是微秒(us),cfs_period_us的取值范圍為1毫秒(ms)到1秒(s),cfs_quota_us的取值大于1ms即可,如果cfs_quota_us的值為-1(默認值),表示不受cpu時間的限制。下面是幾個例子:

1.限制只能使用1個CPU(每250ms能使用250ms的CPU時間)

# echo 250000 > cpu.cfs_quota_us /* quota = 250ms */

# echo 250000 > cpu.cfs_period_us /* period = 250ms */

2.限制使用2個CPU(內核)(每500ms能使用1000ms的CPU時間,即使用兩個內核)

# echo 1000000 > cpu.cfs_quota_us /* quota = 1000ms */

# echo 500000 > cpu.cfs_period_us /* period = 500ms */

3.限制使用1個CPU的20%(每50ms能使用10ms的CPU時間,即使用一個CPU核心的20%)

# echo 10000 > cpu.cfs_quota_us /* quota = 10ms */

# echo 50000 > cpu.cfs_period_us /* period = 50ms */

cpu.shares

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持續了多長時間(納秒)

示例

這里以cfs_period_us & cfs_quota_us為例,演示一下如何控制CPU的使用率。

#繼續使用上面創建的子cgroup: test

#設置只能使用1個cpu的20%的時間

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ sudo sh -c "echo 50000 > cpu.cfs_period_us"

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ sudo sh -c "echo 10000 > cpu.cfs_quota_us"

#將當前bash加入到該cgroup

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ echo $$

5456

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ sudo sh -c "echo 5456 > cgroup.procs"

#在bash中啟動一個死循環來消耗cpu,正常情況下應該使用100%的cpu(即消耗一個內核)

dev@ubuntu:/sys/fs/cgroup/cpu,cpuacct/test$ while :; do echo test > /dev/null; done

#--------------------------重新打開一個shell窗口----------------------

#通過top命令可以看到5456的CPU使用率為20%左右,說明被限制住了

#不過這時系統的%us %sy在10%左右,那是因為我測試的機器上cpu是雙核的,

#所以系統整體的cpu使用率為10%左右

dev@ubuntu:~$ top

Tasks: 139 total, 2 running, 137 sleeping, 0 stopped, 0 zombie

%Cpu(s): 5.6 us, 6.2 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 499984 total, 15472 free, 81488 used, 403024 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 383332 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND

5456 dev 20 0 22640 5472 3524 R 20.3 1.1 0:04.62 bash

#這時可以看到被限制的統計結果

dev@ubuntu:~$ cat /sys/fs/cgroup/cpu,cpuacct/test/cpu.stat

nr_periods 1436

nr_throttled 1304

throttled_time 51542291833

結束語

使用cgroup限制CPU的使用率比較糾結,用cfs_period_us & cfs_quota_us吧,限制死了,沒法充分利用空閑的CPU,用shares吧,又沒法配置百分比,極其難控制。總之,使用cgroup的cpu子系統需謹慎。

參考

CFS Bandwidth Control

cpu

總結

以上是生活随笔為你收集整理的linux cgoup内存限制,Linux Cgroup系列(05):限制cgroup的CPU使用(subsystem之cpu)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。