StepbystepDRP

ステップbyステップに戻る

目次

Table of Contents

1. Dynamic Resource Pools 概要

1)Dynamic Resource Poolsとは

Solaris9にて提供されているResource Poolsは、資源管理機能のひとつで、マシン資源を 分割管理し、各々の作業負荷がお互いに影響を与え合わないようにする機能です。 このResource Poolsを、動的に管理、運用できるようにしたものが、Solaris10より リリースされたDynamic Resource Poolsです。 管理者が定義したシステム・パフォーマンス・ゴールを維持し続けるために、 システムのイベントや負荷の変化に応じて、自動的かつ動的に資源の割当てを 調整します。

Resource Poolsは、マシン資源としてCPUを分割管理するために、CPUのサブセット、 スケジューリングクラスを「資源プール」(=resource poolまたはpool)と呼ばれる 管理のために固有の名称をつけられたグループに割り当てて管理します。 各々の「資源プール」には、そこに割り当てられた資源を利用するプロセス、タスク、 プロジェクト、Zonesが結合されます。

「資源プール」は、構成要素の定義により成り立っています。 構成ファイル(デフォルトでは/etc/pooladm.conf)にこれらの要素の定義を 記述すると、Resource Poolsのしくみが、この構成ファイルに基づいて動作します。

	system: マシンレベルの実体
	pool:   資源の対応付けを示す固有の名称をもつグループ
	pset:   プロセッサセット資源
	cpu:    CPUの実体 

2)新機能のサポート

Dynamic Resource Poolsでは、既存のResource Poolsにアドオンする形で新機能が 追加されています。

主な特徴:

  • Kernelがpoolと資源との結合状態を認識するようにするようになったためより自動的、動的な動作が可能
  • より柔軟で使いやすいpool定義
  • 適切なシステム資源割り当てを実現する、pool間の資源を自動移動する機能
  • 資源適用状態のモニタリング、ロギングのためのしくみの提供(poolstat,pooldコマンドの新規提供 )

主な新機能:

[注] 以下に示す、コマンドおよびコマンドオプションは、既存のものとの差分および、新規に追加された部分についてのみ紹介します。既存の機能については、各コマンドのリファレンスをご参照ください。

o pooladm

  「資源プール」のEnabling/Disableing/Update機能をサポートする。
  (S9では、boot時に/etc/pooladm.conf があれば自動的にenableになる。)

    -d    poolのしくみを無効にし、処理を停止させる
    -e    poolのしくみを無効にし、処理を開始させる
    -s    現在動作中の定義の詳細を、静的な定義ファイルに反映、更新する

o poolcfg

    -d   資源の割当てを、定義ファイルの書換えなしに、直接かつ動的にkernelに
       指示する
    -c   動的に資源の割当てを指示するための、新規サブコマンドのサポート  



  例)
    transfer to [resourcetype] name [component-list]
          Transfer one or more discrete components to a resource.

    transfer [quantity] from [resourcetype] [src] to [tgt]
          Transfer a resource quantity from src to tgt .

    transfer [quantity] to [resourcetype] [tgt] from [src]
          Transfer a resource quantity to tgt from src.

    - システム・パフォーマンス・ゴールを設定するための使用例
     ・CPUの使用率の範囲の設定
   例)
   poolcfg -dc 'modify pset foo(string pset.poold.objectives="utilization
       >20; utilization < 80")

     ・各々のCPUのStatus設定
      offline (off-line), online (on-line), interruptを無効にする(no-intr)
    例)
       poolcfg -c 'modify cpu 1 (string cpu.status = "no-intr")'

o poolbind

  -i   ・zoneの結合機能の追加
     ・Dynamicな資源の結合定義の変更
       例) 動的にプロセスを異なるpoolに割り当てることが可能

o poolstat
   新規コマンド。poolのstatusを表示。状態を連続表示することも可能。

