Linux下cgroups可用于物理內(nèi)存的控制 , 適用于多種應(yīng)用場(chǎng)景 , 因?yàn)閏groups中的東西較多 , 本文就給大家簡(jiǎn)單介紹下Linux cgroups , 讓大家對(duì)其有個(gè)初步的了解 。

從 2.6.24 版本開(kāi)始 , linux 內(nèi)核提供了一個(gè)叫做 cgroups(控制組)的特性 。cgroups 就是 control groups 的縮寫(xiě) , 用來(lái)對(duì)一組進(jìn)程所占用的資源做限制、統(tǒng)計(jì)、隔離 。也是目前輕量級(jí)虛擬化技術(shù) lxc (linux container)的基礎(chǔ)之一 。每一組進(jìn)程就是一個(gè)控制組 , 也就是一個(gè) cgroup 。cgroups 分為幾個(gè)子系統(tǒng) , 每個(gè)子系統(tǒng)代表一種設(shè)施或者說(shuō)是資源控制器 , 用來(lái)調(diào)度某一類資源的使用 , 如 cpu 時(shí)鐘、內(nèi)存、塊設(shè)備 等 。在實(shí)現(xiàn)上 , cgroups 并沒(méi)有增加新的系統(tǒng)調(diào)用 , 而是表現(xiàn)為一個(gè) cgroup 文件系統(tǒng) , 可以把一個(gè)或多個(gè)子系統(tǒng)掛載到某個(gè)目錄 。如
代碼如下:
mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu
就將 cpu 子系統(tǒng)掛載在了 /sys/fs/cgroup/cpu。也可以在一個(gè)目錄上掛載多個(gè)子系統(tǒng) , 甚至全部掛載到一個(gè)目錄也是可以的 , 不過(guò)我覺(jué)得 , 把每個(gè)子系統(tǒng)都掛載在不同目錄會(huì)有更好的靈活性 。用 mount|awk ‘$5==“cgroup” {print $0}’ 可以看到當(dāng)前掛載的控制組 。用 cat /proc/cgroups 可以看到當(dāng)前所有控制組的狀態(tài) 。下面這個(gè)腳本 , 可以把全部子系統(tǒng)各種掛載到各自的目錄上去 。
代碼如下:
#!/bin/bash《/p》 《p》cgroot=“${1:-/sys/fs/cgroup}”
subsys=“${2:-blkio cpu cpuacct cpuset devices freezer memory net_cls net_prio ns perf_event}”《/p》 《p》mount -t tmpfs cgroup_root “${cgroot}”
for ss in $subsys; do
mkdir -p “$cgroot/$ss”
mount -t cgroup -o “$ss” “$ss” “$cgroot/$ss”
done
看看那些目錄里都有些啥 , 比如 ls 一下 /sys/fs/cgroup/cpu 。
代碼如下:
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release tasks
cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent
其中 “cpu.” 開(kāi)頭的就是這個(gè)子系統(tǒng)里特有的東西 。其他的那些是每個(gè)子系統(tǒng)所對(duì)應(yīng)目錄里都有的 。這些文件就是用來(lái)讀取資源使用信息和進(jìn)行資源限制的 。要?jiǎng)?chuàng)建一個(gè)控制組 , 就在需要的子系統(tǒng)里創(chuàng)建一個(gè)目錄即可 。如 mkdir /sys/fs/cgroup/cpu/foo 就創(chuàng)建了一個(gè) /foo 的控制組 。在新建的目錄里就會(huì)出現(xiàn)同樣一套文件 。在這個(gè)目錄里 , 也一樣可以繼續(xù)通過(guò)創(chuàng)建目錄來(lái)創(chuàng)建 cgroup 。也就是說(shuō) , cgroup 是可以和目錄結(jié)構(gòu)一樣有層次的 。對(duì)與每個(gè)子系統(tǒng)掛載點(diǎn)點(diǎn)目錄 , 就相當(dāng)于根目錄 。每一條不同的路徑就代表了一個(gè)不同的 cgroup 。在不同的子系統(tǒng)里 , 路徑相同就代表了同一個(gè)控制組 。如 , 在 cpu、memory 中都有 foo/bar 目錄 , 就可以用 那 /foo/bar 來(lái)操作 cpu、memory 兩個(gè)子系統(tǒng) 。對(duì)于同一個(gè)子系統(tǒng) , 每個(gè)進(jìn)程都屬于且只屬于一個(gè) cgroup , 默認(rèn)是在根 cgroup 。層次結(jié)構(gòu)方便了控制組的組織和管理 , 對(duì)于某些配置項(xiàng)來(lái)說(shuō) , 層次結(jié)構(gòu)還和資源分配有關(guān) 。另外 , 也可以修改某個(gè)目錄的 owner , 讓非 root 用戶也能操作某些特定的安全組 。
cgroups 的設(shè)置和信息讀取是通過(guò)對(duì)那些文件的讀寫(xiě)來(lái)進(jìn)行的 。例如
代碼如下:
# echo 2048 》/sys/fs/cgroup/cpu/foo/cpu.shares
推薦閱讀
- 中國(guó)30歲男人平均收入 正常90后收入表
- 過(guò)來(lái)人中考備戰(zhàn)三大經(jīng)驗(yàn) 備戰(zhàn)中考
- 拼多多退款平臺(tái)處理中要多久
- 股市技術(shù)分析“三絕”其中這本最經(jīng)典 底部三絕
- 發(fā)視頻icloud同步中什么意思
- 全自動(dòng)傘怎么打開(kāi)
- 網(wǎng)貸還在還款中可以貸款買(mǎi)房嗎
- snapchat怎么設(shè)置中文
- 中國(guó)皇室血統(tǒng)的13個(gè)姓 皇室姓氏有哪些
- 傳統(tǒng)調(diào)味品醬油的種類
