2006年 10月 25日 水曜日
やっぱり Sun がスキ!
CPU pool を動的に移動する
T2000 上に Solarisコンテナを複数作成して運用する場合、それぞれの zone
に 専用の CPU pool を割り当てる事ができ、 さらに pool 間の CPU を動的に移動でき
る運用ができる事はご存知の方も多いと思います。
しかし、CPU のリソースを pool 間で移動する時、手動でなく OS がワークロード
に合わせてダイナミックに CPU を移動できるってご存じでしたか?
今回は、Solaris 10 から追加された動的資源プールの新機能で "wt-load" という
poold のプロパティを紹介します。
実際に動的 CPU pool を作成する際、単に pool を作成し、それぞれの zone に pool を割り
当てただけではワークロードに合わせて動的に CPU の数を変更してくれません。
動的に CPU の数を変更する為には、 poold のプロパティ名 system.poold.objectives
に wt-load を設定する必要があります。
poolcfg -c 'modify system default (string system.poold.objectives="wt-load")'実際に設定すると、pool のパラメタは下記の通りとなります。
t1000# pooladm
system default
string system.comment
int system.version 1
boolean system.bind-default true
string system.poold.objectives wt-load <=== ここに注目
int system.poold.pid 317
....
....
そこで、Sun Fire T1000 を使って実際に動的 pool を作成してテストしてみました。
pool 検証環境作成ログはここを参照下さい。
***** ここからテストの開始です。*****
zone 1 に割当たっている pool1 に対して CPU負荷をかけてみます。
すると、90 秒間隔で、CPU が 1 個づつ他の pool から pool1 に移動し、最終的に pool1 は
max 値まで移動します。
[検証ログ]
(初期状態)
poolstat -r all 出力結果の size 列から、 pool1 に 12 CPU、 pool_default に 8 CPU、pool2 に 12 CPU 割り当てられている事を確認。
t1000# poolstat -r all
id pool type rid rset min max size used load
1 pool1 pset 1 pset1 5 20 12 0.00 0.00
0 pool_default pset -1 pset_default 1 66K 8 0.00 0.02
2 pool2 pset 2 pset2 5 20 12 0.00 0.00
####
(ここから、pool1 に対して CPU 負荷をかける。sizeの列に注目!!)--- 90秒後 ---
t1000# poolstat -r all
id pool type rid rset min max size used load
1 pool1 pset 1 pset1 5 20 13 13.0 7.99
0 pool_default pset -1 pset_default 1 66K 7 0.07 0.68
2 pool2 pset 2 pset2 5 20 12 0.02 0.20
####
( pool_default の CPU が pool1 に1個移動した) --- 90秒後 ---
id pool type rid rset min max size used load
1 pool1 pset 1 pset1 5 20 14 14.0 26.6
0 pool_default pset -1 pset_default 1 66K 6 0.05 0.17
2 pool2 pset 2 pset2 5 20 12 0.01 0.04
####
( pool_default の CPU が pool1 に1個移動した)---
--- 540秒後 ---
---
t1000# poolstat -r all id pool type rid rset min max size used load 1 pool1 pset 1 pset1 5 20 20 20.0 32.0 0 pool_default pset -1 pset_default 1 66K 3 0.05 0.02 2 pool2 pset 2 pset2 5 20 9 0.01 0.00( 最終的に、max 値まで pool1 に CPU リソースが移動します)
この結果のように、コマンドで明示的に CPU リソースを pool 間で移動しなくても OS が
ワークロードに合わせて自動的にリソース移動を行ってくれます。
ちなみに、手動で CPU を移動する場合は、CPUの数または、CPU の番号を指定して移動
させます。
[ 手動による CPU 移動例 ]
# poolcfg -dc 'transfer 2 from pset pset2 to pset1' または # poolcfg -dc "transfer to pset pset1 ( cpu 30; cpu 31)"
Posted at 09:16午前 10 25, 2006 by Naoyuki Yamada in Sun | 投稿されたコメント[0]