タイトルおよびコピーライト情報
 
まえがき
本書の対象読者
新しい機能および変更された機能
本書の構成
関連資料
本書の表記法
 
Part 1 -- システム・チューニングの概要
 
1    システム・チューニングの概要
1.1    ハードウェア構成
1.1.1    ハードウェア構成の概要
1.2    性能に関する用語と概念
1.3    ディスク・ストレージ・リソース
1.3.1    RAID 技術
1.3.2    SCSI の概念
1.3.2.1    データ・パス
1.3.2.2    SCSI バス速度
1.3.2.3    転送方式
1.3.2.4    UltraSCSI バス・セグメントの拡張
1.3.2.5    SCSI バスの長さとターミネーション
1.3.3    ファイバ・チャネル
1.3.3.1    ファイバ・チャネル・トポロジ
1.3.3.1.1    ポイント・ツー・ポイント・トポロジ
1.3.3.1.2    ファブリック・トポロジ
1.3.3.1.3    調停ループ・トポロジ
1.3.3.2    ファイバ・チャネル・トポロジの比較
1.3.3.3    ゾーニング
1.3.3.3.1    スイッチ・ゾーニングとセレクティブ・ストレージ・プレゼンテーション
1.3.3.3.2    ゾーニングの種類
1.3.3.3.3    ゾーニングの例
1.3.3.4    スイッチのカスケード接続
1.4    ネットワーク・リソース
1.4.1    ネットワーク・サブシステム
1.4.2    冗長ネットワークの使用
1.4.3    NetRAIN
1.4.4    ルーティング
1.4.5    LAG インタフェース
1.5    ファイル・システム・リソース
1.5.1    AdvFS の使用
1.5.1.1    UBC の使用
1.5.2    NFS の使用
1.6    メモリ・リソース
1.6.1    ページングとスワッピング
1.6.2    データのキャッシング
1.7    CPU リソース
1.8    作業負荷に適したリソース・モデルの明確化
1.9    一般的なチューニング対象サブシステム
 
2    システム情報と性能情報の取得
2.1    性能問題の解決のための方法論的アプローチ
2.2    システム・イベントについての情報の取得
2.2.1    イベント・マネージャの使用
2.2.2    DECevent の使用
2.2.3    Compaq Analyze の使用
2.2.4    システム課金とディスク・クォータの使用
2.3    情報収集用の基本的なツール
2.3.1    hwmgr ユーティリティを使用したハードウェア情報の収集
2.3.2    collect ユーティリティを使用したシステム情報の収集
2.3.2.1    collect をシステム・リブート時に自動的に起動するための構成
2.3.2.2    collect データ・ファイルのプロット
2.3.3    sys_check ユーティリティを使用した構成のチェック
2.4    情報収集用の補助的なツール
2.4.1    lockinfo ユーティリティを使用したロック統計情報の収集
2.4.2    sched_stat ユーティリティを使用した CPU 利用率とプロセス統計情報の収集
2.4.3    nfsstat ユーティリティを使用したネットワークと NFS 統計情報の収集
2.4.4    tcpdump ユーティリティを使用した情報の収集
2.4.5    netstat コマンドを使用したネットワーク統計情報のモニタリング
2.4.5.1    入出力エラーと衝突
2.4.5.2    デバイス・ドライバのエラー
2.4.5.3    メモリの利用率
2.4.5.4    ソケット接続
2.4.5.5    廃棄されたパケットまたは紛失したパケット
2.4.5.6    再送,順序の不正なパケット,および不正チェックサム
2.4.5.7    ルーティングの統計情報
2.4.5.8    プロトコルの統計情報
2.4.6    ps axlmp を使用した NFS サーバ側の情報収集
2.4.7    nfsiod を使用した NFS クライアント側の情報収集
2.4.8    nfswatch コマンドを使用した NFS サーバの受信ネットワーク・トラフィックのモニタリング
2.5    その他の性能モニタリング・ツール
2.6    プロファイリング情報とデバッグ情報の収集
 
3    カーネル・サブシステム属性の表示と変更
3.1    オペレーティング・システムでサポートする属性
3.2    属性値の表示
3.3    属性値の変更
3.3.1    現在値
3.3.2    永久値
 
