ゾーン間にわたる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%を超えている。
これは理想的な結果になっている。
Solaris系技術トレーニング一覧