Home
 

Home > コンピュータ・一般書 > UNIX > Linux > 詳解 システム・パフォーマンス

詳解 システム・パフォーマンス

・著者:Brendan Gregg/西脇 靖紘/長尾 高弘978-4-87311-790-4
・定価:5,832 円(本体5,400 円+税)
・B5変 772頁

・ISBN

・発売日


かごに入れる

※本体価格は変更される場合があります。
※通常2〜3日以内で発送いたします。

合計5000円(税別)以上のご注文の場合、配送料は無料となります。

システムパフォーマンス分析の基礎知識や方法論を学ぶ!

 

本書はLinuxとSolarisベースのOSに含まれるツール、サンプル、チューニング可能なパラメータを使い、システムパフォーマンスについて学ぶ書籍です。パフォーマンス分析の基礎知識と方法論に重点をおいて解説し、CPU、メモリ、ディスク、ネットワーク、クラウドコンピューティングの仕組みからシステム、キャパシティプランニング、ボトルネックの除去やスケーラビリティ分析の評価のためのベンチマークまで、網羅的に取り扱う教科書的な一冊です。

2017/02
★このような方におすすめ
学生、パフォーマンスエンジニア、データベース管理者、Webサーバ管理者
主要目次

ページトップへ戻る
詳細目次
目次
まえがき

1章 イントロダクション
    1.1 システムパフォーマンス
    1.2 職種
    1.3 作業
    1.4 視点
    1.5 パフォーマンスエンジニアリングの難しさと面白さ
        1.5.1 パフォーマンスは主観的な判断である
        1.5.2 システムは複雑である
        1.5.3 複数のパフォーマンス問題が同時に起きる場合がある
    1.6 レイテンシ
    1.7 動的トレーシング
    1.8 クラウドコンピューティング
    1.9 ケーススタディ
        1.9.1 ディスクの速度低下
        1.9.2 ソフトウェア変更
        1.9.3 より深く学ぶために

2章 メソドロジ
    2.1 用語
    2.2 モデル
        2.2.1 テスト対象システム(SUT)
        2.2.2 キューイングシステム
    2.3 コンセプト
        2.3.1 レイテンシ
        2.3.2 タイムスケール
        2.3.3 トレードオフ
        2.3.4 チューニング
        2.3.5 適切性の水準
        2.3.6 基準時の推奨値
        2.3.7 負荷かアーキテクチャか
        2.3.8 スケーラビリティ
        2.3.9 Known-Unknowns
        2.3.10 パフォーマンス指標
        2.3.11 使用率
        2.3.12 飽和
        2.3.13 プロファイリング
        2.3.14 キャッシング
    2.4 視点
        2.4.1 リソース分析
        2.4.2 ワークロード分析
    2.5 メソドロジ
        2.5.1 街灯のアンチメソッド
        2.5.2 ランダム変更アンチメソッド
        2.5.3 誰か他人のせいにするアンチメソッド
        2.5.4 アドホックチェックリストメソッド
        2.5.5 問題の記述
        2.5.6 科学的メソッド
        2.5.7 診断サイクル
        2.5.8 ツールメソッド
        2.5.9 USEメソッド
        2.5.10 ワークロードの特性の把握
        2.5.11 ドリルダウン分析
        2.5.12 レイテンシ分析
        2.5.13 メソッドR
        2.5.14 イベントトレーシング
        2.5.15 ベースライン統計
        2.5.16 静的パフォーマンスチューニング
        2.5.17 キャッシュチューニング
        2.5.18 マイクロベンチマーキング
    2.6 モデリング
        2.6.1 エンタープライズシステム対クラウドシステム
        2.6.2 視覚的な究明
        2.6.3 Amdahlのスケーラビリティ法則
        2.6.4 スケーラビリティの普遍法則
        2.6.5 待ち行列理論
    2.7 キャパシティプランニング
        2.7.1 リソースの限界
        2.7.2 要素分析
        2.7.3 スケーラビリティを向上させる方法
    2.8 統計
        2.8.1 パフォーマンスの定量化
        2.8.2 平均
        2.8.3 標準偏差、パーセンタイル、中央値
        2.8.4 変動係数
        2.8.5 多峰分布
        2.8.6 外れ値
    2.9 モニタリング
        2.9.1 時系列的なパターン
        2.9.2 モニタリング製品
        2.9.3 ブート以降の集計
    2.10 ビジュアライゼーション
        2.10.1 折れ線グラフ
        2.10.2 散布図
        2.10.3 ヒートマップ
        2.10.4 表面プロット
        2.10.5 ビジュアライゼーションツール
    2.11 練習問題
    2.12 参考文献

