やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20080619 2008年 6月 19日 木曜日

Solaris コンテナの dedicated-cpu プロパティ紹介

今回は、Solaris 10 8/07(Update 4)で追加された Solaris コンテナ の dedicated-cpu プロパティを紹介します。

dedicated-cpu プロパティを指定すると、Zone 起動時に指定した CPU 個数分のプール及び プロセッサセットを Solaris が自動作成した後 Zone が起動します。

この機能が追加される以前は、Zone に専用のプールを割り当てる際、システム管理者 が pooladm コマンドでプール及びプロセッサセットをあらかじめ作成する作業が必要でしたが、 dedicated-cpu プロパティを指定すると、Zone 起動時に Solaris がアドホックにプールを 作成する為、あらかじめプールを用意する必要がありません。

では実際に動作を確認してみましょう。
基本的な設定方法は、zonecfg コマンドから dedicated-cpu プロパティを追加する際に pool で使用する CPU 数を指定します。

[例] zone01 に 8 CPU を割り当てるプールを作成
.....
zonecfg:zone01> add dedicated-cpu
zonecfg:zone01:dedicated-cpu> set ncpus=8
zonecfg:zone01:dedicated-cpu> end

zonecfg:zone01> info
zonename: zone01
zonepath: /export/zones/zone01
brand: native
autoboot: false
bootargs: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: shared
.....
dedicated-cpu:
        ncpus: 8


それでは早速 Zone を起動してみましょう。
# zoneadm -z zone01 boot

mpstat で確認すると、指定した通り CPU が 8 個割り当てられています。
# zlogin zone01 mpstat
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    9   0  304   272  160   32    0    3   10    0    59    1   1   0  97
  1    1   0   23    15    0   18    0    2    3    0    20    1   0   0  99
  2    0   0    8    11    0   12    0    2    3    0    17    1   0   0  99
  3    0   0    6     9    0    8    0    2    3    0    10    1   0   0  99
  4    5   0   35     9    0   12    0    2    3    0    21    1   0   0  99
  5    0   0    7     8    0    7    0    1    3    0    10    1   0   0  99
  6    0   0    5     7    0    6    0    1    2    0     8    1   0   0  99
  7    0   0    4     7    0    6    0    1    2    0     8    1   0   0  99

プールの状態を確認すると SUNWtmp_zone01 という名前のプールが自動作成されました。
# poolstat
                              pset
 id pool                 size used load
  0 pool_default          120 0.00 0.04
  2 SUNWtmp_zone01          8 0.00 0.00

次に、 zone01 を停止してみます。
# zoneadm -z zone01 halt

Zoneを停止すると、自動作成した pool が消えました。
# poolstat
                              pset
 id pool                 size used load
  0 pool_default          128 0.00 0.05

このように、dedicated-cpu プロパティで CPU 数を指定する事により、事前にプールを作成 しなくても Zone 起動時に Solaris が自動でプールを作成して Zone に割り当て、 Zone 停止 時は自動でプールを削除する事が確認できました。


さらに、
複数の dedicated-cpu プロパティを設定した Zone を作成し、プール間で CPU リソースを Zone のワークロードに合わせて移動させたい場合は、dedicated-cpu プロパティ 作成時に importance パラメタを追加します。

[例] zone01 に Min 4 CPU, MAX 8 CPU の範囲で重み付け 3 を割り当てたプールを作成
onecfg:zone01> add dedicated-cpu
zonecfg:zone01:dedicated-cpu> set ncpus=4-8
zonecfg:zone01:dedicated-cpu> set importance=3
zonecfg:zone01:dedicated-cpu> end

zonecfg:zone01> info
zonename: zone01
zonepath: /export/zones/zone01
brand: native
autoboot: false
bootargs: 
pool: 
limitpriv: 
scheduling-class: 
...
dedicated-cpu:
        ncpus: 4-8
        importance: 3