CPU pool を動的に移動する : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20061025 2006年 10月 25日 水曜日

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 を設定する必要があります。

[ 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)"


投稿されたコメント:

コメント
  • HTML文法 不許可