3章 オペレーティングシステム
    3.1 用語
    3.2 基礎知識
        3.2.1 カーネル
        3.2.2 スタック
        3.2.3 割り込みと割り込みスレッド
        3.2.4 割り込み優先レベル
        3.2.5 プロセス
        3.2.6 システムコール
        3.2.7 仮想メモリ
        3.2.8 メモリ管理
        3.2.9 スケジューラ
        3.2.10 ファイルシステム
        3.2.11 キャッシング
        3.2.12 ネットワーク
        3.2.13 デバイスドライバ
        3.2.14 マルチプロセッサ
        3.2.15 プリエンプション
        3.2.16 リソース管理
        3.2.17 可観測性
    3.3 カーネル
        3.3.1 Unix
        3.3.2 Solarisベースシステム
        3.3.3 Linuxベースシステム
        3.3.4 違い
    3.4 練習問題
    3.5 参考文献

4章 可観測性ツール
    4.1 ツールのタイプ
        4.1.1 カウンタ
        4.1.2 トレーシング
        4.1.3 プロファイリング
        4.1.4 モニタリング(sar)
    4.2 可観測性ツールの情報ソース
        4.2.1 /proc
        4.2.2 /sys
        4.2.3 kstat
        4.2.4 遅延アカウンティング
        4.2.5 マイクロステートアカウンティング
        4.2.6 その他の可観測性ツールの情報ソース
    4.3 DTrace
        4.3.1 静的トレーシングと動的トレーシング
        4.3.2 プローブ
        4.3.3 プロバイダ
        4.3.4 引数
        4.3.5 D言語
        4.3.6 組み込み変数
        4.3.7 アクション
        4.3.8 変数の型
        4.3.9 1行プログラム
        4.3.10 スクリプティング
        4.3.11 オーバーヘッド
        4.3.12 ドキュメントと参考資料
    4.4 SystemTap
        4.4.1 プローブ
        4.4.2 タップセット
        4.4.3 アクションと組み込み変数
        4.4.4 サンプル
        4.4.5 オーバーヘッド
        4.4.6 ドキュメントと参考資料
    4.5 perf
    4.6 可観測性の観測
    4.7 練習問題
    4.8 参考文献

5章 アプリケーション
    5.1 アプリケーションの基礎
        5.1.1 パフォーマンスの目標
        5.1.2 よく実行されるコードの最適化
        5.1.3 可観測性
        5.1.4 ビッグオー記法
    5.2 アプリケーションのパフォーマンス向上のためのテクニック
        5.2.1 I/Oサイズの選択
        5.2.2 キャッシング
        5.2.3 バッファリング
        5.2.4 ポーリング
        5.2.5 並行/並列処理
        5.2.6 ノンブロッキングI/O
        5.2.7 プロセッサのバインド
    5.3 プログラミング言語
        5.3.1 コンパイル言語
        5.3.2 インタープリタ言語
        5.3.3 仮想マシン
        5.3.4 ガベージコレクション
    5.4 メソドロジと分析
        5.4.1 スレッドの状態の分析
        5.4.2 CPUのプロファイリング
        5.4.3 システムコールの分析
        5.4.4 I/Oのプロファイリング
        5.4.5 ワークロードの特性の把握
        5.4.6 USEメソッド
        5.4.7 ドリルダウン分析
        5.4.8 ロック分析
        5.4.9 静的パフォーマンスチューニング
    5.5 練習問題
    5.6 参考文献

