トップページ » Solaris10 Zone機能 » ゾーン間にわたるFSS(Fair Share Scheduling)の実行例
カテゴリー
My Yahoo!に追加
Sun社提供情報
Solarisパッケージダウンロード
Sunマシンは買うには
blogs.sun.com
お勧めサイト
プライベートリンク

ゾーン間にわたるFSS(Fair Share Scheduling)の実行例

【検証環境】
# more /etc/release
                         Solaris 10 3/05 s10_74L2a SPARC
           Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
                        Use is subject to license terms.
                            Assembled 22 January 2005
# uname -a
SunOS domain-a 5.10 Generic sun4u sparc SUNW,Sun-Fire-15000

# prtdiag
システム構成:  Sun Microsystems  sun4u Sun Fire 15000
システムクロック周波数: 150 MHz
メモリーサイズ: 8192 M バイト

========================= CPUs =========================

          CPU      Run    E$    CPU     CPU
Slot ID   ID       MHz    MB   Impl.    Mask
--------  -------  ----  ----  -------  ----
/SB00/P0    0       750   8.0  US-III   3.4
/SB00/P1    1       750   8.0  US-III   3.4
/SB00/P2    2       750   8.0  US-III   3.4
/SB00/P3    3       750   8.0  US-III   3.4

========================= Memory Configuration =========================

                   Logical  Logical  Logical
             Port  Bank     Bank     Bank       DIMM   Interleave  Interleave
Slot ID       ID   Number   サイズ   状態       Size   Factor      Segment
-----------  ----  -------  -------  --------  ------  ----------  ----------
/SB00/P0/B0    0      0     1024MB   正常       512MB     8-way         0
/SB00/P0/B0    0      2     1024MB   正常       512MB     8-way         0
/SB00/P1/B0    1      0     1024MB   正常       512MB     8-way         0
/SB00/P1/B0    1      2     1024MB   正常       512MB     8-way         0
/SB00/P2/B0    2      0     1024MB   正常       512MB     8-way         0
/SB00/P2/B0    2      2     1024MB   正常       512MB     8-way         0
/SB00/P3/B0    3      0     1024MB   正常       512MB     8-way         0
/SB00/P3/B0    3      2     1024MB   正常       512MB     8-way         0

========================= IO Cards =========================

                           Bus  Max
            IO   Port Bus  Freq Bus  Dev,