o poold
    新規コマンド。pool systemのデーモン。
    管理者が定義したシステム・パフォーマンス・ゴールを維持し続けるために、
    システムのイベントや負荷の変化に応じて、自動的かつ動的に資源の割当てを
    調整する。
   通常は、poolのactivate/deactivateに連動し、自動的にstart/stopするが
   手動も可能。オプションによりlogging level変更の設定もできる。
  (ALERT, CRIT, ERR, WARNING, NOTICE, INFO, and DEBUG)

3)Zonesとの関係

Dynamic Resource PoolsがZonesをサポートすることによって、Solaris10では、 より完成度の高いシステム管理を実現します。

Zonesは、ひとつのマシン上に、”non-global zone”という仮想サーバを 複数実現することにより複数のシステムを独立、分離した状態で運用することを 可能にし、それぞれの仮想サーバは、設定、セキュリティ、管理、ファイルシステム を含め、お互いに影響を与え合うことなく動作します。 (詳細は、別原稿「1.Zones の概念」を参照してください。) 一方、Resource Poolsは、マシン資源としてCPUを分割管理するために、CPUの サブセット、スケジューリングクラスを”pool”の単位で管理します。

non-global zoneは、poolと1対1で結合されます。これにより、各々の non-global zoneは、論理的に独立した仮想サーバであるだけでなく、分割管理された マシン資源の実態を伴った、物理的にも独立性を保った仮想サーバとして動作する ことが可能となります。

DRPs_overview.gif

さらにpoolに結合されたnon-global zoneは、論理的、物理的に独立した仮想サーバで ありながら、Dynamic Resource Poolsの実現する動的、自動的な、資源割り当て機能 により、複数の仮想サーバ間において、ひとつのマシン上の資源をフレキシブルに 利用できるという利点を得ることができます。

また、Dynamic Resource Poolsの構成ファイルは、唯一global zoneに保持され、 global zoneからは、すべてのpoolに関する情報を見ることができます。 non-global zoneは、それ自身が結合されているpoolに関する情報のみが表示される 仕組みになっています。poolとの結合オペレーションは、global zoneにおいてのみ 実行可能です。従って、global zoneはDynamic Resource Poolsのオペレーションに おいてコンソール的な役割を果たします。

このようにDynamic Resource PoolsとZonesは、N1 Grid Containersの コンポーネントとして、その相乗効果により、総合的なシステム管理機能を提供します。

2.Dynamic Resource Pools の使用例

ここでは、Dynamic Resource Poolsとして新しく追加された機能の例として、 プロセス、またはzoneをpoolへ動的に結合するオペレーション、および一連の ステップについて説明します。

<index>

  設定項目、オペレーションは、次の順番になっています。

  1.Enable						
  2.Configuring Pools		
  3.Create new elements		
  4.Binding to a Pool(プロセス)
  5.Binding to a Pool(zone)
  6.Report Statistics					
  7.Remove a Pools Configuration
  8.Disable	

<step by step>

説明を読みながら、ご自分の環境でオペレーションをお試しください。

準備)

  superuser、またはProcess Management profileを含むroleになってください。
  system Administrator roleは、Process Management profileを含みます。
  roleの作成方法、およびuserへのroleの割当て方法については、
  System Administration Guide: Security Servicesに記載されている
  “Managing RBAC (Task Map)”をご参照ください。

[注]以下のステップのうち、Dynamic Resource Poolsよりサポートされる新機能については<新機能>と記しています。

  

1.Enable

デフォルトでは、「資源プール」は、activeの状態になっていないので、 最初にenabel(有効)にする必要があります。

1)<新機能>
「資源プール」のしくみを利用できるように、enable状態にします。

# pooladm -e

2.Configuring Pools

1)<新機能>
現在動作中の定義の詳細を、静的な定義ファイルに反映、更新します。 デフォルトでは、定義ファイルとして/etc/pooladm.confが用いられます。

# pooladm -s

[注]既存の/etc/pooladm.confファイルが存在しない場合は、当オペレーションにより新規作成されます。pooladm.confの編集は、コマンドを介して設定を行い、エディタ等で直接編集することはできません。