6章 CPU
    6.1 用語
    6.2 モデル
        6.2.1 CPUアーキテクチャ
        6.2.2 CPUのメモリキャッシュ
        6.2.3 CPUのランキュー
    6.3 コンセプト
        6.3.1 クロックスピード
        6.3.2 命令
        6.3.3 命令パイプライン
        6.3.4 命令幅
        6.3.5 CPI、IPC
        6.3.6 使用率
        6.3.7 ユーザー時間/カーネル時間
        6.3.8 飽和
        6.3.9 プリエンプション
        6.3.10 優先度の逆転
        6.3.11 マルチプロセスとマルチスレッディング
        6.3.12 ワードサイズ
        6.3.13 コンパイラの最適化
    6.4 アーキテクチャ
        6.4.1 ハードウェア
        6.4.2 ソフトウェア
    6.5 メソドロジ
        6.5.1 ツールメソッド
        6.5.2 USEメソッド
        6.5.3 ワークロードの特性の把握
        6.5.4 プロファイリング
        6.5.5 サイクル分析
        6.5.6 パフォーマンスモニタリング
        6.5.7 静的パフォーマンスチューニング
        6.5.8 優先度のチューニング
        6.5.9 リソースコントロール
        6.5.10 CPUのバインド
        6.5.11 マイクロベンチマーキング
        6.5.12 スケーリング
    6.6 分析
        6.6.1 uptime
        6.6.2 vmstat
        6.6.3 mpstat
        6.6.4 sar
        6.6.5 ps
        6.6.6 top
        6.6.7 prstat
        6.6.8 pidstat
        6.6.9 time、ptime
        6.6.10 DTrace
        6.6.11 SystemTap
        6.6.12 perf
        6.6.13 cpustat
        6.6.14 その他のツール
        6.6.15 ビジュアライゼーション
    6.7 実験
        6.7.1 アドホックテスト
        6.7.2 SysBench
    6.8 チューニング
        6.8.1 コンパイラオプション
        6.8.2 優先度とクラスの操作
        6.8.3 スケジューラオプション
        6.8.4 プロセスのバインド
        6.8.5 排他的CPUセット
        6.8.6 リソースコントロール
        6.8.7 プロセッサオプション(BIOSチューニング)
    6.9 練習問題
    6.10 参考文献

7章 メモリ
    7.1 用語
    7.2 コンセプト
        7.2.1 仮想メモリ
        7.2.2 ページング
        7.2.3 デマンドページング
        7.2.4 オーバーコミット
        7.2.5 スワッピング
        7.2.6 ファイルシステムキャッシュ
        7.2.7 使用率と飽和
        7.2.8 アロケータ
        7.2.9 ワードサイズ
    7.3 アーキテクチャ
        7.3.1 ハードウェア
        7.3.2 ソフトウェア
        7.3.3 プロセスのアドレス空間
    7.4 メソドロジ
        7.4.1 ツールメソッド
        7.4.2 USEメソッド
        7.4.3 使用形態の特性の把握
        7.4.4 サイクル分析
        7.4.5 パフォーマンスモニタリング
        7.4.6 リーク検出
        7.4.7 静的パフォーマンスチューニング
        7.4.8 リソースコントロール
        7.4.9 マイクロベンチマーキング
    7.5 分析
        7.5.1 vmstat
        7.5.2 sar
        7.5.3 slabtop
        7.5.4 ::kmastat
        7.5.5 ps
        7.5.6 top
        7.5.7 prstat
        7.5.8 pmap
        7.5.9 DTrace
        7.5.10 SystemTap
        7.5.11 その他のツール
    7.6 チューニング
        7.6.1 チューニング可能なパラメータ
        7.6.2 複数のページサイズ
        7.6.3 アロケータ
        7.6.4 リソースコントロール
    7.7 練習問題
    7.8 参考文献

8章 ファイルシステム
    8.1 用語
    8.2 モデル
        8.2.1 ファイルシステムインターフェイス
        8.2.2 ファイルシステムキャッシュ
        8.2.3 2次キャッシュ
    8.3 コンセプト
        8.3.1 ファイルシステムレイテンシ
        8.3.2 キャッシング
        8.3.3 ランダムI/OとシーケンシャルI/O
        8.3.4 プリフェッチ
        8.3.5 先読み
        8.3.6 キャッシュの書き戻し
        8.3.7 同期書き込み
        8.3.8 Raw I/OとDirect I/O
        8.3.9 ノンブロッキングI/O
        8.3.10 メモリマップトファイル
        8.3.11 メタデータ
        8.3.12 論理I/Oと物理I/O
        8.3.13 オペレーションは平等ではない
        8.3.14 特殊なファイルシステム
        8.3.15 アクセスタイムスタンプ
        8.3.16 容量
    8.4 アーキテクチャ
        8.4.1 ファイルシステムI/Oスタック
        8.4.2 VFS
        8.4.3 ファイルシステムキャッシュ
        8.4.4 ファイルシステムの機能
        8.4.5 ファイルシステムのタイプ
        8.4.6 ボリュームとプール
    8.5 メソドロジ
        8.5.1 ディスクの分析
        8.5.2 レイテンシの分析
        8.5.3 ワークロードの特性の把握
        8.5.4 パフォーマンスモニタリング
        8.5.5 イベントトレーシング
        8.5.6 静的パフォーマンスチューニング
        8.5.7 キャッシュチューニング
        8.5.8 ワークロードの分離
        8.5.9 メモリベースのファイルシステム
        8.5.10 マイクロベンチマーキング
    8.6 分析
        8.6.1 vfsstat
        8.6.2 fsstat
        8.6.3 strace、truss
        8.6.4 DTrace
        8.6.5 SystemTap
        8.6.6 LatencyTOP
        8.6.7 free
        8.6.8 top
        8.6.9 vmstat
        8.6.10 sar
        8.6.11 slabtop
        8.6.12 mdb::kmastat
        8.6.13 fcachestat
        8.6.14 /proc/meminfo
        8.6.15 mdb::memstat
        8.6.16 kstat
        8.6.17 その他のツール
        8.6.18 ビジュアライゼーション
    8.7 実験
        8.7.1 アドホックテスト
        8.7.2 マイクロベンチマークツール
        8.7.3 キャッシュのフラッシング
    8.8 チューニング
        8.8.1 アプリケーションレベルの呼び出し
        8.8.2 ext3
        8.8.3 ZFS
    8.9 練習問題
    8.10 参考文献