Part 2 -- アプリケーション・タイプ別のチューニング
 
4    Oracle のチューニング
4.1    Oracle 統計情報のモニタリング
4.2    gettimeofday() 関数の性能改善
4.3    IPC 通信プロトコルの選択と有効化
4.4    推奨するチューニング方法
4.4.1    仮想メモリ属性の変更
4.4.1.1    共用メモリを無効にする
4.4.1.2    共用メモリの割り当て
4.4.1.2.1    rad_gh_regions 属性を変更する
4.4.1.2.2    gh_chuncks 属性を変更する
4.4.1.3    UBC で使用する物理メモリの割合を変更する
4.4.1.4    UBC が借りるメモリの割合を変更する
4.4.1.5    UBC が 1 つのファイルに対して使用できるメモリの割合を変更する
4.4.1.6    UBC しきい値を変更する
4.4.1.7    ダーティ・ページの割合を変更する
4.4.1.8    スワップ割り当てモードを変更する
4.4.2    Advanced File System 属性の変更
4.4.3    仮想ファイル・システムの属性の変更
4.4.4    プロセス間通信属性の変更
4.4.4.1    System V の共用領域を変更する
4.4.4.2    System V 共用メモリ領域の最大サイズを変更する
4.4.4.3    System V 共用メモリ領域の最小サイズを変更する
4.4.4.4    一時期に使用できる共用メモリ領域の数を変更する
4.4.4.5    一時期に接続できる共用メモリ領域の数を変更する
4.4.5    インターネット属性の変更
4.4.5.1    UDP ソケット用送信バッファ・サイズを変更する
4.4.5.2    UDP ソケット用受信バッファ・サイズを変更する
4.4.5.3    システムが同時に送信接続を確立できる回数を変更する
4.4.6    プロセス属性の変更
4.4.6.1    プロセスごとのスタック・サイズを変更する
4.4.6.2    ユーザ・プロセスのスタック・サイズの最大サイズを変更する
4.4.6.3    プロセスごとのデータ・サイズを変更する
4.4.6.4    プロセスごとのデータ・サイズの最大サイズを変更する
4.4.6.5    プロセスごとのアドレス・サイズを変更する
4.4.6.6    プロセスごとのアドレス・サイズの最大サイズを変更する
4.4.6.7    プロセスの最大数を変更する
4.4.6.8    スレッドの最大数を変更する
4.4.6.9    システム・テーブルに割り当てる領域を変更する
4.4.7    リアルタイム属性の変更
4.4.8    Reliable Datagram 属性の変更
4.4.8.1    RDG 内のオブジェクトの最大数を変更する
4.4.8.2    RDG メッセージの最大サイズを変更する
4.4.8.3    RDG 内のメッセージの最大数を変更する
4.4.8.4    RDG テーブル内のセッションの最大数を変更する
4.4.8.5    メッセージ・パケット用に固定されるページの最大数を変更する
4.4.9    メモリ・チャネル属性の変更
 
5    ネットワーク・ファイル・システムのチューニング
5.1    NFS 統計情報のモニタリング
5.2    NFS 性能低下の検出
5.3    性能上の利点と欠点
5.4    NFS の構成
5.4.1    サーバ・スレッドの構成
5.4.2    クライアント・スレッドの構成
5.4.3    キャッシュ・タイムアウトの限界値の変更
5.5    NFS の再送
5.5.1    ネットワークのタイムアウトを減らす
5.6    NFS サーバのチューニング
5.6.1    NFS サーバ側の属性の変更
5.6.1.1    書き込みの集積
5.6.1.1.1    クライアントの書き込み要求に対する NFS サーバの応答速度を改善する
5.6.1.2    サーバが書き込みを遅らせる時間を秒単位で指定する
5.6.1.3    NFS 送受信バッファのサイズを大きくする
5.7    NFS クライアントのチューニング
5.7.1    NFS クライアント側の属性の変更
5.7.1.1    読み取り性能を改善する
5.7.1.2    クライアントが再送を開始するまでの時間を制御する
5.7.1.3    ディレクトリ名の検索用キャッシュ (DNLC)
5.7.1.4    ネガティブ名キャッシュの検索 (NNC)
5.7.1.5    NFS クライアント間でのファイルの一貫性を指定する
5.7.1.6    NFS クライアントがファイル属性をフェッチする際の動きを変える
 