Slot ID     Type  ID  Side MHz  Freq Func 状態  Name                              Model
----------  ---- ---- ---- ---- ---- ---- ----- --------------------------------  ----------------------
/IO00/C5V0  PCI   28   B    33   33  1,0  了解  pci-pci1011,25.4/pci108e,1000     pci-bridge
/IO00/C5V0  PCI   28   B    33   33  0,0  了解  pci108e,1000-pci108e,1000.1
/IO00/C5V0  PCI   28   B    33   33  0,1  了解  SUNW,qfe-pci108e,1001             SUNW,pci-qfe
/IO00/C5V0  PCI   28   B    33   33  1,0  了解  pci108e,1000-pci108e,1000.1
/IO00/C5V0  PCI   28   B    33   33  1,1  了解  SUNW,qfe-pci108e,1001             SUNW,pci-qfe
/IO00/C5V0  PCI   28   B    33   33  2,0  了解  pci108e,1000-pci108e,1000.1
/IO00/C5V0  PCI   28   B    33   33  2,1  了解  SUNW,qfe-pci108e,1001             SUNW,pci-qfe
/IO00/C5V0  PCI   28   B    33   33  3,0  了解  pci108e,1000-pci108e,1000.1
/IO00/C5V0  PCI   28   B    33   33  3,1  了解  SUNW,qfe-pci108e,1001             SUNW,pci-qfe
/IO00       PCI   28   B    33   33  2,0  了解  bootbus-controller-pci108e,c416/+ SUNW,sbbc
/IO00       PCI   28   B    33   33  3,0  了解  pci108e,1100-pci108e,1100.1
/IO00       PCI   28   B    33   33  3,1  了解  network-pci108e,1101.1            SUNW,pci-eri
/IO00       PCI   28   B    33   33  3,2  了解  firewire-pci108e,1102.1001
/IO00       PCI   28   B    33   33  3,3  了解  usb-pci108e,1103.1001
/IO00/C3V0  PCI   28   A    66   66  1,0  了解  SUNW,qlc-pci1077,2200.1077.4082.+
/IO00/C5V1  PCI   29   B    33   33  1,0  了解  pci-pci1011,26.5/SUNW,qlc (scsi-+ pci-bridge
/IO00/C5V1  PCI   29   B    33   33  4,0  了解  SUNW,qlc-pci1077,2200.1077.4083.+
/IO00/C5V1  PCI   29   B    33   33  5,0  了解  SUNW,qlc-pci1077,2200.1077.4083.+


【検証内容】
・4つのCPUを2つのプロセッサセット分ける。
 pset_default: 1CPU
 zone1-pset: 3CPU

・一方のプロセッサセット(zone1-pset)に対応したリソースプール(zone1-pool)に2つのゾーン(zone1, zone3)を割り当てFSSの動作確認をする。
 zone1の zone.cpu-shares の limit値 : 20
 zone3の zone.cpu-shares の limit値 : 80
 
・さらにZone-wideにCPUのFSSが行われているローカルゾーン内でプロジェクトベースのFSSを設定して動作確認をする。
 user.rootプロジェクトの project.cpu-shares の limit値 : 80
 testプロジェクトの project.cpu-shares の limit値 : 20

【設定内容】

■ FSS (Fair Share Scheduling) の確認
 → 構成方法は こちら

# cat /etc/dispadmin.conf
#
# /etc/dispadmin.conf
#
# Do NOT edit this file by hand -- use dispadmin(1m) instead.
#
DEFAULT_SCHEDULER=FSS

システム全体でFSSが有効になっていることがわかる。

■ プロセッサセットとリソースプールの構成状態
 → 構成 方法はこちら
# pooladm

system domain-a
        string  system.comment
        int     system.version 1
        boolean system.bind-default true
        int     system.poold.pid 378

        pool zone1-pool
                int     pool.sys_id 1
                boolean pool.active true
                boolean pool.default false
                int     pool.importance 1
                string  pool.comment
                pset    zone1-pset

        pool pool_default
                int     pool.sys_id 0
                boolean pool.active true
                boolean pool.default true
                int     pool.importance 1
                string  pool.comment
                pset    pset_default

        pset zone1-pset
                int     pset.sys_id 1
                boolean pset.default false
                uint    pset.min 1
                uint    pset.max 3
                string  pset.units population
                uint    pset.load 0
                uint    pset.size 3
                string  pset.comment

                cpu
                        int     cpu.sys_id 1
                        string  cpu.comment
                        string  cpu.status on-line

                cpu
                        int     cpu.sys_id 0
                        string  cpu.comment
                        string  cpu.status on-line

                cpu
                        int     cpu.sys_id 2
                        string  cpu.comment
                        string  cpu.status on-line

        pset pset_default
                int     pset.sys_id -1
                boolean pset.default true
                uint    pset.min 1
                uint    pset.max 65536
                string  pset.units population
                uint    pset.load 5
                uint    pset.size 1
                string  pset.comment

                cpu
                        int     cpu.sys_id 3
                        string  cpu.comment
                        string  cpu.status on-line

上記のように zone1-pset に3CPU、pset_default に1CPUが割り当てられている。
また、zone1-pool は zone1-psetに対応している。

■ ローカルゾーンに対するリソースプールの割り当て状態
 → 構成方 法はこちら

# cd /etc/zones
# ls
SUNWblank.xml    SUNWdefault.xml  index            zone1.xml        zone2.xml        zone3.xml
# grep pool *
zone1.xml:<zone name="zone1" zonepath="/export/zone1" autoboot="true" pool="zone1-pool">
zone2.xml:<zone name="zone2" zonepath="/export/zone2" autoboot="true" pool="pool_default">
zone3.xml:<zone name="zone3" zonepath="/export/zone3" autoboot="true" pool="zone1-pool">
#

上記のように zone1 と zone3 は zone1-pool を利用する。
また、zone2 は pool_default を利用する。

■ ローカルゾーンの FSS の重み付け(zone.cpu-sharesのlimit値)確認
 → 構成方 法はこちら

# egrep "zone.cpu-shares|limit" /etc/zones/*
/etc/zones/zone1.xml:  <rctl name="zone.cpu-shares">
/etc/zones/zone1.xml:    <rctl-value priv="privileged" limit="20" action="none"/>
/etc/zones/zone2.xml:  <rctl name="zone.cpu-shares">
/etc/zones/zone2.xml:    <rctl-value priv="privileged" limit="80" action="none"/>
/etc/zones/zone3.xml:  <rctl name="zone.cpu-shares">
/etc/zones/zone3.xml:    <rctl-value priv="privileged" limit="80" action="none"/>

この設定例の場合、同じpoolを利用する zone1 と zone3 の値の割合が FSS でのCPU配分になる。この場合、最盛期で zone1が 20% 、zone3が 80% のCPUリソースの利用を保証される。zone1-pset は 3CPU(全体の75%)を握っているので、globalゾーンからみた最盛期でのzone1 の利用率は 15% (75%の2割)、zone3 の利用率は 60% (75%の8割)となる。

■ zone1のプロジェクトの FSS の重み付け(project.cpu-sharesのlimit値)確認

# zlogin zone1
[ゾーン 'zone1' pts/2 に接続されました]
Last login: Wed Mar 16 16:23:05 on pts/4
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
# cat /etc/project
system:0::::
user.root:1::::project.cpu-shares=(privileged,80,none)
noproject:2::::
default:3::::
group.staff:10::::
test:100::root::project.cpu-shares=(privileged,20,none)

ここまでの設定例で、zone1では最盛期でもシステム全体の15%のCPUリソースを獲得できる状態になっている。さらに上記設定をすることでローカル ゾーン内でのプロジェクトベースのFSSが可能になる。上記例ではuser.rootというプロジェクトに80%、testというプロジェクトに20%の 配分にしている。

■ zone の動作確認

# zoneadm list -vc
  ID NAME             STATUS         PATH
   0 global           running        /
   1 zone1            running        /export/zone1
   2 zone3            running        /export/zone3
   3 zone2            running        /export/zone2

【検証結果】

zone1, zone2, zone3でそれぞれ4つずつ John the Ripper というパスワードクラッキングツールを実行した。zone1ではプロジェクトベースのFSS設定を確かめるため、プロジェクトをtestに変更してさらに4つの john を実行している。
(これはCPUに負荷をかけることが目的なのでCPUバウンドなプログラムであれば何でもよい。)


■ global-zoneでのprstat -Zの結果

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
  8874 root     6768K 6368K run      5    0   0:01:09  12% john/1
  8877 root     6768K 6368K run      8    0   0:00:46  11% john/1
  8880 root     6768K 6368K run      8    0   0:00:33  11% john/1
  8883 root     6768K 6368K cpu1    11    0   0:00:22 9.6% john/1
  8886 root     6768K 6368K run      7    0   0:00:14 8.1% john/1
  8889 root     6768K 6368K run     11    0   0:00:08 6.3% john/1
  8876 root     6768K 6304K run      7    0   0:00:22 4.5% john/1
  8873 root     6768K 6304K run      7    0   0:00:36 4.5% john/1
  8879 root     6768K 6304K run      1    0   0:00:14 4.1% john/1
  8882 root     6768K 6304K run      1    0   0:00:09 4.0% john/1
  8875 root     6768K 6368K cpu2    11    0   0:00:26 3.2% john/1
  8885 root     6768K 6304K run      7    0   0:00:06 3.2% john/1
  8872 root     6768K 6368K cpu0    14    0   0:00:36 3.1% john/1
  8888 root     6768K 6304K run      2    0   0:00:04 3.0% john/1
  8878 root     6768K 6368K run      4    0   0:00:11 2.9% john/1
ZONEID    NPROC  SIZE   RSS MEMORY      TIME  CPU ZONE
     8       42  172M  114M   1.4%   0:03:24  57% zone3
     6       42  171M  108M   1.3%   0:01:42  23% zone2
     5       42  167M  102M   1.2%   0:01:41  16% zone1
     0       58  324M  115M   1.4%   0:02:10 0.8% global

理想値は
zone1 = 75% x 20% -> 15%
zone2 = 75% x 80% -> 60%
zone3 = 25% x 100%(80) -> 25%
なのでほぼ設定通りの結果になっていることがわかる。

■ zone1でのprstat -Jの結果

   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
  8914 root     6768K 6368K cpu2    21    0   0:00:18 4.4% john/1
  8912 root     6768K 6368K run     15    0   0:00:20 4.3% john/1
  8911 root     6768K 6368K run     14    0   0:00:21 4.1% john/1
  8913 root     6768K 6368K run     15    0   0:00:18 4.0% john/1
  8923 root     6768K 6368K run      1    0   0:00:03 1.9% john/1
  8922 root     6768K 6368K run      9    0   0:00:04 1.4% john/1
  8921 root     6768K 6368K run     12    0   0:00:05 1.4% john/1
  8924 root     6192K 5128K cpu1    59    0   0:00:00 0.1% prstat/1
  3472 root     4288K 2984K sleep   59    0   0:00:00 0.0% nscd/26
  3370 root       11M 6352K sleep   29    0   0:00:03 0.0% svc.startd/12
  4221 root     6376K 2168K sleep   59    0   0:00:00 0.0% sendmail/1
  3961 root     2904K 2016K sleep   58    0   0:00:00 0.0% bash/1
  3581 root     1984K  912K sleep   58    0   0:00:00 0.0% smcboot/1
  3672 root     2536K 1552K sleep   59    0   0:00:00 0.0% snmpdx/1
  3685 root     3864K 2184K sleep   59    0   0:00:00 0.0% snmpXdmid/2
PROJID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT
     1        6   31M   28M   0.4%   0:01:17  17% user.root
   100        5   27M   25M   0.3%   0:00:12 4.8% test
     0       34  129M   67M   0.8%   0:00:14 0.0% system

こちらもほとんど理想通り1:4の比率(20:80)でスケジューリングされている。
global-zoneから見たCPUの使用率は15%程度だが、
zone1で見ると、割り当てられた3CPU(75%)内での使用率であるため、
パーセンテージの合計は15%を超えている。
これは理想的な結果になっている。

Solaris10 Zone機能のその他のリンク

Solaris系技術トレーニング一覧

Solaris10システム管理基本コース
Solaris10ネットワーク・インターネットサーバー管理コース
セキュリティ・パフォーマンス管理・トラブルシューティング等
Sun Cluster、ボリューム管理ソフトウェア
仮想化技術全般
シンクライアント、SunRay、デスクトップソフトウェア
アイデンティティマネージメントサービス
アプリケーションサーバーとWebポータル
サーバー(ハードウェア)メンテナンス
Sun Java CAPS
MySQL