CPU リソースを最適化することで,性能を改善できることがあります。 この章では,次のような作業を実行する方法について説明します。
CPU モニタリング・ツールを使用して CPU 性能についての情報を得る (13.1 節)
プロセッサを追加するか,あるいはクラス・スケジューラによりタスクとアプリケーションの実行を制御することで CPU 性能を改善する (13.2 節)
表 13-1
では,CPU の使用状況について情報収集するためのツールについて説明します。
表 13-1: CPU のモニタリング・ツール
名前 | 説明 | 参照先 |
|
実行中のプロセスについて,現在の統計情報を表示する。 この情報には CPU の使用状況,プロセッサおよびプロセッサ・セット,スケジュールの優先順位などがある。 |
|
|
プロセスのスレッド,仮想メモリの使用状況 (ページ・リスト,ページ・フォールト,ページ・イン,ページ・アウト),割り込み,CPU の使用状況 (ユーザ時間,システム時間およびアイドル時間の割合) の情報を表示する。 最初にブート時点以降の統計情報が表示され,次に指定した時間間隔で統計情報が表示される。 |
|
システムの平均負荷と,直前 5 秒間,直前 30 秒間,直前 60 秒間の実行キュー内のジョブ数を表示する。
また, |
||
CPU の統計情報 (さまざまな CPU 状態での経過時間の割合など) を表示する。 |
||
システム上の各 CPU について,ロック・クラスごとのロック統計情報を表示する。 |
||
システムの構成を分析し,統計情報を表示する。 また,カーネル変数の設定およびメモリと CPU リソースをチェックし,SMP システムおよびカーネル・プロファイルの性能データと統計情報を表示する。 |
詳細は,2.3.3 項または
|
|
実行中のプロセスについて,現在の統計情報を表示する。 CDE の「アプリケーション・マネージャ」から「プロセス・チューナ」のグラフィカル・ユーザ・インタフェース (GUI) を起動して,プロセスの一覧とその特性の表示,自身または全ユーザについて実行中のプロセスの表示,プロセスの優先順位の表示および変更,プロセスへのシグナル送信を行う。 プロセスのモニタリング中に,表示するパラメータ (CPU の使用量の割合,仮想メモリのサイズ,状態, |
||
稼働中のシステムでさまざまな性能データを収集し,情報をグラフィカルな形式で表示するか,またはバイナリ・ファイルに保存する。 |
詳細は,
|
|
システムの状態 (CPU リソースを大量に使用するプロセスのリストなど) についてのレポートを継続的に表示する。 |
|
|
現在アクティブなメッセージ・キュー,共用メモリ・セグメント,セマフォ,リモート・キュー,ローカル・キュー・ヘッダについて,プロセス間通信 (IPC) の統計情報を表示する。
|
詳細は,
|
|
|
現在の時刻,システムが開始されてから経過した時間,システムにログインしているユーザ,直前 5 秒間,直前 30 秒間,直前 60 秒間の実行キュー内のジョブ数を表示する。 |
詳細は,
|
|
詳細は,
|
以降の節では,ps
,vmstat
,uptime
,cpustat
,および
lockstats
コマンドについて詳しく説明します。
13.1.1 uptime コマンドを使って平均負荷をモニタリングする
uptime
コマンドは,システムが稼働した時間と平均負荷を表示します。
平均負荷では,ディスク入出力を待機しているジョブの数,nice
または
renice
コマンドで優先順位が変更されたアプリケーションの数をカウントします。
平均負荷の数値は,直前 5 秒間,直前 30 秒間,直前 60 秒間に実行キューにあった平均ジョブ数です。
uptime
コマンドの例を次に示します。
# /usr/ucb/uptime 1:48pm up 7 days, 1:07, 35 users, load average: 7.12, 10.33, 10.31
このコマンドでは,現在の時刻,システムが起動されてからの経過時間,システムにログインしているユーザの数,直前 5 秒間,直前 30 秒間,直前 60 秒間の平均負荷が表示されます。
このコマンド出力からは,負荷が増えているか減っているかが判断できます。 許容できる平均負荷は,システムのタイプと使い方によって異なります。 一般に,大規模なシステムでは負荷が 10 であれば高く,負荷が 3 であれば低いといえます。 ワークステーションの負荷は 1 か 2 になるようにしてください。
負荷が高い場合は,どのようなプロセスが実行されているか
ps
コマンドで確認します。
アプリケーションによっては,オフピーク時に実行してもよいものがあります。
ps
コマンドについての詳細は,12.3.2 項
を参照してください。
nice
または
renice
コマンドを用いてアプリケーションの優先度を下げ,CPU 時間の使用量を減らすこともできます。
詳細は,
nice
(1)renice
(8)13.1.2 kdbx デバッガ lockstat 拡張を使って CPU 使用状況をチェックする
kdbx
デバッガの
cpustat
拡張は,CPU の統計情報を表示します。
たとえば,次の各状態で CPU 時間が経過した割合などです。
ユーザ・レベル・コードの実行
システム・レベル・コードの実行
nice
機能で設定した優先度での実行
アイドル状態
待ち状態 (入出力のペンディングによるアイドル)
kdbx
デバッガの
cpustat
拡張は,アプリケーションの開発者が,システム全体の並行処理がどの程度効率的に行われているかを判断する際に役に立ちます。
特に指定しなければ,kdbx cpustat
拡張は,システム内の全 CPU について統計情報を表示します。
たとえば次のようになります。
# /usr/bin/kdbx -k /vmunix /dev/mem (kdbx)cpustat Cpu User (%) Nice (%) System (%) Idle (%) Wait (%) ===== ========== ========== ========== ========== ========== 0 0.23 0.00 0.08 99.64 0.05 1 0.21 0.00 0.06 99.68 0.05
詳細は,『Kernel Debugging』 と
kdbx
(8)13.1.3 kdbx デバッガ lockstat 拡張を使ってロックの使用状況をチェックする
kdbx
デバッガの
lockstats
拡張は,システム内の各 CPU について,ロック・クラスごとに次のようなロック統計情報を表示します。
構造体のアドレス
ロック統計情報が記録されるロックのクラス
ロック統計情報が記録される CPU
ロックのインスタンス数
プロセスがロックを取得しようとした回数
プロセスがロックを取得しようとして失敗した回数
プロセスがロックに失敗した回数の割合
プロセスがロック待ちに費やしたトータル時間
1 つのプロセスがロックを待った時間の最大値
1 つのプロセスがロックを待った時間の最小値
たとえば次のように入力します。
# /usr/bin/kdbx -k /vmunix /dev/mem (kdbx)lockstats
詳細は,『Kernel Debugging』 と
kdbx
(8)13.2 CPU 性能の改善
システムは,使用できる CPU 時間を競合するプロセス間で効率的に配分して,ユーザおよびアプリケーションのニーズに合った性能を実現できなければなりません。 CPU の使用状況を最適化することで,性能を改善できます。
CPU の性能を改善するためのガイドラインを表 13-2
に示します。
表 13-2: 主な CPU 性能改善のガイドライン
ガイドライン | 性能上の利点 | 欠点 |
プロセッサを追加する (13.2.1 項)。 | CPU リソースが増加する。 | 適用はマルチプロセシング・システムに限られ,仮想メモリの性能に影響することがある。 |
クラス・スケジューラを使用する (13.2.2 項)。 | CPU リソースが重要なアプリケーションに割り当てられる。 | なし |
ジョブの優先順位を設定する (13.2.3 項)。 | 重要なアプリケーションの優先順位が確実に最高になる。 | なし |
ジョブをオフピークの時間帯にスケジューリングする (13.2.4 項)。 | システムの負荷が分散される。 | なし |
advfsd
デーモンを停止する (13.2.5 項)。 |
必要とする CPU パワーが減る。 | AdvFS グラフィカル・ユーザ・インタフェースを使用していない場合にのみ適用できる。 |
ハードウェア RAID を使用する (13.2.6 項)。 | CPU のディスク入出力オーバヘッドが軽減され,ディスク入出力の性能が向上する。 | コストが増加する。 |
以降の節では,CPU リソースを最適化する方法について説明します。
CPU リソースを最適化しても性能の問題が解決しない場合は,CPU を高速なプロセッサにアップグレードする必要があります。
13.2.1 プロセッサを追加する
マルチプロセシング・システムでは,プロセッサを追加して計算能力を強化できます。 マルチプロセシングの効果が最も大きい作業負荷は,同時に実行できる複数のプロセスまたは複数のスレッドからなる処理です。 このような処理には,データベース管理システム (DBMS) サーバ,インターネット・サーバ,メール・サーバ,計算サーバがあります。
アイドル時間の割合が小さいマルチプロセシング・システムでは,プロセッサを追加することで改善できます。 アイドル時間をチェックする方法については,12.3.1 項 を参照してください。
プロセッサを追加する前に,仮想メモリまたは入出力サブシステムで性能の問題が発生していないことを確認しなければなりません。 たとえば,メモリ・リソースが十分でないシステムでは,プロセッサの数を増やしても性能は改善できません。
さらに,プロセッサの数を増やすと,入出力とメモリ・サブシステムの要求が増加し,ボトルネックが生じることもあります。
プロセッサを追加し,システムがメタデータを多用する (すなわち,小規模のファイルをいくつもオープンしてくり返しアクセスするシステム) 場合は,ライトバック・キャッシュを備えた RAID コントローラを使用して同期書き込み動作の性能を改善できます (9.4 節
を参照)。
13.2.2 クラス・スケジューラを使用する
クラス・スケジューラでは,タスクやアプリケーションがプロセッサ (CPU) にアクセスする時間を制限することで,その実行を制御する手段が提供されます。
たとえば,プリント・スプーラのようなデーモンではアクセス時間を少なくします。
CPU は他のタスクの実行に,より時間を割くことができます。
このために,プリント・デーモン
/usr/lbin/lpd
には,使用可能な CPU 時間の特定の割合以上は割り当てないようにします。
ユーザの UID (ユーザ識別子) のようなリソース UID でクラス分けして,各クラスに必要な CPU アクセス時間を割り当てることができます。
この機能によって,最も重要な業務に必要な処理時間が与えられるように,システム・リソースを割り当てることができます。 たとえば,2 つのバージョンの業務用データベースを使う場合を考えます。 1 つは実際の業務で使用し,もう 1 つは異なるチューニング・パラメータを設定したテスト・コピーです。 この場合,テスト・コピーは異なるクラスに割り当て,日常業務に影響を与えないようにします。
クラス・スケジューラを設定して使用するには,以下の手順を実行します。
CPU リソースの割り当てを計画する。
class_admin
を使用して,クラス・データベースを設定し,保守する。
クラスを作成し,クラスにメンバを追加する。
show
コマンドを使ってクラスのエントリを検証する。
エントリをデータベースに保存する。
クラス・スケジューリングを有効にして,デーモンを起動する。
クラス・スケジューラのコマンドを使って,以下のように,スケジューリングのモニタリングと制御を行います。
stat
のような
class_admin
コマンドを,対話型セッションを実行せずに,コマンド行あるいはシェル・スクリプトで実行します。
runclass
コマンドを使用し,特定のクラス用に設定された優先順位に従って,タスクを実行します。
以降の項で,クラス・スケジューリングを使用するための系統立てたアプローチについて説明しますが,必ずしも説明している順番で実行する必要はありません。 クラス・スケジューラにアクセスする方法には,次の 2 つがあります。
手動
コマンド行から
class_admin
コマンドを実行し,省略時のデータベースを構成し,クラスとクラス・メンバを追加し,そしてクラス・スケジューリングを有効にして CPU リソース共用問題の簡単な解決をはかります。
グラフィカル・インタフェース
SysMan Menu サブオプションのクラス・スケジューリングで利用できるグラフィカル・ユーザ・インタフェースを使用します。 これは,[Monitoring and Tuning] メニュー・オプションの下にあります。
SysMan Menu を実行する方法は,『システム管理ガイド』 を参照してください。 13.2.2.6 項 では,グラフィカル・インタフェースの使用方法を説明しています。 正しいデータ・エントリについての補足情報は,オンライン・ヘルプを参照してください。
以下のリファレンス・ページに,クラス・スケジューラ・コマンドとオプションについての詳細が説明されています。
class_scheduling
(4)
class_admin
(8)
runclass
(1)
sysman
(8)
class_admin
コマンドのオンライン・ヘルプを表示するには,次のコマンドを実行します。
# /usr/sbin/class_admin help
クラス・スケジューラを使用するには,まずデータベース・ファイルを作成し,そのファイルに 1 つ以上のクラスを設定する必要があります。 クラスにはそれぞれ,CPU 値 (利用可能な合計 CPU 時間に対するパーセンテージ) が割り当てられ,これによって処理時間へのアクセスが制御されます。 1 つのクラスには,1 つ以上のアプリケーションまたはアプリケーション群を割り当てることができます。 クラスは,次のような一意のシステム・プロセス識別子に従って識別されます。
UID -- ユーザ識別子。 ユーザ・アカウント (ログイン) ごとに割り当てられる一意の番号。
GID -- グループ識別子。 複数のユーザ・アカウントが同じグループに属することを示すために割り当てる番号または名前。
PID -- プロセス識別子。 システムがプロセスごとに割り当てる一意の番号。
PGID -- プロセス・グループ識別子。 システムがプロセス・グループごとに割り当てる一意の番号。
SESS -- セッション識別子。 システムがセッションごとに割り当てる一意の番号。
PID,PGID および SESS は,通常,一時的な識別子であるので,リブート後には失われ,タスクが完了すると存在しなくなります。 これらはデータベースに保存されないので,システムやタスクを再起動すると使用できなくなります。
データベースが確立されたら,クラス・スケジューリングを有効にできます。 この操作によって,クラス・スケジューリング・デーモンが起動され CPU アクセス制限が有効になります。 この他にも,クラスの見直し,内容やスケジューリング・パラメータの変更,コンポーネントやクラス全体の削除を行うコマンドがあります。 クラス・スケジューリング・データベースを構成して有効にすると,次のことができるようになります。
runclass
を使用し,特定のクラスに対して指定した CPU アクセス値に従ってタスク (プロセス) を実行する。
たとえば,対話式の操作には,プリント・デーモンのようなバックグラウンド・プロセスよりもはるかに高い値を設定するといったことが可能です。
プリント・ジョブに一時的に高い値を使用するには,対話式操作と同じクラスで
lpr
コマンドを実行します。
class_admin
コマンドを使用して,スクリプト内からクラス・スケジューリング・コマンドを実行する。
プロセスのモニタとチューニングに際して,次のユーティリティも使用できます。
nice
コマンド
プロセス・チューナ (dxproctuner
) グラフィカル・インタフェース。
CDE の「アプリケーション・マネージャ - システム管理」の「モニタリング/チューニング」フォルダで使用します。
SysMan Menu から,iostat
および
vmstat
コマンドが起動できます。
クラス・スケジューラは,コマンド行インタフェースとグラフィカル・ユーザ・インタフェースの両方で利用することができます。 クラス・スケジューラは,使用するインタフェースに合わせて,次のような方法で呼び出すことができます。
SysMan Menu からは,[モニタリング/チューニング] を選択して,次に[クラス・スケジューリング] タスクを選択します。
コマンド行からは,次のいずれかのコマンドを入力します。
# sysman class_sched # sysman -menu "Class Scheduling"
CDE では,以下の操作を行います (グラフィカル・ユーザ・インタフェースとして CDE を使用していると仮定)。
CDE のフロントパネルから,「アプリケーション・マネージャ」を選択します。
「システム管理」を選択します。
「モニタリング/チューニング」を選択します。
クラス・スケジューラのアイコンを選択します。
以降の項では,コマンド行を使った方法を中心に説明し,グラフィカル・インタフェースについては簡単な概略を示します。
グラフィカル・インタフェースを使用する方法についての詳細は,オンライン・ヘルプを参照してください。
13.2.2.2 クラス・スケジューリングのプランニング
CPU リソースをどう割り当てるかは,システム環境によって異なり,どのリソースまたは優先順位を考慮するかにも依存します。 通常は,ユーザに対する応答時間が長くならないよう,対話式タスクに大きな CPU 率を割り当てます。 ほとんどのバッチ・プロセスやバックグラウンド・プロセスには,少ない CPU 率を割り当てますが,特定のバックグラウンド・プロセスでは,大きな CPU 率を必要とする場合もあります。 たとえば,夜間バックアップを行おうとする場合,それが適切な時間内に完了しないほど CPU 率を低くしようとは考えないでしょう。
対話式プロセスより優先すべきリアルタイム・タスクが存在する場合は,とるべきアクションは違ってきます。 この場合,まずプロセスをクラスに割り当てるベース・ラインを設計します。 そして,プロセスをモニタするとともにユーザのフィードバックを集め,それを考慮してクラス間でタスクを移動したり,クラスの CPU アクセス時間を変更したりすることにより,データベースをチューニングすることができます。
クラス・スケジューリングを構成するときは,テスト・プロセスの作成にルート・アカウントを使わないでください。
ルート・アカウント・プロセスは,既存の制限付きクラスに割り当てた場合でも,必ず他のプロセスより優先されます。
13.2.2.3 クラス・スケジューラの構成
class_admin
コマンドを使用して,初期データベースを構成します。
このコマンドには次の機能があります。
クラスのデータベースを作成,管理するための (サブ・コマンドを伴う) 対話式コマンド。
このデータベースは,/etc/class
というバイナリ・ファイルに格納され,手動で変更することはできません。
オプションのリストについては,class>
コマンド・プロンプトで
help
と入力します。
コマンド・プロンプトで
class_admin
コマンドを実行できる,またはシェル・スクリプトにコマンドを取り込めるコマンド・モード。
enable
コマンドを使用してクラス・スケジューリングを有効にするには,その前にデータベースを構成する必要があります。
class_admin
コマンドを入力したときにデータベースが存在しなければ,コマンドは対話式セッションを起動し,データベースを構成するよう求めます。
スクリプトによって
class_admin
コマンドが起動すると,システムの省略時の設定を使用してデータベースが自動的に構成されます。
次の例は,class_admin
を使用した対話式構成セッションを示します。
実際の出力では,行が 80 カラムに合わせてフォーマットされます。
# /usr/sbin/class_admin Class Scheduler Administration configure: Shall processes that have not been explicitly assigned to a defined class be assigned to a 'default' class? Enter (yes/no) [no]: yes Enforce class scheduling when the CPU is otherwise idle? (yes/no) [no]: yes How often do you want the system to reset class usage? Enter number of seconds (1): 2 class>
上の構成値により,次の事項が設定されます。
スケジューリングするには,プロセスをクラスに割り当てる必要があります。
最初のプロンプトに
yes
と答えると,default
という特別なクラスが作成されます。
定義されたクラスに明示的に割り当てられていないプロセスは,この省略時のクラスに割り当てられます。
このプロンプトに
no
と答えた場合,定義済みのクラスに明示的に割り当てられたプロセスだけが,クラス・スケジューリングされます。
2 番目のプロンプトに
yes
と答えると,システムがアイドル状態のときには,クラスがそれらに割り当てられた CPU 時間率を超えることができます。
no
と答えた場合,CPU に他の作業が存在しなくても,クラスは割り当てられた時間率に限定されます。
3 番目のプロンプトでは,全部のクラスについての標準リセット時間が設定できます。 たとえば,省略時の時間を 1 秒という短い時間に設定した場合,各クラスはより頻繁に CPU にアクセスする機会が与えられますが,1 回のアクセス時間は短くなります。
クラス・スケジューリングの対象となっている対話式ジョブがある場合,応答時間を短くするために小さい数字 (数秒) を使用します。 バッチ・ジョブだけをクラス・スケジューリングする場合,応答時間は問題でないので,大きな値を指定しても構いません。
上の例では,省略時のクラスが作成され,現在のプロセスが全部,この省略時のクラスに割り当てられています。 CPU がアイドル状態でもクラス・スケジューリングが強制され,クラスの使用は 5 秒ごとにリセットされます。
現在の構成を表示するには,show
コマンドを使用します。
class> show Configuration: -Processes not explicitly defined in the database are class scheduled. -If the processor has some idle time, class scheduled processes are not allowed to exceed their cpu percentage. -The class scheduler will check class CPU usage every 2 seconds. Class scheduler status: disabled current database: /etc/class Classes: default targeted at 100%: class members: Every one not listed below
プロセスの次のステップは,クラスを作成し,UID や SESS のような適切な識別子を使用して,クラスにタスク,デーモン,またはユーザ・アカウントのようなシステム・プロセスを設定することです
13.2.2.4 クラスの作成と管理
データベースが構成されていれば,次のようにクラスを管理することができます。
クラスの作成
クラスへのプロセスの追加
クラスからのプロセスの削除
任意のクラスの CPU アクセス値 (時間率) の変更
空のまたは空でないクラス全体の破壊
クラス・メンバと構成設定の詳細表示
現在の優先順位の設定に対する実際の CPU 使用統計情報の表示
これらのオプションの一部については,以降の項で簡単に説明します。
コマンド・オプションの詳細については,オンライン・ヘルプおよびリファレンス・ページを参照してください。
13.2.2.4.1 クラスを作成する
クラスを作成するには,コマンド・モードを使用するか,または次のように対話式セッションを開始します。
# class_admin class> create high_users 50
コマンド・モードの場合は,次のように入力します。
# class_admin create batch_jobs 10 batch_jobs created at 10% cpu usage changes saved
最初のコマンドは,high_users
という名前のクラスを作成し,CPU の使用上限として 50 パーセントを割り当てます。
2 番目のコマンドは,batch_jobs
という名前のクラスを作成し,10 パーセントの CPU 使用上限を割り当てます。
コマンド・モードでは,変更内容が
/etc/class
内のデータベースに自動的に保存されます。
対話式でクラスに変更を加える場合は,save
コマンドを使用して,データベースに加えた変更を確定します。
quit
コマンドでセッションを終了する際に保存されていない変更があれば,対話式セッションを終了する前に,変更内容を保存するかまたは廃棄するかを尋ねる次のプロンプトが表示されます。
class> quit Class scheduler database modified. Save changes? (yes/no) [yes]:yes changes saved
クラス・スケジューラが認識する一意に割り当てた識別子 (PID,GID,または UID など) によって,プロセスがどのクラスのメンバであるかが識別されます。
クラスを作成した後,add
コマンドを使って,UID と GID またはプロセスを 1 つ以上のクラスに追加することができます。
使用する識別子 (ID) のタイプを指定し,1 つ以上の一意の識別子を入力する必要があります。
UID および GID は
/etc/passwd
および
/etc/group
ファイルから判断できます。
また,代わりに,アカウント・マネージャ (dxaccounts
) というグラフィカル・インタフェースを使用して,UID およびグループ情報を表示できます。
プロセス識別子は,システム・ファイルから,または
ps
などのコマンドによって取得することができます。
ps
コマンドにより,PID,PGID,および SESS の値が判断できます。
次のコマンドを使用して,システムで実行中のプロセス全部の PID を表示できます。
# /sbin/ps aj USER PID PPID PGID SESS JOBC S TTY TIME COMMAND walt 5176 5162 5176 2908 1 S ttyp1 0:01.30 -sh (csh) root 12603 5176 12603 2908 1 R + ttyp1 0:00.05 ps aj
このコマンドの詳細と,コマンド使用時に表示されるプロセス・データ項目の最終的な一覧については,
ps
(1)
次の識別子がサポートされています。
gid
/etc/group
ファイルにあるグループ識別子番号。
たとえば,あるクラスにメンバを追加する場合,この番号を使用すると,そのグループに割り当てられているすべてのユーザが追加されます。
uid
/etc/passwd
ファイルにあるユーザ識別番号。
たとえば,あるクラスにメンバを追加する際に,この番号により,その UID が割り当てられている特定のユーザだけが追加されます。
pgrp
プロセス・グループ識別子。
ps aj
コマンドで表示される上記テーブル例の
PGID
という見出しにあるエントリを参照してください。
session
セッション識別子。
ps aj
コマンドで表示される上記テーブル例のSESS
という見出しにあるエントリを参照してください。
pid
プロセス識別子。
ps aj
コマンドで表示される上記テーブル例の
PID
という見出しにあるエントリを参照してください。
uid
および
gid
の 2 タイプの識別子は,リブートまたはクラス・スケジューリングを停止,再起動した後も続けて使用できるので,最も頻繁に使用することになるでしょう。
dxaccounts
のようなアカウント管理ツール,または SysMan Menu の [アカウント] オプションを使用して,ユーザおよびグループの UID および GID をリストすることができます。
タイプが
pgrp
,session
,および
pid
の識別子は一時的な識別子で,リブートやプロセス終了後には失われます。
13.2.2.4.3 クラス・スケジューラを有効にする
クラス・スケジューラ・デーモンを有効にするには,次のコマンドを実行します。
# class_admin enable Class scheduling enabled and daemon \ /usr/sbin/class_daemon started.
デーモンを無効にするには,次のコマンドを実行します。
# class_admin disable Class scheduling disabled.
プロセスをクラスに追加するには,次の対話式モードの例に示すように,add
コマンドを入力します。
class> add batch_jobs uid 234 457 235
前に指定した一意の識別子のいずれかを使用しなければならず,また,同じ識別子は 1 つのクラスで 2 回以上追加できません。 次に示すように,同じ手順をコマンド・モードまたはスクリプトから実行することもできます。
# class_admin add batch_jobs uid 234 457 235 uid 234 457 235 added to high_users
コマンド・モードでは,クラスに追加した内容は,自動的に
/etc/class
データベースに保存されます。
13.2.2.4.5 クラスからメンバを削除する
クラスから 1 つ以上のプロセスを削除するには,対話式モードまたはコマンド・モードで
delete
コマンドを入力します。
次に例を示します。
class> delete high_users uid 11 uid 11 deleted from high_users
この例では,high_users
クラスから 11 という 1 つの UID を削除します。
13.2.2.4.6 その他のクラス管理オプション
次のオプションについての詳細は,
class_admin
(8)
クラスの優先順位の変更。 次に例を示します。
class> change batch_jobs 20 batch_jobs retargeted at 20%
空のまたは空でないクラス全体の破壊。 次に例を示します。
class> destroy high_users high_users is not empty. to destroy anyway? [yes/no]:yes high_users destroyed
スケジューリング・データベースのロードと保存。 次に例を示します。
class> load database_performance current database modified and not saved load new database anyway (destroys changes)? (yes/no) [yes]: \ yes database database_performance loaded
この例では,現在のデータベースに対する保存されていない変更があることが検出され,ユーザに変更内容を保存するかどうかを尋ねるプロンプトが表示されます。
現在の優先順位の設定に対する実際の CPU 使用統計情報の表示。 次に例を示します。
class> stats Class scheduler status: enabled class name target percentage actual percentage high_users 50% 40.0% batch_jobs 10% 2.0%
スケジューラ・クラスを作成し,クラス・スケジューリングを有効にしたら,runclass
コマンドを使用して特定のクラスでコマンドを実行することができます。
root ユーザ (スーパユーザ) として
runclass
コマンドを使うと,プロセスが既存クラスに割り当てられていても,CPU リソースへ無制限にアクセスすることができます。
省略時の設定では,ルート・プロセスは制限されていません。
このため,ユーザ・プロセスはルート・アカウントで必要とされるリソースをロックすることはできません。
クラス・スケジューラの構成をテストする必要がある場合は,非特権ユーザ・アカウントを使ってログインし,プロセスを作成する必要があります。
ダミーのユーザ・アカウントを設定してこのようなテストを実行する方法も考えられます。
次のコマンドは,runclass
コマンドを使用して,端末ウィンドウを開き,それをあらかじめ作成した
high_users
に割り当てます。
# runclass high_users xterm
次のコマンドは,端末プロセスの
pgrp
番号が現在そのクラスのメンバとして識別されていることを示します。
# class_admin show . . . class members: pgrp 24330 pgrp 24351 pgrp 24373
この例では,xterm
プロセスの識別子がクラスに追加されます。
次のコマンドを使用して,プロセスを表示することができます。
#ps agx | grep xterm
詳細については,
runclass
(1)13.2.2.6 クラス・スケジューリング・グラフィカル・インタフェースの使用
クラス・スケジューラは,SysMan Menu で [モニタリング/チューニング
] タスクから [クラス・スケジューリング
] オプションを選択することによって起動することができます。
また,共通デスクトップ環境 (CDE) の「アプリケーション・マネージャ」を使って起動することもできます。
前の項で説明した,クラス・スケジューラをコマンド行で使用する方法では,初期構成で次の手順を実施します。
クラスとクラスに割り当てるプロセス,ユーザ,またはグループを計画します。
クラスを作成しデータベースに追加することにより,データベースを構成し名前をつけます。
新しいデータベースを現在のデータベースとして定義します。
クラス・スケジューリング・デーモンを開始します。
この手順を SysMan Menu の [クラス・スケジューリング] メイン・メニュー・オプションを使って行うことができます。 このオプションには,次の 3 つのサブオプションがあります。
クラス・スケジューリングを構成し,初期化する中心的なオプションです。 このオプションを選択すると,「クラス・スケジューラの設定 : hostname」というウィンドウが表示されます。 ここから,以下のオプションのいずれかを選択します。
カレントにする... -- このオプションを使って,既存のデータベースを選択し,現在のデータベースにします。 システムを最初に使う場合は,オプション・リストから省略時のデータベースしか選択できません。 このデータベースは,プレース・ホルダであり,クラスは含まれません。 この省略時設定を修正するか,または新しいデータベースを作成してリストに追加します。
新規... -- このオプションを使って,新しいデータベースを作成し,オプションのデータベースのリストに追加します。 データ・エントリのウィンドウが表示されるので,データベースに名前をつけて,クラスを選択するか新しく作成します。
コピー... -- このオプションを使って,既存のデータベースをファイルにコピーし,新しいデータベースの下敷きにすることができます。 このコピーに付けるファイル名と保存場所をたずねるプロンプトが表示されるので入力します。
修正... -- このオプションを使って,既存のデータベースの構成を変更します。 変更する前に元のデータをとっておきたい場合は,最初に [コピー...] オプションを使用する必要があります。
削除 -- このオプションを使って,オプション・リストからデータベースを削除します。 一度削除したデータベースは,復元することができません。
[新規...] オプションは,主要なオプションであり,最も頻繁に使います。 詳細は,13.2.2.7 項で説明しています。 [修正...] オプションも,これと同じインタフェースで,既存のクラスとデータベースを変更することができます。
残りのメニュー・オプションは,確認が必要ですが,多くのデータを入力することはありません。 たとえば,データベースを削除しようとすると,データベースを削除してよいかどうかを確認してくるだけです。
このオプションを使って,クラス・スケジューリング・デーモンを開始します。 デーモンが停止した場合は,再起動します。 選択が適切かどうかを確認してきます。
このオプションを使って,クラス・スケジューリング・デーモンを停止します。 選択が適切かどうかを確認してきます。
SysMan Menu を実行する方法は,『システム管理ガイド』
を参照してください。
13.2.2.6 項では,グラフィカル・インタフェースの使用方法を説明しています。
正しいデータ・エントリについての補足情報は,オンライン・ヘルプを参照してください。
13.2.2.7 データベースの作成と変更
[新規...] または [修正...] オプションを選択すると,「クラス・スケジューラの設定: クラス・スケジューラ・データベースの作成/修正」というタイトルの画面が表示されます。 この画面で,次の手順に従って新しいデータベースを作成します。
「名前:」フィールドに,作成したいデータベースの名前を入力します。
名前は,たとえば,served_applications
のようにデータベースの役割を反映するものにし,オプションのリストに表示されたときにすぐ分かるようにします。
[有効なスケジューリング・クラス] というオプション・リストから既存のクラスを選択します。 初めてデータベースを設定する場合は,クラスが表示されず,[新規...] オプションを選択できるだけです。
新しいクラスを作成するために,[新規...] ボタンを押し「新規ベース・クラスの作成」というタイトルのウィンドウを表示します。 このウィンドウで,以下のステップを実行します。
「クラス名」フィールドにクラスの名前を入力します。
クラス名は,たとえば
principal_users
のようにクラスのメンバがすぐ分かるものにします。
対象クラスに割り当てる CPU 時間のパーセント値に対応する CPU 割り当てラベルの隣までスライダ・バーを動かして,値を調節します。
「メンバ・タイプ」フィールドのプルダウン・メニューから,プロセスをこのクラスに割り当てる際に用いる識別子のタイプを選択します。 リブートの後は,グループ ID と ユーザ ID だけが保持され,セッション ID,プロセス・グループ ID,およびプロセス ID は保持されません。
「メンバ」フィールドに,/etc/passwd
ファイルに登録されているユーザ名,/etc/group
ファイルに登録されているグループ名,または次のコマンドを実行して得られるプロセス ID を入力します。
# /sbin/ps aj
[了解] ボタンを選択して,クラスの入力を終了し,前のウィンドウに戻ります。 または,[適用] ボタンを選択してそのエントリを終了し,同じウィンドウで別のクラスを作成します。 クラスの作成を途中でやめたい場合は,[取消] を選択してください。
作成したクラスは,「有効なスケジューリング・クラス」のオプション・リストに表示されます。 クラス名の他に,CPU 時間の割り当てパーセントとメンバのタイプも表示されます。 ここまでくると,次のようにして,データベースに追加するクラスを選択することができます。
クラスを選択し,ハイライトさせます。
[選択] ボタンを押し,そのクラスをデータベースに追加します。
必要なクラスをすべて選択したら,[了解] ボタンを押して新しいデータベースを作成します。 新しいデータベースは,「有効なスケジューリング・データベース」のリストに追加されます。
また,「クラス・スケジューラの設定: スケジューリング・データベースの作成/修正」ウィンドウを使って,次のようにクラスの保守と管理を行うことができます。
[コピー...] オプションを使ってクラスをコピーし,新しいクラスのベースとして使用する。
[修正...] オプションを使って,クラスの特性を変更する。
[削除...] オプションを使って,クラスを破壊し,「有効なスケジューリング・クラス」から永久に削除する。
新しく作成したデータベースを使用し始めるには,次の手順を実行します。
「クラス・スケジューラの設定 hostname」というタイトルのウィンドウが表示されていない場合は,SysMan Menu を開始し,[クラス・スケジューラの設定] オプションを選択します。
必要なデータベースをクリックしてハイライトさせます。 次に,[カレントにする...] ボタンを選択します。 選択を確認するか取り消すかをたずねてきます。
[了解] ボタンを押して SysMan Menu の [クラス・スケジューリング] オプションに戻ります。 [クラス・スケジューラの起動/再起動] というタイトルのオプションを選択します。 選択を確認するかどうかをたずねてきます。
これらの手順を終了すると,クラス・スケジューリング・デーモンが開始され,指定したスケジューリング・データベースが使われます。
データベースが予想どおりに動作するかどうかを検証し監視するには,端末のコマンド行で
show
コマンドを実行します。
たとえば,スケジューリングの統計を表示するには,次のコマンドを入力します。
# class_admin stats Class scheduler status: enabled \ current database: /etc/.cl_lab1 class name target percentage actual percentage prio-tasks-lab 10 10
タスクとシステム性能をモニタするためには,ある程度の時間が必要ですし,各クラスを調整し,望む結果が得られるようにする必要もあるでしょう。
13.2.3 ジョブの優先順位を設定する
ジョブに優先順位を設定して,重要なアプリケーションが先に実行されるようにすることができます。
nice
コマンドを使用すると,コマンドに優先順位を指定できます。
renice
コマンドを使用すると,実行中のプロセスの優先順位を変更できます。
詳細は,
nice
(1)renice
(8)13.2.4 ジョブをオフピークの時間帯にスケジューリングする
ジョブをスケジュールして,オフピークの時間帯に実行されるようにしたり (at
および
cron
コマンドを使用),負荷レベルが低下した時点で実行されるようにする (batch
コマンドを使用) ことができます。
これにより,CPU とメモリおよびディスク入出力サブシステムの負荷を軽減できます。
詳細は,
at
(1)cron
(8)13.2.5 advfsd デーモンを停止する
advfsd
デーモンを使用すると,SNMP (Simple Network Management Protocol) のクライアント (Netview など) が AdvFS ファイル・システム情報を要求できます。
AdvFS のグラフィカル・ユーザ・インタフェース (GUI) を使用していない場合は,advfsd
デーモンを停止することで,CPU リソースを解放し,advfsd
デーモンが定期的にディスクをスキャンしないようにすることができます。
advfsd
デーモンがブート時に起動されないようにするには,/sbin/rc3.d/S53advfsd
の名前を
/sbin/rc3.d/T53advfsd
に変更します。
デーモンを直ちに停止するには,次のコマンドを実行します。
# /sbin/init.d/advfsd stop
13.2.6 ハードウェア RAID を使って CPU の入出力オーバヘッドを軽減する
RAID コントローラを使用すると,ディスク入出力の性能を改善する多くの機能を利用できるだけでなく,CPU のディスク入出力オーバヘッドも軽減できます。 ハードウェア RAID についての詳細は,9.4 節 を参照してください。