9章 ディスク
    9.1 用語
    9.2 モデル
        9.2.1 シンプルディスク
        9.2.2 キャッシングディスク
        9.2.3 コントローラ
    9.3 コンセプト
        9.3.1 計測時間
        9.3.2 タイムスケール
        9.3.3 キャッシング
        9.3.4 ランダムI/OとシーケンシャルI/O
        9.3.5 読み書きの割合
        9.3.6 I/Oの規模
        9.3.7 IOPSは等しくない
        9.3.8 データ転送以外のディスクコマンド
        9.3.9 使用率
        9.3.10 飽和
        9.3.11 I/O待ち時間
        9.3.12 同期I/Oと非同期I/O
        9.3.13 ディスクI/OとアプリケーションI/O
    9.4 アーキテクチャ
        9.4.1 ディスクのタイプ
        9.4.2 インターフェイス
        9.4.3 ストレージタイプ
        9.4.4 オペレーティングシステムのディスクI/Oスタック
    9.5 メソドロジ
        9.5.1 ツールメソッド
        9.5.2 USEメソッド
        9.5.3 パフォーマンスモニタリング
        9.5.4 ワークロードの特性の把握
        9.5.5 レイテンシ分析
        9.5.6 イベントトレーシング
        9.5.7 静的パフォーマンスチューニング
        9.5.8 キャッシュチューニング
        9.5.9 リソースコントロール
        9.5.10 マイクロベンチマーキング
        9.5.11 スケーリング
    9.6 分析
        9.6.1 iostat
        9.6.2 sar
        9.6.3 pidstat
        9.6.4 DTrace
        9.6.5 SystemTap
        9.6.6 perf
        9.6.7 iotop
        9.6.8 iosnoop
        9.6.9 blktrace
        9.6.10 MegaCli
        9.6.11 smartctl
        9.6.12 ビジュアライゼーション
    9.7 実験
        9.7.1 アドホックテスト
        9.7.2 カスタムロードジェネレータ
        9.7.3 マイクロベンチマークツール
        9.7.4 ランダム読み出しの例
    9.8 チューニング
        9.8.1 オペレーティングシステムのチューニング可能パラメータ
        9.8.2 ディスクデバイスのチューニング可能パラメータ
        9.8.3 ディスクコントローラのチューニング可能パラメータ
    9.9 練習問題
    9.10 参考文献

10章 ネットワーク
    10.1 用語
    10.2 モデル
        10.2.1 ネットワークインターフェイス
        10.2.2 コントローラ
        10.2.3 プロトコルスタック
    10.3 コンセプト
        10.3.1 ネットワークとルーティング
        10.3.2 プロトコル
        10.3.3 カプセル化
        10.3.4 パケットサイズ
        10.3.5 レイテンシ
        10.3.6 バッファリング
        10.3.7 接続バックログ
        10.3.8 インターフェイスのネゴシエーション
        10.3.9 使用率
        10.3.10 ローカル接続
    10.4 アーキテクチャ
        10.4.1 プロトコル
        10.4.2 ハードウェア
        10.4.3 ソフトウェア
    10.5 メソドロジ
        10.5.1 ツールメソッド
        10.5.2 USEメソッド
        10.5.3 ワークロードの特性の把握
        10.5.4 レイテンシ分析
        10.5.5 パフォーマンスモニタリング
        10.5.6 パケットスニッフィング
        10.5.7 TCP分析
        10.5.8 ドリルダウン分析
        10.5.9 静的パフォーマンスチューニング
        10.5.10 リソースコントロール
        10.5.11 マイクロベンチマーキング
    10.6 分析
        10.6.1 netstat
        10.6.2 sar
        10.6.3 ifconfig
        10.6.4 ip
        10.6.5 nicstat
        10.6.6 dladm
        10.6.7 ping
        10.6.8 traceroute
        10.6.9 pathchar
        10.6.10 tcpdump
        10.6.11 snoop
        10.6.12 Wireshark
        10.6.13 DTrace
        10.6.14 SystemTap
        10.6.15 perf
        10.6.16 その他のツール
    10.7 実験
        10.7.1 iperf
    10.8 チューニング
        10.8.1 Linux
        10.8.2 Solaris
        10.8.3 構成
    10.9 練習問題
    10.10 参考文献

