成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Linux中如何使用cgroups限制cpu

這篇文章主要講解了“Linux中如何使用cgroups限制cpu”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Linux中如何使用cgroups限制cpu”吧!

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)興安盟免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 來限制該組中的所有進程在單位時間里可以使用的 cpu 時間。這里的 cfs 是完全公平調(diào)度器的縮寫。cpu.cfs_period_us 就是時間周期,默認為 100000,即百毫秒。cpu.cfs_quota_us 就是在這期間內(nèi)可使用的 cpu 時間,默認 -1,即無限制。

跑一個耗 cpu 的程序

代碼如下:


# echo 'while True: pass'|python &
[1] 1532

top 一下可以看到,這進程占了 100% 的 cpu

代碼如下:


 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1532 root      20   0  112m 3684 1708 R 99.6  0.7   0:30.42 python
...

然后就來對這個進程做一下限制。先把 /foo 這個控制組的限制修改一下,然后把進程加入進去。

代碼如下:


echo 50000 >/sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us
echo 1532 >/sys/fs/group/cpu/foo/tasks


可見,修改設(shè)置只需要寫入相應(yīng)文件,將進程加入 cgroup 也只需將 pid 寫入到其中的 tasks 文件即可。這里將 cpu.cfs_quota_us 設(shè)為 50000,相對于 cpu.cfs_period_us 的 100000 即 50%。再 top 一下看看效果。

代碼如下:


 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1532 root      20   0  112m 3684 1708 R 50.2  0.7   5:00.31 python
...

可以看到,進程的 cpu 占用已經(jīng)被成功地限制到了 50% 。這里,測試的虛擬機只有一個核心。在多核情況下,看到的值會不一樣。另外,cfs_quota_us 也是可以大于 cfs_period_us 的,這主要是對于多核情況。有 n 個核時,一個控制組中的進程自然最多就能用到 n 倍的 cpu 時間。

這兩個值在 cgroups 層次中是有限制的,下層的資源不能超過上層。具體的說,就是下層的 cpu.cfs_period_us 值不能小于上層的值,cpu.cfs_quota_us 值不能大于上層的值。

另外的一組 cpu.rt_period_us、cpu.rt_runtime_us 對應(yīng)的是實時進程的限制,平時可能不會有機會用到。

在 cpu 子系統(tǒng)中,cpu.stat 就是用前面那種方法做的資源限制的統(tǒng)計了。nr_periods、nr_throttled 就是總共經(jīng)過的周期,和其中受限制的周期。throttled_time 就是總共被控制組掐掉的 cpu 使用時間。

還有個 cpu.shares, 它也是用來限制 cpu 使用的。但是與 cpu.cfs_quota_us、cpu.cfs_period_us 有挺大區(qū)別。cpu.shares 不是限制進程能使用的絕對的 cpu 時間,而是控制各個組之間的配額。比如

代碼如下:


/cpu/cpu.shares : 1024
/cpu/foo/cpu.shares : 2048

那么當兩個組中的進程都滿負荷運行時,/foo 中的進程所能占用的 cpu 就是 / 中的進程的兩倍。如果再建一個 /foo/bar 的 cpu.shares 也是 1024,且也有滿負荷運行的進程,那 /、/foo、/foo/bar 的 cpu 占用比就是 1:2:1 。前面說的是各自都跑滿的情況。如果其他控制組中的進程閑著,那某一個組的進程完全可以用滿全部 cpu??梢娡ǔG闆r下,這種方式在保證公平的情況下能更充分利用資源。

此外,還可以限定進程可以使用哪些 cpu 核心。cpuset 子系統(tǒng)就是處理進程可以使用的 cpu 核心和內(nèi)存節(jié)點,以及其他一些相關(guān)配置。這部分的很多配置都和 NUMA 有關(guān)。其中 cpuset.cpus、cpuset.mems 就是用來限制進程可以使用的 cpu 核心和內(nèi)存節(jié)點的。這兩個參數(shù)中 cpu 核心、內(nèi)存節(jié)點都用 id 表示,之間用 “,” 分隔。比如 0,1,2 。也可以用 “-” 表示范圍,如 0-3 。兩者可以結(jié)合起來用。如“0-2,6,7”。在添加進程前,cpuset.cpus、cpuset.mems 必須同時設(shè)置,而且必須是兼容的,否則會出錯。例如

代碼如下:


# echo 0 >/sys/fs/cgroup/cpuset/foo/cpuset.cpus
# echo 0 >/sys/fs/cgroup/cpuset/foo/cpuset.mems

這樣, /foo 中的進程只能使用 cpu0 和內(nèi)存節(jié)點0。用

代碼如下:


# cat /proc/<pid>/status|grep '_allowed_list'


可以驗證效果。

cgroups 除了用來限制資源使用外,還有資源統(tǒng)計的功能。做云計算的計費就可以用到它。有一個 cpuacct 子系統(tǒng)專門用來做 cpu 資源統(tǒng)計。cpuacct.stat 統(tǒng)計了該控制組中進程用戶態(tài)和內(nèi)核態(tài)的 cpu 使用量,單位是 USER_HZ,也就是 jiffies、cpu 滴答數(shù)。每秒的滴答數(shù)可以用 getconf CLK_TCK 來獲取,通常是 100。將看到的值除以這個值就可以換算成秒。

cpuacct.usage 和 cpuacct.usage_percpu 是該控制組中進程消耗的 cpu 時間,單位是納秒。后者是分 cpu 統(tǒng)計的。

P.S. 2014-4-22

發(fā)現(xiàn)在 SLES 11 sp2、sp3 ,對應(yīng)內(nèi)核版本 3.0.13、 3.0.76 中,對 cpu 子系統(tǒng),將 pid 寫入 cgroup.procs 不會實際生效,要寫入 tasks 才行。在其他環(huán)境中,更高版本或更低版本內(nèi)核上均未發(fā)現(xiàn)。

感謝各位的閱讀,以上就是“Linux中如何使用cgroups限制cpu”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Linux中如何使用cgroups限制cpu這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

名稱欄目:Linux中如何使用cgroups限制cpu
鏈接分享:http://jinyejixie.com/article12/pggsdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、全網(wǎng)營銷推廣、云服務(wù)器網(wǎng)站內(nèi)鏈、網(wǎng)站制作網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
会同县| 鞍山市| 偏关县| 名山县| 阳泉市| 宁德市| 抚松县| 绩溪县| 化隆| 古浪县| 平远县| 武夷山市| 宝山区| 岳普湖县| 通江县| 嘉义市| 措勤县| 微山县| 城市| 和平县| 通化县| 申扎县| 苏尼特左旗| 梅州市| 荃湾区| 巴林左旗| 盐边县| 若尔盖县| 辽源市| 海兴县| 新沂市| 五原县| 杭锦后旗| 阿拉善盟| 通州市| 大厂| 旬邑县| 潼关县| 九寨沟县| 雷波县| 苍南县|