Open30

詳解システムパフォーマンス 第2版

tsushima_mtsushima_m

第5章

tsushima_mtsushima_m

・パフォーマンスを引きあげるテクニック:マルチスレッドプログラミング、ハッシュテーブル、ノンブロッキングIO
・ロックと同期プリミティブ

tsushima_mtsushima_m

適切な目標設定
レイテンシ?スループット?何を目標にするかで、目標を阻む要因が異なる
レイテンシならディスクIOなど。スループットならCPU使用率など

Adpexを目標指標とすることで、顧客エクスペリエンスをうまく定量化できる

tsushima_mtsushima_m

ビッグオー記法
アルゴリズムの複雑度を分析し、入力データセットが増えたときに、パフォーマンスがどう変わるかをモデリングする

tsushima_mtsushima_m

5.2 アプリケーションパフォーマンス向上のためのテクニック
・I/Oサイズ選択
・キャッシング
・バッファリング
・ポーリング
・並列実行、並列処理
 タイムシェアリングシステムで提供される
・ノンブロッキングI/O
・プロセッサのバインド
・パフォーマンスマントラ

並列実行、並行処理のボリュームが大きい

tsushima_mtsushima_m

プログラミング言語
・コンパイル言語
 →gccの話が興味深い
・インタープリタ言語
・仮想マシン
 →ガベージコレクションのデメリットの話が面白い

tsushima_mtsushima_m

第6章

tsushima_mtsushima_m

・基礎知識
・アーキテクチャ
・メソドロジ
・可観測性ツール
・チューニング

tsushima_mtsushima_m

6.2
ハードウェアスレッドは一つで1個の論理CPUとしてアドレッシングができる。
つまり、4コアあり、それぞれ2つのハードウェアスレッドを持つプロセッサの場合、OSからみると8CPUあるように見える。

プロセッサではハードウェアキャッシュがさまざま用意されており、それぞれサイズが異なる。小さく、高速であればあるほど、キャッシュはCPUに近くなる。

ランキューはよくわからん

tsushima_mtsushima_m

6.3
4Ghzであれば毎秒40億秒、、といったように、クロックスピードは、CPUごとに異なる。
なかには、動的にクロックスピードを変えられるプロセッサも存在する。
クロックスピードはプロセッサのパフォーマンス指標としてあげられやすいが、いくらスピードが早くとも、中でやってる処理がパフォーマンスに寄与するものでなければ、いくらスピードが早くともワークロードのスループットがあがらない。

命令のとこはよくわからん。

使用率は、CPUが仕事をしていてビジーとなっていた時間の割合のことである。
この時間は、ユーザーレベルの実行で使われていた時間(ユーザー時間)と、カーネルレベルの時間(カーネル時間)に分けられるが、99:1の割合で、ほぼユーザー時間がCPU時間を占めている。
使用率100%のCPUを飽和状態と言い、こうなるとパフォーマンスが下がる

プリエンプションはよくわからん

実行スレッドを分割し、複数のCPUで仕事を処理する方法として、マルチプロセスとマルチスレッディングが存在する。
マルチスレッディングの方がパフォーマンスに優れるが、開発者にとっては複雑となりやすい。

プロセッサは最大ワードサイズ(32bit or 64bit)を持っており、サイズが多いいほどパフォーマンスはよくなる反面、データ型によっては、未使用ビットが発生した場合にメモリにオーバーヘッドがかかったり、ポインタサイズが大きくなるとより大きなメモリI/Oが必要となったりする。

martin0721martin0721

6.4
長い、、、
ハードウェア
・プロセッサの仕組み
・Pステート(パフォーマンス設定)とCステート(電力設定)
・CPUキャッシュ:読み出しキャッシングと書き込みバッファリングによるパフォーマンス向上
・インターコネクトによるマルチプロセッサ内でのCPU接続
・ハードウェアカウンタ
・GPU

ソフトウェア
スケジューラは主要機能として、以下をもつ
・タイムシェアリング:実行可能スレッドの中で、優先度がもっとも高いものを先に実行する
・プリエンプション:優先度の高いスレッドが実行可能になった時に、優先度の高いスレッドをプリエンプションで実行可能にする
・ロードバランシング:ビジーではないCPUのランキューにスレッドを移す

・・・他にもソフトウェアについて色々書いてた

martin0721martin0721

6.5 メソドロジ
・ツールメソッド
利用できるツールを順に試す。時間がかかる
・USEメソッド
パフォーマンス調査の初期段階として、全てのコンポーネントの使用率(Utilization)、飽和度(Satuation)、エラー(Error)を調べる
・ワークロード特性の把握
ロードアベレージ、ユーザー時間とシステム時間の比率、システムコールの頻度、磁ハウ的なコンテキストスイッチの頻度、割り込みの頻度など。
負荷の特性を明らかにしていくことを目的とする
・プロファイリング
解析対象の具体像を構築する
 ・タイマーベースのサンプリング:現在実行している関数かスタックトレースのサンプルを集める
 ・関数トレーシング:関数呼び出しをインストルメンテーションし、所要時間を計測する

プロファイルをあつめたら、フレームグラフから読み解いていく。

・サイクル分析
サイクルレベルでのCPUの使用率がわかる

・パフォーマンスモニタリング
元にある問題、経時的な振る舞いのパターンを明らかにする
CPUにおいては、使用率と飽和度が指標となる。

・静的パフォーマンスチューニング
構成された環境の問題点に注目する

・優先度のチューニング
Unixでは、プロセスの優先度をnice値で設定している。正の値であれば優先度低、負の値であれば優先度高である。

