Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
3.4. cpuset
cpuset
子系統會指派每個 CPU 與記憶體節點至控制群組。每個 cpuset 都可以根據以下參數來指定,在控制群組虛擬檔案系統裡,每個參數都有獨立的「pseudofile」(偽檔案):
重要
在您將任務移到使用了任何子系統的 cgroup 之前,您必須設定這些子系統的一些必要參數。舉例來說,在將任務移到使用
cpuset
子系統的 cgroup 之前,cpuset.cpus
與 cpuset.mems
參數必須為此 cgroup 定義。
- cpuset.cpus(必要)
- 這會指定此控制群組的任務所允許存取的 CPU。這是 ASCII 格式、以逗號隔開的清單,減號(
-
)用來區分範圍。例如:0-2,16
代表第 0、1、2、與 16 個 CPU - cpuset.mems(必要)
- 指定此控制群組的任務所允許存取的記憶體節點。這是 ASCII 格式、以逗號隔開的清單,減號(
-
)用來區分範圍。例如:0-2,16
表示第 0、1、2 與 16 的記憶體節點。 - cpuset.memory_migrate
- 這包含了一個旗標值(
0
或1
),在cpuset.mems
改變時,是否要把記憶體中的分頁轉移到新的節點上。預設上,記憶體轉移是停用的(0
),分頁會留在一開始分配的節點上,即使這個節點已經不再是cpuset.mems
所指定的節點之一。如果啟用的話(1
),那麼系統就會把分頁轉移至cpuset.mems
所指定的參數之記憶體分頁上,如果可能的話,會保留其相對位置:舉例來說,清單上第二個節點的分頁最開始是由cpuset.mems
所指定,它會被分配到cpuset.mems
所指定的清單之第二個節點上(如果空間允許的話)。 - cpuset.cpu_exclusive
- 這包含了旗標值(
0
或1
),指定其它 cpuset 與其父子是否能分享指定給此 cpuset 的處理器。就預設值(0
),CPU 不會特別只分配給一個 cpuset。 - cpuset.mem_exclusive
- 這包含了旗標值(
0
或1
),指定其它 cpuset 是否可以分享指定給這個 cpuset 的記憶體節點。預設上(0
)記憶體節點是不會專門分配給一個 cpuset。專為 cpuset 保留記憶體節點(1
)的功用,與使用cpuset.mem_hardwall
啟用記憶體 hardwall 是一樣的。 - cpuset.mem_hardwall
- 這包含了旗標值(
0
或1
),指定 kernel 分配記憶體分頁與緩衝區資料時,是否要限制在指定給此 cpuset 的記憶體節點。預設上(0
),分頁與緩衝區資料會由屬於多個使用者的程序所共享。啟用 hardwall 之後(1
),每個任務的使用者分配都會被區分開來。 - cpuset.memory_pressure
- 這是一個唯讀檔案,包含此 cpuset 的程序所建立的 memory pressure(記憶體壓力)的執行平均值。這個偽檔案的值會在
cpuset.memory_pressure_enabled
啟用時自動更新;若沒啟用的話,這個偽檔案的值會是0
。 - cpuset.memory_pressure_enabled
- 這包含了旗標值(
0
或1
),指定系統是否要運算這個控制群組的程序所建立的 memory pressure(記憶體壓力)。計算後的值會寫至cpuset.memory_pressure
,並且呈現程序試圖釋放記憶體的速率,計算方式是每秒試圖重新取得記憶體的數目,乘以 1,000。 - cpuset.memory_spread_page
- 這包含了一個旗標值(
0
或1
),指定檔案系統緩衝區是不是要散佈於分配給這個 cpuset 的記憶體節點。預設值(0
)表示不把這些記憶體分頁平均分配給緩衝區,同時緩衝區都會放在建立緩衝區的程序所處的同一個節點上。 - cpuset.memory_spread_slab
- 這包含了旗標值(
0
或1
),指定 kernel slab 是不是要把快取檔案 I/O 的運作,平均分配到 cupset 去。預設值(0
)表示不平均分配 kernel slab 快取,而且 slab 快取會放在建立快取的程序所在的同樣節點上。 - cpuset.sched_load_balance
- 包含了旗標值(
0
或1
),指定 kernel 是不是要對此 cpuset 中的 CPU 進行負載平衡。預設值(1
)會進行負載平衡,把負載過重的 CPU 的程序移到負載較輕的 CPU 上。然而請注意,若在任何父控制群組中啟用了負載平衡,在控制群組中設定此旗標將不會造成影響,因為負載平衡已在更高的層級中進行了。因此,若要停用控制群組中的負載平衡,您也必須停用它在層級中,其所有 parent 的負載平衡。在此情況下,您亦必須考量是否要啟用該控制群組同層級的負載平衡。 - cpuset.sched_relax_domain_level
- 這包含了介於
-1
到一個小的正整數之間,表示 kernel 進行負載平衡的 CPU 範圍。如果cpuset.sched_load_balance
停用的話,這個值就沒有任何意義。這個值的精確意義與系統架構有關;但以下是幾個典型的值:cpuset.sched_relax_domain_level 的值值 效用 -1
系統預設值,用於負載平衡 0
不要立即進行負載平衡;只有在定期的時候進行 1
立即對同樣核心的所有執行續進行負載平衡 2
立即對同樣套件的所有核心進行負載平衡 3
立即對同樣節點或刀鋒伺服器的所有 CPU 進行負載平衡 4
立即對 NUMA 架構的多個 CPU 進行負載平衡 5
立即對 NUMA 架構的所有 CPU 進行負載平衡