工作負載分區中的資源控制基於 Workload Manager (WLM) 技術,這種技術是從 IBM® AIX V4.3.3 開始在 AIX® 內核中引入的。工作負載分區 (WPAR) 資源控制包含並擴展 WLM 技術。它在 WLM 之上提供一個抽象層,這簡化了資源控制,管理員不需要深入了解 WLM。
簡介
在 AIX V6.1 中,支持 8192 個用戶定義的超類,可以同時支持最多 8192 個活躍的 WPAR,這大大提高了 WLM 的可伸縮性。在基於百分比的資源限制設置中,資源控制的粒度也更細了。現在,基於百分比的資源限制設置中的每個值(<min>%、<sMax>% 和 <hMax>%)可以精確到小數點後兩位。
按照 WLM 的術語,WPAR 作為 Tier-0 中的常規 WLM 類。WPAR 的基本名變成它的 WLM 類名。wlmstat 命令已經改進了,現在包含 -@ 命令行選項,它報告與 WPAR 相關的資源使用量。
可以通過 WPAR 資源控制指定:
指定 CPU 和內存分配有兩種方法:
當前活躍的所有工作負載分區的 minimum% 總和不能超過 100%。
如果同時指定份額和百分比限制,那麼百分比限制優先。
在幾乎所有情況下,基於份額的資源控制方法應該可以滿足資源控制需求。如果必須為工作負載分區設置最小資源量或最大資源量,就需要使用基於百分比的控制方法。
WPAR 的 CPU 資源控制
WPAR 的 CPU 資源控制可以在創建 WPAR 時使用 mkwpar 命令或通過 chwpar 指定。chwpar 命令對於正在運行的 WPAR 也是有效的。
chwpar -R shares_CPU=<shares> <wpar name> chwpar -R CPU=<min%>-<soft max %>, <hard max%> <wpar name>
以上命令中指定的 CPU 限制是指系統看到的 “虛擬” CPU。AIX 分區可以是具有專用 CPU 的 LPAR 或具有部分 CPU 的 DLPAR,也可以是非分區系統。在所有情況下,wlmstat 報告的 CPU 利用率和內核對 WPAR 采取的 CPU 資源控制措施都應用於分區上的有效虛擬 CPU。
為了演示 CPU 資源控制,我們運行了幾個 CPU 密集型程序的實例,它們在一個 WPAR 上生成工作負載,同時使用 vmstat 和 wlmstat -@ 命令監視 CPU 使用量。我們不斷增加工作負載,直到 vmstat 報告的 CPU 使用量超過 90%。
然後,啟用資源控制,限制這個 WPAR 的 CPU 使用量,如下所示:
chwpar R CPU=5%-45%,50% wpar1
在 vmstat 輸出中可以清楚地看到 CPU 利用率從 100% 下降到大約 40%-45%(見 “id” 字段)。這說明 WPAR 資源控制起作用了。
kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------------------- r b avm fre re pi po fr sr cy in sy cs us sy id wa pc ec 1 0 134166 105131 0 0 0 0 0 0 22 38 191 92 0 7 0 1.00 151.5 1 0 134198 105098 0 0 0 0 0 0 20 658 187 93 1 5 0 1.00 151.5 1 0 134271 104997 0 0 0 0 0 0 14 25 182 92 0 7 0 1.00 151.5 1 0 134271 104997 0 0 0 0 0 0 13 14 184 92 0 7 0 1.00 151.5 2 0 134277 104991 0 0 0 0 0 0 18 2031 203 91 7 2 0 0.84 127.0 <wpar cpu resource control added> 1 0 134277 104991 0 0 0 0 0 0 18 17 184 64 0 35 0 0.46 70.1 1 0 134277 104991 0 0 0 0 0 0 9 17 181 60 0 39 0 0.43 65.6 1 0 134277 104991 0 0 0 0 0 0 9 12 176 56 0 44 0 0.40 61.0 1 0 134277 104991 0 0 0 0 0 0 18 13 179 44 0 55 0 0.32 48.7 1 0 134277 104991 0 0 0 0 0 0 8 11 179 47 0 53 0 0.34 51.3 1 0 134277 104991 0 0 0 0 0 0 17 24 187 50 0 50 0 0.36 54.3 1 0 134277 104991 0 0 0 0 0 0 22 18 196 52 0 47 0 0.38 57. 1 0 134276 104992 0 0 0 0 0 0 8 17 178 51 0 49 0 0.37 55.7 1 0 134277 104991 0 0 0 0 0 0 10 15 181 64 0 36 0 0.46 69.6 1 0 134277 104991 0 0 0 0 0 0 6 13 183 60 0 40 0 0.43 64.9
下面的 wlmstat 輸出顯示平均 CPU 使用量大約在軟限制左右。但是,偶爾會超過硬限制,後面解釋這一現象。
# wlmstat -@ 2 CLASS CPU MEM DKIO wpar1 42.49 2.26 0.00 TOTAL 42.49 2.26 0.00 CLASS CPU MEM DKIO wpar1 39.83 2.26 0.42 TOTAL 39.83 2.26 0.42 CLASS CPU MEM DKIO wpar1 36.99 2.26 0.19 TOTAL 36.99 2.26 0.19
在 mpstat 命令窗口中,可以看到以下輸出:
cpu min maj mpc int cs ics rq mig lpa sysc us sy wa id pc %ec lcs 0 8 0 0 168 180 90 0 0 100 44 0 2 0 98 0.05 5.0 242 1 0 0 0 116 2 2 0 0 100 3920 99 1 0 0 0.95 95.0 100 ALL 8 0 0 284 182 92 0 0 100 3964 95 1 0 5 1.00 151.5 342 -------------------------------------------------------------------------------- 0 1 0 0 168 174 88 0 0 100 14 0 1 0 99 0.05 4.9 241 1 0 0 0 121 1 1 0 0 100 3920 99 1 0 0 0.95 95.1 100 ALL 1 0 0 289 175 89 0 0 100 3934 95 1 0 5 1.00 151.5 341
資源集 0 現在是空閒的,而資源集 1 現在承擔所有工作負載。這是因為 WPAR 資源控制已經把這個 WPAR 的處理限制在邏輯 CPU 1 上了。還要注意以上 mpstat 輸出中的 “pc” 和 “%ec” 字段(它們分別表示物理 CPU 和有效 CPU 利用率百分比)。邏輯 CPU 0 中的工作負載只占用物理 CPU 的 5%,而邏輯 CPU 1 占用其余部分。
可以在 WPAR 之間共享資源集。一個 WPAR 可以使用已經與另一個 WPAR 相關聯的資源集。(但是,mkwpar/chwpar 會發出警告)。
在下面的示例中,當資源集 1 滿負載時,我們啟動另一個 WPAR(名為 def),不啟用資源控制,然後在其中增加 CPU 工作負載。
在 mpstat 命令窗口中,可以看到以下輸出:
cpu min maj mpc int cs ics rq mig lpa sysc us sy wa id pc %ec lcs 0 52 0 1 276 204 82 0 0 100 3564 99 1 0 0 0.50 50.0 100 1 0 0 1 127 0 0 0 0 100 3201 100 0 0 0 0.50 50.0 100 ALL 52 0 2 403 204 82 0 0 100 6765 99 1 0 0 1.00 151.6 200 -------------------------------------------------------------------------------- 0 2 0 0 276 173 79 0 0 100 3209 99 1 0 0 0.50 50.1 100 1 0 0 0 133 3 2 0 0 100 3208 100 0 0 0 0.50 49.9 100 ALL 2 0 0 409 176 81 0 0 100 6417 100 0 0 0 1.00 151.5 200
在這個示例中,可以看到兩個邏輯 CPU 都滿負載了。注意 mpstat 輸出中的 “pc” 和 “%ec” 字段。每個邏輯 CPU 分別使用分配給分區的物理 CPU 總量的 50%。
現在,為 WPAR “def” 啟用資源控制,使用與另一個 WPAR 相同的資源集。
# chwpar -R rset=sys/cpu.00001 def ********************************************************************** Warning chwpar: 0960-105 resources.rset must be unique across all workload partitions.rset = sys/cpu.00001 also found in the following files:/etc/wpars/abc.cf **********************************************************************
如下所示,mpstat 現在報告邏輯 CPU 0 恢復到空閒狀態,而邏輯 CPU 1 從邏輯 CPU 0 接管 WPAR “def” 的進程的工作負載。
cpu min maj mpc int cs ics rq mig lpa sysc us sy wa id pc %ec lcs 0 8 0 0 218 336590 336491 0 0 100 45 0 0 0 100 0.38 38.1 99 1 0 0 0 122 99 99 0 0 100 3142 100 0 0 0 0.63 63.3 99 ALL 8 0 0 340 336689 336590 0 0 100 3187 63 0 0 37 1.01 153.6 198 -------------------------------------------------------------------------------- 0 1 0 0 182 339612 339514 0 0 100 13 0 0 0 100 0.37 36.7 100 1 0 0 0 125 99 99 0 0 100 3166 100 0 0 0 0.63 63.3 100 ALL 1 0 0 307 339711 339613 0 0 100 3179 63 0 0 37 1.00 151.5 200
另外,“pc” 和 “%ec” 字段表明,邏輯 CPU 1 現在的物理 CPU 使用量增加了 (63.3%)。
在前面的資源集示例中,可以看到 CPU 使用量達到最高水平。也可以結合使用 CPU 限制(基於份額或基於百分比)和資源集,從而限制資源集中的 CPU 使用量。如果對資源集應用 CPU 限制,那麼這一限制會應用於此資源集中的可用 CPU 資源總量。
排他的資源集
還可以給 WPAR 分配排他的資源集。如果 WPAR 與排他的資源集相關聯,那麼只允許來自這個 WPAR 的進程在屬於這個資源集的 CPU 上運行。這對於希望為 CPU 密集型應用程序分配專用計算資源的情況很有用。
使用以下命令創建排他的資源集:
mkrset -c 1 sysxrset/<rset name>
使用以下命令把 WPAR 與排他的資源集關聯起來:
chwpar -R rset=sysxrset/<rset name> <wpar name>
當前,排他的資源集可以與多個 WPAR 相關聯,但是這一點以後可能會改變。
請注意,CPU 限制不能應用於排他的資源集。如果指定 CPU 限制,它們會被忽略。