[注]Solaris9/Resours Poolsでは、当オペレーションに該当する部分を'poolcfg -c discover'で実行していましたが、Dynamic Resource Poolsでは新規に追加された他のオプションとの整合性の点から、'pooladm -s'を使用してください。

2)構成ファイル(ここでは/etc/pooladm.conf)の内容を確認します。

# poolcfg -c info

次のように、人が読める形式に変換して表示されます。(例) default elementsは、systemが自動的に以下の値を生成します。

system XXXXX
       string  system.comment 
       int     system.version 1
       boolean system.bind-default true
       int     system.poold.pid 1392

       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 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 17
               uint    pset.size 1
               string  pset.comment 

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

 [注]
	system: マシンレベルの実体
	pool:   資源の対応付けを示す固有の名称をもつグループ
	pset:   プロセッサセット資源
	cpu:    CPUの実体 

       その他のpropertyについては、"Dynamic Resource Pools (Overview)"の
       Configuration Constraints and Objectivesの章を参照してください。
     http://docs.sun.com/db/doc/817-1592/6mhahuok4?l=ja&a=view

3.Create new elements

1)ユーザ定義のpool(ここではpool_test1)を新規作成します。

# poolcfg -c 'create pool pool_test1'

2)ユーザ定義のpset(ここではpset_test1)を新規作成します。

[注]ご使用のマシンがsingle CPU構成の場合は、当オペレーションは省略してください。4)でcommitした時にエラーが検出されます。

# poolcfg -c 'create pset pset_test1(uint pset.min = 1; uint pset.max = 2)'

3)1)、2)で新規作成された'pool_test1'および'pset_test1'が、構成ファイルに反映されたことを確認します。

# poolcfg -c info

表示(例)

system XXXXX
       string  system.comment 
       int     system.version 1
       boolean system.bind-default true
       int     system.poold.pid 1392

       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

       pool pool_test1
               boolean pool.active true
               boolean pool.default false
               int     pool.importance 1
               string  pool.comment 
               pset    pset_default

       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 10
               uint    pset.size 1
               string  pset.comment 

               cpu
                       int     cpu.sys_id 0
                       string  cpu.comment 
                       string  cpu.status on-line
                       
       pset pset_test1
               int     pset.sys_id -2
               boolean pset.default false
               uint    pset.min 1
               uint    pset.max 2
               string  pset.units population
               uint    pset.load 0
               uint    pset.size 0
               string  pset.comment 

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

4)現在の構成の整合性を検証し、問題がなければインスタンスを作成します。

これによって、構成ファイルの静的な定義が、動的な実体として起動され「資源プール」が動作した状態になります。

# pooladm -c

4.Binding to a Pool(プロセス)

Solaris9 Resours Poolsでは、poolへのプロセスの結合を動的に変更できませんでしたが Dynamic Resource Poolsでは、Enableの状態のまま動的な結合の変更が可能となります。 ここでは、プロセスの例で説明していますが、タスク、プロセス、zoneについても同様に 動的再配置が可能になっているのが、Dynamic Resource Poolsの特徴のひとつです。

[注]「動的」とは、「資源プール」がactive状態のままという意味です。

1)現在のshellプロセスが、どのpoolに結合されているかを確認します。

# poolbind -q $$

デフォルトでは、次のように表示されます。

1388    pool_default

2)<新機能>
このshellプロセスを、「3.Create new elements」1)で作成した ユーザ定義のpool, pool_test1に動的に結合し直します。

# poolbind -p pool_test1 $$   

&size(12){ [参考]Solaris9/Resours Poolsでは、Resours Poolsがcreateされた状態で当オペレーションを実行すると、次のようなエラーが検出されます。"poolbind: pid 4787 をプール 'pool_test1' にバインドしています:

Bad parameter supplied"

3)2)で再配置したshellプロセスの、結合先が変更されたことを確認します。

# poolbind -q $$
 

表示(例)poolが、'pool_default'から'pool_test1'に変わっています。