6    インターネット・サーバのチューニング
6.1    インターネット・サーバの性能改善
6.1.1    ハードウェアの構成
6.1.2    メモリとスワップ領域の構成
6.1.3    IP アドレスのロギング
6.1.4    ネットワーク統計情報のモニタリング
6.1.5    ソケット統計情報のモニタリング
6.1.6    仮想メモリ統計情報のモニタリング
6.1.7    構成情報の収集
6.2    基本的な推奨チューニング
6.2.1    インターネット属性の変更
6.2.1.1    TCP ハッシュ・テーブルのサイズを大きくする
6.2.1.2    PMTU 検出を無効にする
6.2.1.3    送信接続ポート数を増やす
6.2.2    プロセス属性の変更
6.2.2.1    システム・テーブルとデータ構造体のサイズを大きくする
6.2.2.2    ユーザごとのプロセス数を増やす
6.2.2.3    ユーザごとのスレッド数を増やす
6.2.2.4    ユーザ・プロセスのデータ・セグメント・サイズの限界値を大きくする
6.2.2.5    ユーザ・プロセスのアドレス空間の限界値を大きくする
6.2.3    ソケット属性の変更
6.2.3.1    保留中 TCP 接続の最大数を増やす
6.2.3.2    保留中 TCP 接続の最小数を増やす
6.2.3.3    mbuf クラスタの圧縮を有効にする
6.3    高度な推奨チューニング
6.3.1    汎用属性の変更
6.3.2    インターネット属性の変更
6.3.2.1    TCP ハッシュ・テーブルの数を増やす
6.3.2.2    ハッシュ・バケットの数を増やす
6.3.2.3    TCP パーシャル接続タイムアウト限界値を変更する
6.3.2.4    TCP 再送の速度を遅くする
6.3.2.5    TCP 持続機能を有効にする
6.3.2.6    TCP 接続コンテキスト・タイムアウトの頻度を高くする
6.3.2.7    送信接続ポートの範囲を変更する
6.3.2.8    IP 受信キューの数を増やす
6.3.2.9    IP 受信キューの最大長を大きくする
6.3.3    ネットワーク属性の変更
6.3.3.1    送信キューの最大長を大きくする
6.3.3.2    スクリーニング・キャッシュのミスを減らす
6.3.3.3    スクリーニング・バッファのドロップを減らす
6.3.4    ソケット属性の変更
6.3.5    仮想メモリ属性の変更
 
7    アプリケーション性能の管理
7.1    アプリケーションの性能改善
7.1.1    オペレーティング・システムの最新のパッチをインストールする
7.1.2    最新バージョンのコンパイラを使用する
7.1.3    並列処理を使用する
7.1.4    アプリケーションを最適化する
7.1.5    シェアード・ライブラリを使用する
7.1.6    アプリケーションが必要とするメモリ量を減らす
7.1.7    メモリ・ロックを制御する
 
Part 3 -- コンポーネント別のチューニング
 
8    システム・リソース割り当ての管理
8.1    プロセスの限界値のチューニング
8.1.1    システム・テーブルとデータ構造体を大きくする
8.1.2    プロセスの最大数を増やす
8.1.3    スレッドの最大数を増やす
8.2    プログラム・サイズの限界値のチューニング
8.2.1    ユーザ・プロセス・スタックのサイズを大きくする
8.2.2    ユーザ・プロセスのデータ・セグメント・サイズを大きくする
8.3    アドレス空間の限界値のチューニング
8.4    プロセス間通信の限界値のチューニング
8.4.1    System V メッセージの最大サイズを大きくする
8.4.2    System V のメッセージ・キューの最大サイズを大きくする
8.4.3    System V のキュー上のメッセージ最大数を増やす
8.4.4    System V の共用メモリ領域の最大サイズを大きくする
8.4.5    1 つのプロセスにアタッチできる共用メモリ領域の最大数を増やす
8.4.6    共用ページ・テーブルの共用を変更する
8.5    オープン・ファイルの限界値のチューニング
8.5.1    オープン・ファイルの最大数を増やす
8.5.2    オープン・ファイル記述子の最大数を増やす
8.6    Aurema ARMTech Suite
 