11章 クラウドコンピューティング
    11.1 基礎知識
        11.1.1 価格/パフォーマンス比
        11.1.2 スケーラブルなアーキテクチャ
        11.1.3 キャパシティプランニング
        11.1.4 マルチテナンシー
    11.2 OS仮想化
        11.2.1 オーバーヘッド
        11.2.2 リソースコントロール
        11.2.3 可観測性
    11.3 ハードウェア仮想化
        11.3.1 オーバーヘッド
        11.3.2 リソースコントロール
        11.3.3 デバイスI/O
        11.3.4 可観測性
    11.4 比較
    11.5 練習問題
    11.6 参考文献

12章 ベンチマーキング
    12.1 基礎知識
        12.1.1 アクティビティ
        12.1.2 効果的なベンチマーキング
        12.1.3 ベンチマーキングの禁じ手
    12.2 ベンチマーキングのタイプ
        12.2.1 マイクロベンチマーキング
        12.2.2 シミュレーション
        12.2.3 リプレイ
        12.2.4 産業標準
    12.3 メソドロジ
        12.3.1 パッシブベンチマーキング
        12.3.2 アクティブベンチマーキング
        12.3.3 CPUプロファイリング
        12.3.4 USEメソッド
        12.3.5 ワークロードの特性の把握
        12.3.6 カスタムベンチマーク
        12.3.7 ランプロード
        12.3.8 サニティチェック
        12.3.9 統計的分析
    12.4 ベンチマークについての問い
    12.5 練習問題
    12.6 参考文献

13章 ケーススタディ
    13.1 ケーススタディ:赤いクジラ
        13.1.1 問題の記述
        13.1.2 サポート
        13.1.3 作業開始
        13.1.4 冒険は自分で選べ
        13.1.5 USEメソッド
        13.1.6 これで終わりなのか
        13.1.7 テイク2
        13.1.8 基礎
        13.1.9 赤いクジラを無視する
        13.1.10 カーネルに対する問い合わせ
        13.1.11 なぜか?
        13.1.12 エピローグ
    13.2 コメント
    13.3 その他の情報
    13.4 参考文献

付録A USEメソッド:Linux
    A.1 物理リソース
    A.2 ソフトウェアリソース

付録B USEメソッド:Solaris
    B.1 物理リソース
    B.2 ソフトウェアリソース
    B.3 参考文献

付録C sarのまとめ
    C.1 Linux
    C.2 Solaris

付録D DTrace 1行プログラム
    D.1 syscallプロバイダ
    D.2 procプロバイダ
    D.3 profileプロバイダ
    D.4 schedプロバイダ
    D.5 fbtプロバイダ
    D.6 pidプロバイダ
    D.7 ioプロバイダ
    D.8 sysinfoプロバイダ
    D.9 vminfoプロバイダ
    D.10 ipプロバイダ
    D.11 tcpプロバイダ
    D.12 udpプロバイダ

付録E DTraceからSystemTapへの書き換え
    E.1 機能
    E.2 用語
    E.3 プローブ
    E.4 組み込み変数
    E.5 関数
    E.6 例1:syscall entryプローブのリストアップ
    E.7 例2:read()が返したサイズの集計
    E.8 例3:プロセス名ごとにシステムコールを集計する
    E.9 例4:プロセスID 123が呼び出しているシステムコールを名前ごとに集計する

    E.10 例5:"httpd"プロセスが呼び出しているシステムコールの数を名前ごとに集計する

    E.11 例6:open()をトレーシングしてプロセス名とパス名を表示する
    E.12 例7:"mysqld"プロセスのread()レイテンシを集計する
    E.13 例8:プロセス名と引数を付けて新プロセスをトレーシングする
    E.14 例9:カーネルスタックを100Hzでサンプリングする

付録F 練習問題の解答
    F.1 2章「メソドロジ」
    F.2 3章「オペレーティングシステム」
    F.3 6章「CPU」
    F.4 7章「メモリ」
    F.5 8章「ファイルシステム」
    F.6 9章「ディスク」
    F.7 11章「クラウドコンピューティング」

付録G システムパフォーマンス関連の著名人リスト

付録H 用語集

参考文献
索引
ページトップへ戻る