Real Time スケジューラで動作する Zone の設定方法

前回、 Solaris ゾーン上の CPU リソースは FSS(Fair Share Scheduler) でスケジューリングされる 説明をしましたが、今回は、任意のゾーンに対するスケジューリング クラスを FSS 以外に変更する方法を紹介します。

ゾーンのスケジューリングクラスをデフォルトの FSS から変更する為には、対象となる ゾーンが使用する CPU プールの pool.scheduler プロパティーに有効なスケジューリング クラスを設定します。

それでは早速、RT(Real Time Scheduler)で動作するゾーンを 作成してみましょう。具体的には、zonecfg の scheduling-class プロパティー を使ってゾーンのスケジューリングクラスを設定します。

今回は、CPU プールを作成する手間を省く為、ゾーン起動時に自動でプールを 構成する dedicated-cpu プロパティをゾーンに設定しました。

下記の例は、ゾーン名 real-zone に、2 CPU 分の CPU プールを割り当て、 scheduling-class を RT で定義しております。

# zonecfg -z real-zone
real-zone: そのような構成済みゾーンはありません
'create' を使用して、新しいゾーンの構成を開始してください。
zonecfg:real-zone> create
zonecfg:real-zone> set zonepath=/export/zone/real-zone
zonecfg:real-zone> add dedicated-cpu
zonecfg:real-zone:dedicated-cpu> set ncpus=2
zonecfg:real-zone:dedicated-cpu> end
zonecfg:real-zone> set scheduling-class=RT
zonecfg:real-zone> verify
zonecfg:real-zone> commit
zonecfg:real-zone> exit

# zoneadm -z real-zone install
Preparing to install zone .
Creating list of files to copy from the global zone.
...
The file  contains a log of the zone installation.

# zoneadm -z real-zone boot

これでゾーンのスケジューリングクラスを RT に設定したゾーンが作成できました。
現在、検証環境では、下記のように FSS で動作する zone01 と、RT で動作する real-zone が稼働しております。
# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   1 zone01           running    /export/zone/zone01            native   shared
   2 real-zone        running    /export/zone/real-zone         native   shared

poolstat コマンドで、プールの状態 (real-zone 用にプールが作成されている事) を 確認します。
# poolstat
                              pset
 id pool                 size used load
  1 SUNWtmp_real-zone       2 0.00 0.00
  0 pool_default            2 0.00 0.00

次に、各ゾーン内で priocntl -d にて起動されるプロセスのスケジューリングクラス を確認します。
zone01# priocntl -d
TIME SHARING PROCESSES:
    PID    TSUPRILIM    TSUPRI
   6487        0           0


real-zone# priocntl -d
REAL TIME PROCESSES:
    PID   RTPRI       TQNTM    TQSIG
   6484       0        1000        0

今度は実際に各ゾーンに負荷をかけ、起動するプロセス のスケジューリングクラスを確認してみます。
今回、zone01 と real-zone それぞれで CPU に負荷を かける nspin を実行した結果が下記となります。
zone01 では、PID 6522 と 6523、real-zone では、PID 6524 と 6525 が 起動しております。

# ps -efl -o pid,zone,comm | grep nspinx の結果
 6523   zone01  ./nspinx
 6522   zone01  ./nspinx
 6524 real-zone ./nspinx
 6525 real-zone ./nspinx

prstat -z の結果より、PRI を確認すると、real-zone で実行しているプロセスの PRI が 60 より大きいので、RT でスケジューリングされている事が確認できます。

prstat -z の結果
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
  6525 root     1344K  540K cpu0   100    -   0:01:53  25% nspinx/1
  6524 root     1344K  672K cpu1   100    -   0:01:53  25% nspinx/1
  6522 root     1344K  672K cpu3    20    0   0:01:57  25% nspinx/1
  6523 root     1344K  540K run     20    0   0:01:57  25% nspinx/1
....
....
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     2       14   17M   20M   0.2%   0:03:59  50% real-zone
     1       14   22M   25M   0.3%   0:03:58  50% zone01
     0       52  173M  256M   3.2%   0:01:13 0.0% global

Total: 80 processes, 312 lwps, load averages: 4.92, 5.53, 2.86

ご参考で、各スケジューリングクラスに割り当たる PRI 番号は下記コマンドで 確認できます。

# priocntl -l
CONFIGURED CLASSES
==================

SYS (System Class)

TS (Time Sharing)
        Configured TS User Priority Range: -60 through 60

FX (Fixed priority)
        Configured FX User Priority Range: 0 through 60

IA (Interactive)
        Configured IA User Priority Range: -60 through 60

FSS (Fair Share)
        Configured FSS User Priority Range: -60 through 60

RT (Real Time)
        Maximum Configured RT Priority: 59


(補足情報)
今回、Real Time スケジューラで動作するゾーンを紹介しましたが、Real Time スケジューラで 動作するゾーンでは、FSS 制御下で動作するプロパティ( cpu-share や capped-cpu ) が制御 できませんので設計時に注意が必要です。

(参考資料)
ゾーンのスケジューリングクラス
http://docs.sun.com/app/docs/doc/819-0385/gepst?l=ja&a=view



(参考情報)
過去の 「やっぱり Sun がスキ!」blog 記事一覧はこちらを参照下さい。 http://wikis.sun.com/display/yappri/Home
投稿されたコメント:

コメント
コメントは無効になっています。
About

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日