9    ディスク・ストレージ性能の管理
9.1    ディスク入出力負荷の分散に関するガイドライン
9.2    ディスク入出力の分散状況のモニタリング
9.2.1    iostat コマンドによるディスク使用状況の表示
9.3    LSM を使用したストレージの管理
9.3.1    LSM の機能
9.4    ハードウェア RAID サブシステムの性能の管理
9.4.1    ハードウェア RAID 機能
9.4.2    ハードウェア RAID 製品
9.4.3    ハードウェア RAID 構成のガイドライン
9.4.3.1    ストレージ・セットのディスクをバス間に分散させる
9.4.3.2    同じデータ容量のディスクを使用する
9.4.3.3    正しいハードウェア RAID ストライプ・サイズを選択する
9.4.3.4    ストライプ・セットをミラーリングする
9.4.3.5    ライトバック・キャッシュを使用する
9.4.3.6    デュアル冗長コントローラを使用する
9.4.3.7    破損したディスクをスペア・ディスクと交換する
9.5    CAM 性能の管理
 
10    ネットワーク性能の管理
10.1    ネットワーク情報の収集
10.1.1    sysconfig コマンドを用いてソケット・リッスン・キューの統計情報をチェックする
10.2    ネットワーク・サブシステムのチューニング
10.2.1    TCP 制御ブロックの検索速度を速くする
10.2.2    TCP ハッシュ・テーブルの数を増やす
10.2.3    TCP ソケット・リッスン・キューの限界値をチューニングする
10.2.4    送信接続ポート数を増やす
10.2.5    送信接続ポートの範囲を変更する
10.2.6    PMTU の検出を無効にする
10.2.7    IP 入力キューの数を増やす
10.2.8    mbuf クラスタの圧縮を有効にする
10.2.9    TCP の keepalive 機能を有効にする
10.2.10    IP アドレスの検索速度を速くする
10.2.11    TCP のパーシャル接続タイムアウトの限界値を小さくする
10.2.12    TCP 接続コンテキストのタイムアウト限界値を小さくする
10.2.13    TCP 再送レートを下げる
10.2.14    TCP データの肯定応答の遅延を無効にする
10.2.15    TCP セグメントの最大サイズを大きくする
10.2.16    UDP ソケットの送受信バッファを大きくする
10.2.17    ソケット・バッファの最大サイズを大きくする
10.2.18    入力パケットのドロップを防止する
 
11    ファイル・システム性能の管理
11.1    キャッシュのチューニング
11.1.1    キャッシュ統計情報のモニタリング
11.1.2    namei キャッシュのチューニング
11.1.3    UBC のチューニング
11.1.4    メタデータ・バッファ・キャッシュのチューニング
11.1.5    AdvFS アクセス構造体のチューニング
11.2    AdvFS のチューニング
11.2.1    AdvFS の構成のガイドライン
11.2.1.1    RAID1 または RAID5 を用いてデータを格納する
11.2.1.2    同期書き込み要求を強制するか,永続的なアトミック書き込みデータ・ロギングを有効にする
11.2.1.3    直接入出力を有効にする
11.2.1.4    AdvFS を使用してファイルを分散させる
11.2.1.5    データをストライピングする
11.2.1.6    ファイル・ドメインの断片化を解消する
11.2.1.7    入出力転送サイズを小さくする
11.2.1.8    トランザクション・ログを移動する
11.2.2    AdvFS 統計情報のモニタリング
11.2.2.1    AdvFS の性能の統計情報を表示する
11.2.2.2    AdvFS ファイル・ドメイン内のディスクを表示する
11.2.2.3    AdvFS ファイル・ドメインを表示する
11.2.2.4    AdvFS ファイル情報を表示する
11.2.2.5    ファイル・ドメイン内の AdvFS ファイルセットを表示する
11.2.3    AdvFS キューのチューニング
11.3    UFS のチューニング
11.3.1    UFS の構成のガイドライン
11.3.1.1    ファイル・システムのフラグメント・サイズとブロック・サイズを変更する
11.3.1.2    i ノードの密度を低くする
11.3.1.3    回転遅延時間を設定する
11.3.1.4    クラスタとして結合するブロックの数を増やす
11.3.1.5    MFS を使用する
11.3.1.6    UFS のディスク・クォータを使用する
11.3.1.7    UFS および MFS のマウントの数を増やす
11.3.2    UFS 統計情報のモニタリング
11.3.2.1    UFS 情報を表示する
11.3.2.2    UFS クラスタをモニタリングする
11.3.2.3    メタデータ・バッファ・キャッシュを表示する
11.3.3    UFS の性能のチューニング
11.3.3.1    UFS Smooth Sync と入出力スロットリングを調整する
11.3.3.2    UFS クラスタの書き込みを遅らせる
11.3.3.3    クラスタ内のブロックの数を増やす
11.3.3.4    ファイル・システムの断片化を解消する
11.4    NFS のチューニング
 