・リソースコントロール
あんまよくわからん

martin0721martin0721

第7章 メモリ

martin0721martin0721

メモリで考慮すべきこと
・メモリのアロケート
・関数
・メモリのコピー
・アドレス空間のマッピングの管理にかかるCPUコスト

martin0721martin0721

7.2 コンセプト
・仮想メモリ
スワップデバイスを用いて物理メモリ以上の容量を提供する。
スワッピングはカーネルによって行われる。(オーバーサブスクライブ)。これには限度を設けることができるが、linuxでは制限を設けないこともできる。(オーバーコミット)
・ページング
ページをメモリに出し入れ(ページin/out)すること。
この仕組みは以下を実現する
・部分的にロードされたプログラムの実行
・メインメモリよりも大きいプログラムの実行
・メインメモリとストレージデバイスの間のプログラムの効率的な移動

また、種類としてはファイルシステムページングと無名ページングが存在する
・ファイルシステムページング:mmapを用いてメモリマップとファイル内(?)のページの読み書きに起きる「良い」ページング
・無名ページング(スワップ)(?):パフォーマンスを下げるため、「悪い」ページング

・デマンドページング
仮想メモリページをオンデマンドで物理メモリにマッピングする

・オーバーコミット
システムが格納できる以上のメモリのアロケーションを認める。
・プロセススワッピング
メインメモリとスワップデバイス or スワップファイル間でプロセス全体を移動する。
再び実行しようとすると、膨大なディスクIOが必要となり、パフォーマンスを大きく損なう

martin0721martin0721

7.3 アーキテクチャ
・ハードウェア
メインメモリ:DRAMがよく使われる。
・ソフトウェア
用語が多い、、、

martin0721martin0721

メソドロジ
・ツールメソッド
・USEメソッド
・使用形態の特性の把握
・高度な使用形態の特性チェックリスト

martin0721martin0721

第8章 ファイルシステム

martin0721martin0721

アプリケーションにとってはファイルシステムのパフォーマンスの方が重要であり、ファイルシステムはアプリケーションがディスクレベルのレイテンシに悩まされないよう、キャッシング、バッファリング、非同期I/Oなどを駆使する。

martin0721martin0721

8.2 モデル
ファイルシステムは、アプリケーションおよびシステムツールと、ストレージデバイス間の中立を行っており、読み出し要求に対してキャッシュ、もしくはディスクからデータを返却(キャッシュミス)している。

martin0721martin0721

8.3 コンセプト
・ファイルシステムレイテンシ
ファイルシステムパフォーマンスの最も重要な指標。
・キャッシング
ファイルシステムでは、一般にRAMをキャッシュとして用いることで、パフォーマンス向上を図る。
・ランダムI/OとシーケンシャルI/O
シーケンシャルI/Oでは、前のI/Oの末尾からオフセットが始まり、ランダムI/Oでは、不規則にオフセットが変化する。伝統的に、フラグメンテーションを避けるためにランダムI/Oは避けられてきた
・プリフェッチ
大量のファイルデータをシーケンシャルに読み出す場合、大きすぎてキャッシュに収まりきらなかったり、1度しか読み出されないため、キャッシングされる可能性が低い。プリフェッチは、現在のファイルI/O オフセットと前回のオフセットからシーケンシャルな読み出しワークロードを検出し、アプリケーションの要求前にディスク読み出しを予想して発行する。
・ライトバックキャッシング
メインメモリへの転送が終わったら、書き込みを完了扱いし、ディスクへの書き込みはあとで非同期に行われる。
・同期書き込み
永続化層への書き込みが完全に完了しないと終わらない書き込み。
・RAW I/OとDirect I/O
RAW I/Oは、ファイルシステムを素通りして、直接ディスクオフセットに書き込まれる。Direct I/Oは、ファイルシステムを使いつつ、ファイルシステムキャッシュをバイパスできるようにする。

長い。

martin0721martin0721

8.4 アーキテクチャ
・VFS
異なるファイルシステムタイプに対し、共通インターフェースを提供する
・ファイルシステムキャッシュ、ページキャッシュ、dentryキャッシュ、iノードキャッシュ
ファイルシステムまわりのいろんなキャッシュ
・パフォーマンス関連

長い。挫折

tsushima_mtsushima_m

第9章 ディスク

tsushima_mtsushima_m

9.2 モデル
・単純ディスク
ディスクが受け入れたI/Oは、処理されているかキューに待機しているかのどちらか。
ただし、必ずFIFOが使われるわけではない。
・オンディスクキャッシュ
一部の読み出し要求を、高速なメモリタイプで満足させる。
ライトバックによって、書き込みのパフォーマンスも上げられる。
・コントローラ
ディスクコントローラは、ディスクデバイスとCPUのI/Oトランスポートの橋渡しをする

tsushima_mtsushima_m

9.3 コンセプト
時間の計測
・I/O要求時間:I/Oを発行してから完了するまでの時間
・I/O待ち時間:キューで待機していた時間
・I/Oサービス時間:処理されていた時間。最近のディスクは内部にキューを持っているため、この時間にはオンディスクキューでの待ち時間も含まれる

tsushima_mtsushima_m

第10章

tsushima_mtsushima_m

ネットワークインターフェース
ネットワークに接続するOS側のエンドポイント
コントローラ
ポートとシステムのI/Oトランスポートの間でパケットを転送するマイクロプロセッサ
プロトコルスタック
ネットワーキングは、プロトコルスタックによって実現される。
層が異なれば、メッセージを表す用語が異なってくる。