Show Table of Contents
章 3. 子系統和可調整的參數
「子系統」(Subsystem)是可偵測到控制群組的數個 kernel 模組。一般來講,它們是能將不同層級的系統資源,分配給不同控制群組的資源控制器。然而,子系統亦可針對不同程序群組而定,被設計為與 kernel 進行任何的其它互動。用來開發新子系統的「應用程式介面」(API)記載於 kernel 文件中的
cgroups.txt 中,存放在您系統的 /usr/share/doc/kernel-doc-kernel-version/Documentation/cgroups/ 上(由 kernel-doc 套件提供)。最新版本的 cgroups 文件亦可藉由 http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt 取得。不過請注意,最新版本文件中的功能,可能會與安裝在您系統上的 kernel 中的功能不相符。
包含了控制群組的子系統參數的「狀態物件」會被顯示為控制群組的虛擬檔案系統中的「偽檔案」(pseudofiles)。這些偽檔案可透過 shell 指令,或是它們的相等系統調用來操作。比方說,
cpuset.cpus 是個可指定控制群組允許存取哪個 CPU 的偽檔案。若是 /cgroup/cpuset/webserver 是個在一部系統上執行的網站伺服器的控制群組,而我們執行下列指令:
~]# echo 0,2 > /cgroup/cpuset/webserver/cpuset.cpus
便會將
0,2 寫入 cpuset.cpus 偽檔案中,並從而限制任何 PID 列在了 /cgroup/cpuset/webserver/tasks 中的工作,使它們在系統上僅可使用 CPU 0 以及 CPU 2。
3.1. blkio
區塊 I/O(
blkio)子系統負責控制和監控控制群組中的工作,對於區塊裝置上 I/O 的存取權限。將數值寫入某些偽檔案中會限制存取功能或頻寬,從這些偽檔案中讀取資訊能提供關於 I/O 運作的資訊。
- blkio.weight
- 這指定了控制群組就預設值,可使用的區塊 I/O 存取權限的相應比例(權重),範圍為
100到1000。特定裝置會以blkio.weight_device參數置換這個值。比方說,若要指定預設權重500給某個控制群組,使其能夠存取區塊裝置,請執行:echo 500 > blkio.weight - blkio.weight_device
- 這指定了控制群組可使用的特定裝置的 I/O 存取權限的相關比例(權重),範圍為
100到1000。此參數的值會置換所指定的裝置的blkio.weight值。這些值的格式為 major:minor weight,其中 major 與 minor 和裝置類型與節點編號表示於 Linux 已分配的裝置中,亦稱為 Linux 裝置清單,並可藉由 http://www.kernel.org/doc/Documentation/devices.txt 取得。比方說,若要指定權重500給某個控制群組使其能夠存取/dev/sda,請執行:echo 8:0 500 > blkio.weight_device在 Linux 已分配的裝置標記法中,8:0代表/dev/sda。 - blkio.time
- 回報控制群組擁有特定裝置的 I/O 存取權限的時間。項目含有三個欄位:major、minor 以及 time。Major 和 minor 為指定於 Linux 已分配的裝置中的裝置類型與節點編號,而 time 為時間長度,單位為毫秒(ms)。
- blkio.sectors
- 回報控制群組的特定裝置的輸入與輸出磁區的數量。項目包含四個欄位:major、minor 以及 sectors。major 和 minor 為指定於 Linux 已分配的裝置中的裝置類型和節點編號,sectors 則為磁碟磁區的數量。
- blkio.io_service_bytes
- 回報了控制群組由特定裝置傳出或傳入的位元組數量。項目含有四個欄位:major、minor、operation,以及 bytes。major 與 minor 為指定於 Linux 已分配的裝置中的裝置類型與節點編號,operation 代表作業的類型(
read、write、sync,或是async),並且 bytes 代表已傳輸的位元組數量。 - blkio.io_serviced
- 回報控制群組在特定裝置上執行的 I/O 作業數量。項目含有四個欄位:major、minor、operation 以及 bytes。major 和 minor 為指定於 Linux 已分配的裝置中的裝置類型與節點編號,而 operation 代表作業的類型(
read、write、sync或async),並且 number 代表作業的數量。 - blkio.io_service_time
- 回報控制群組在特定裝置上,I/O 作業的請求送出與完成之間所花的時間。項目含有四個欄位:major、minor、operation 以及 bytes。major 和 minor 為指定於 Linux 已分配的裝置中的裝置類型和節點編號,operation 代表作業的類型(
read、write、sync或async),並且 time 為時間的長度,單位為十億分之一秒(ns)。時間會以十億分之一秒為單位回報,而非較大的單位,如此一來此報告會較有意義,就算是針對於固態裝置亦然。 - blkio.io_wait_time
- 回報控制群組在特定裝置上的 I/O 作業,等待排程器佇列中的服務所耗費的時間總長。當您詮釋此報告時,請注意:
- 所回報的時間可能會比花掉的時間長,因為回報的時間為控制群組的所有 I/O 作業的時間總長,而非控制群組本身花在等待 I/O 作業的時間。若要找出群組整體所花費的等待時間,請使用
blkio.group_wait_time。 - 若裝置有個
queue_depth> 1,所回報的時間便只包含直到請求被送出至裝置的時間,而非在裝置重新排序請求時,等待服務所花費的時間。
項目含有四個欄位:major、minor、operation 以及 bytes。Major 和 minor 為指定於 Linux 已分配的裝置中的裝置類型和節點編號,operation 代表作業類型(read、write、sync或是async),並且 time 為時間長度,單位為十億分之一秒(ns)。時間會以十億分之一秒為單位回報,而非較大的單位,如此一來此報告會較有意意,就算是針對於固態裝置。 - blkio.io_merged
- 回報控制群組請求合併入 I/O 作業請求的 BIOS 數量。項目含有兩個欄位:number 和 operation。number 為請求的數量,並且 operation 代表作業類型(
read、write、sync或async)。 - blkio.io_queued
- 回報控制群組的 I/O 作業請求排程數量。項目含有兩個欄位:number 和 operation。number 為回報請求的數量,並且 operation 代表作業類型(
read、write、sync或async)。 - blkio.avg_queue_size
- 回報控制群組的平均 I/O 作業佇列大小(在整個群組存在的期間)。每當此控制群組的佇列取得一個 timeslice 時,佇列大小就會被取樣。請注意,此報告只有在
CONFIG_DEBUG_BLK_CGROUP=y設置於系統上的情況下,才可使用。 - blkio.group_wait_time
- 回報控制群組在等待它其中一個佇列時,所耗費的時間總長(十億分之一秒 — ns)。每當此控制群組的佇列取得了一個 timeslice 時,報告便會被更新,因此若您在控制群組等待 timeslice 時讀取此偽檔案,報告將不會包含等待目前排程的作業所耗費的時間。請注意,此報告只有在
CONFIG_DEBUG_BLK_CGROUP=y設置於系統上的情況下,才可使用。 - blkio.empty_time
- 回報控制群組在無任何等待處理的請求的情況下,所耗費的時間總長(十億分之一秒 — ns)。每當此控制群組的佇列含有等待處理的請求時,報告便會被更新,因此若您在控制群組沒有等待處理的請求時讀取此偽檔案,報告將不會包含在目前空白狀態下所耗費的時間。請注意,此報告只有在
CONFIG_DEBUG_BLK_CGROUP=y設置於系統上的情況下,才可使用。 - blkio.idle_time
- 回報控制群組的排程器,預期比已在佇列中或來自於其它群組更佳的請求,所耗費的閒置時間總長(單位為十億分之一秒 — ns)。每當群組已不再閒置時,報告便會被更新,因此若您在控制群組閒置時讀取此偽檔案,報告將不會包含在目前閒置狀態下所耗費的時間。請注意,此報告只有在
CONFIG_DEBUG_BLK_CGROUP=y設置於系統上的情況下,才可使用。 - blkio.dequeue
- 回報控制群組的 I/O 作業請求,被特定裝置清除佇列的次數。項目含有三個欄位:major、minor,以及 number。major 和 minor 代表指定於 Linux Allocated Devices 中的裝置類型與節點編號,而 number 則代表群組請求被清除佇列的次數。請注意,此報告只有在
CONFIG_DEBUG_BLK_CGROUP=y設置於系統上的情況下,才可使用。 - blkio.reset_stats
- 重設紀錄在其它偽檔案中的數據。將一個整數寫入此檔案中,以重設此 cgroup 的數據。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.