12    メモリ性能の管理
12.1    仮想メモリの動作
12.1.1    物理ページの維持管理
12.1.2    ファイル・システム・バッファ・キャッシュのメモリ割り当て
12.1.2.1    メタデータ・バッファ・キャッシュのメモリ割り当て
12.1.2.2    ユニファイド・バッファ・キャッシュのメモリ割り当て
12.1.3    プロセスのメモリ割り当て
12.1.3.1    プロセスの仮想アドレス空間の割り当て
12.1.3.2    仮想アドレスから物理アドレスへの変換
12.1.3.3    ページ・フォールト
12.1.4    ページの再生
12.1.4.1    変更ページの事前書き出し
12.1.4.2    ページングによるメモリの再生
12.1.4.3    スワッピングによるメモリの再生
12.2    性能の高いスワップ領域の構成
12.3    メモリ統計情報のモニタリング
12.3.1    vmstat コマンドを使ってメモリを表示する
12.3.2    ps コマンドを使ってメモリを表示する
12.3.3    swapon コマンドを使ってスワップ領域の使用状況を表示する
12.3.4    dbx デバッガを使って UBC を表示する
12.4    プロセス用のメモリを増やすためのチューニング
12.4.1    同時に実行するプロセスの数を少なくする
12.4.2    カーネルの静的サイズを小さくする
12.4.3    カーネルの malloc 割り当て用に予約するメモリを増やす
12.5    ページング動作およびスワッピング動作の変更
12.5.1    ページングしきい値を大きくする
12.5.2    スワッピング・レートを管理する
12.5.3    タスク・スワッピングを積極的に行うようにする
12.5.4    スワッピングを避けるために常駐セットのサイズを制限する
12.5.5    変更ページの事前書き出しを管理する
12.5.6    ページ・イン・クラスタおよびページ・アウト・クラスタのサイズを管理する
12.5.7    スワップ・パーティションでの入出力要求を管理する
12.6    共用メモリ用の物理メモリの予約
12.6.1    粒度ヒントを使用するようにカーネルをチューニングする
12.6.2    粒度ヒントを使用するようにアプリケーションを変更する
12.7    ビッグ・ページによる性能改善
12.7.1    ビッグ・ページを使用する
12.7.2    メモリ・オブジェクトにビッグ・ページを使用するための条件を指定する
 