1388    pool_test1

5.Binding to a Pool(zone)

non-global zoneは、poolと1対1で結合されます。non-global内の個々のプロセスを 'poolbind'コマンドによって、異なるpoolに結合することはできません。 また、poolbindのオペレーションは、global zoneより行います。 global zoneからは、すべてのpoolに関する情報を見ることができます。 一方、non-global zoneにおいては、自zoneに関連のあるpoolについてのみ情報が 表示されます。

準備1)
別原稿「2.zoneの作成 (zonecfg)」および「3.zoneの起動 (zoneadm)」に 従い、ユーザ作成のnon-global zone(ここではMyZone)をrunningの状態にして おきます。

準備2)
新たに端末エミュレータを開き(以降「端末2」とします。これに対し、ここまで 使用していた端末エミュレータは「端末1」とします。)、myzoneにloginします。

# zlogin -C myzone

準備3)「端末1」(global zone)にて、zone IDを確認しておきます。

# zoneadm list -vc

  表示(例) myone のZone IDは、'1'になっています。

 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  1 MyZone           running        /export/home/MyZone           

1)<新機能>
myzoneがどのpoolに結合されているかを確認します。「端末2」(non-global zone)にて、次のオペレーションを実行します。

# poolstat

表示(例)
non-global zoneでは、自zoneに関連のあるpoolについてのみ情報が表示されます。 つまり、ここでは、MyZoneはpool_defaultに結合されていることがわかります。

                             pset
id pool                 size used load
 0 pool_default            1 0.00 0.13

2)<新機能>
「端末1」(global zone)にて、MyZoneをpool_test1に、動的に再結合します。

# poolbind -p pool_test1 -i zoneid 1

'poolbind -p poolname [ -i idtype] id...'のフォーマットをとります。 ここでは、idtypeは、zoneidになり、MyZoneのZoneIDである'1'を指定します。

3)<新機能>
myzoneがどのpoolに結合されているかを、再度確認します。「端末2」(non-global zone)にて、次のオペレーションを実行します。

# poolstat

表示(例)
表示されるpoolがpool_test1に変わりました。 myzoneは、pool_test1へ動的に結合され直したことがわかります。

                             pset
id pool                 size used load
 2 pool_test1              1 0.00 0.00

6.Report Statistics

「5.Binding to a Pool(zone)」1)、3)で使用した'poolstat'コマンドの   オプションを紹介します。

[注]これ以降の操作は、すべて「端末1」でおこなってください。

1)<新機能>
5秒おきに3回poolstatを実行し「資源プール」の状態を連続的に表示します。

# poolstat 5 3

表示(例)

                             pset
id pool                 size used load
 0 pool_default            1 0.00 0.00
 2 pool_test1              1 0.00 0.00
                             pset
id pool                 size used load
 0 pool_default            1 0.00 0.00
 2 pool_test1              1 0.00 0.00
                             pset
id pool                 size used load
 0 pool_default            1 0.01 0.00
 2 pool_test1              1 0.01 0.00

2)<新機能>

  • rオプションにより指定した資源についてのリスト(psetまたはallが指定可能)を表示します。
# poolstat -r pset

表示(例)

id pool                 type rid rset                  min  max size used load
 0 pool_default         pset  -1 pset_default            1  66K    1 0.00 0.00
 2 pool_test1           pset  -1 pset_default            1  66K    1 0.00 0.00

7.Remove a Pools Configuration

1)現在activeになっているユーザ定義のpoolを動的に削除します。

# pooladm -x

[注]構成ファイル(ex./etc/pooladm.conf)の内容は、保持されたままです。(poolcfg -c infoで確認可能)

[注]removeされたpoolが保持していた資源や結合されていたプロセス, zoneなどは、自動的にpool_defaultに割当て直されます。

8.Disable

1)<新機能>
Pools Facilityの機能をdisable状態にします。

# pooladm -d

以上、Dynamic Resource Poolsのオペレーションの一部をご紹介しました。