13    CPU 性能の管理
13.1    CPU 性能に関する情報のモニタリング
13.1.1    uptime コマンドを使って平均負荷をモニタリングする
13.1.2    kdbx デバッガ lockstat 拡張を使って CPU 使用状況をチェックする
13.1.3    kdbx デバッガ lockstat 拡張を使ってロックの使用状況をチェックする
13.2    CPU 性能の改善
13.2.1    プロセッサを追加する
13.2.2    クラス・スケジューラを使用する
13.2.2.1    クラス・スケジューラの概要
13.2.2.1.1    関連ユーティリティ
13.2.2.1.2    クラス・スケジューラの起動
13.2.2.2    クラス・スケジューリングのプランニング
13.2.2.3    クラス・スケジューラの構成
13.2.2.4    クラスの作成と管理
13.2.2.4.1    クラスを作成する
13.2.2.4.2    クラス内での識別子タイプを管理する
13.2.2.4.3    クラス・スケジューラを有効にする
13.2.2.4.4    クラスへメンバを追加する
13.2.2.4.5    クラスからメンバを削除する
13.2.2.4.6    その他のクラス管理オプション
13.2.2.5    runclass コマンドの使用
13.2.2.6    クラス・スケジューリング・グラフィカル・インタフェースの使用
13.2.2.7    データベースの作成と変更
13.2.3    ジョブの優先順位を設定する
13.2.4    ジョブをオフピークの時間帯にスケジューリングする
13.2.5    advfsd デーモンを停止する
13.2.6    ハードウェア RAID を使って CPU の入出力オーバヘッドを軽減する
 
用語集
 
1-1    ハードウェア構成図の作成
1-2    ポイント・ツー・ポイント・トポロジ
1-3    ファブリック・トポロジ
1-4    調停ループ・トポロジ
1-5    単純なゾーン構成
1-6    回復力のあるメッシュ・ファブリック (カスケード接続されたスイッチを 4 台使用)
1-7    単一インタフェースの構成
1-8    複数のインタフェース
1-9    物理メモリの用途
1-10    メモリ・ハードウェア間での命令とデータの移動
11-1    データのストライピング
11-2    AdvFS の入出力キュー
12-1    UBC のメモリ割り当て
12-2    ファイル・システム動作の負荷が高く,ページング動作がない場合のメモリ割り当て
12-3    ファイル・システム動作の負荷が低く,ページング動作の負荷が高い場合のメモリ割り当て
12-4    プロセス仮想アドレス空間の用途
12-5    仮想アドレスから物理アドレスへの変換
12-6    ページングおよびスワッピングの属性
12-7    ページング動作
 
1-1    RAID レベルごとの性能と可用性の比較
1-2    SCSI バス速度
1-3    SCSI バスおよびセグメントの長さ
1-4    ファイバ・チャネル・ファブリックとファイバ・チャネル調停ループの比較
1-5    スイッチがサポートしているゾーニングの種類
1-6    メモリ管理ハードウェア・リソース
1-7    リソース・モデルと,それに対する構成ソリューション
2-1    継続的な性能モニタリングのツール
2-2    アプリケーションのプロファイリング・ツールとデバッグ・ツール
4-1    性能の低い Oracle アプリケーションを検出するツール
5-1    NFS の性能低下を検出するツール
5-2    発生しうる NFS の問題と解決策
5-3    NFS のチューニング・ガイドライン
5-4    NFS サーバのチューニング・ガイドライン
5-5    ネットワーク・カードのタイプの確認
6-1    ネットワーク統計情報モニタリング・ツール
7-1    アプリケーションの性能改善のガイドライン
8-1    maxusers 属性の省略時の値
8-2    IPC の限界値のチューニング・ガイドライン
9-1    ディスク入出力の分散状況のモニタリング・ツール
9-2    ハードウェア RAID サブシステムの構成のガイドライン
10-1    ネットワークのモニタリング・ツール
10-2    ネットワークのチューニング・ガイドライン
11-1    キャッシュ情報を表示するツール
11-2    namei キャッシュ関係の属性の値を変更する時期
11-3    UBC 関連の属性の値を変更する時期
11-4    AdvFS の構成のガイドライン
11-5    AdvFS 情報を表示するツール
11-6    UFS の構成のガイドライン
11-7    UFS 情報を表示するツール
11-8    UFS のチューニング・ガイドライン
12-1    vm_page_free_target 属性の省略時の値
12-2    仮想メモリおよび UBC を表示するためのツール
12-3    メモリ・リソースのチューニング・ガイドライン
13-1    CPU のモニタリング・ツール
13-2    主な CPU 性能改善のガイドライン
 
索引