えいのうにっき

a-knowの日記です

読書メモ・詳解システムパフォーマンス 第11章/クラウドコンピューティング

「詳解システムパフォーマンス」の読書メモシリーズ・第10弾。

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

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

  • 作者:Brendan Gregg
  • 発売日: 2017/02/22
  • メディア: 単行本(ソフトカバー)

感想

  • 自分が日頃慣れ親しんでいるのは「ハードウェア仮想化」による仮想マシンであることを知った
    • 「OS仮想化」知らなかった......
  • そして、多くの点で「OS仮想化」の方が優れていることを知った
    • ただ、異なるカーネルバージョンを動かせる、というハードウェア仮想化のメリットは大きい
  • 会社の同僚が「dom0が〜〜」と言っていたのが何だったのか、ようやくわかった。。
    • ただのホスト名かと思っていた......
  • パブリッククラウドを使うときにも、この章に書かれているようなことを思い浮かべながら使うと良さそう

知らなかった

  • OS仮想化
    • 「コンテナ型仮想化」とも
    • ハードウェア仮想化と大きく違う点として、カーネルがひとつだけしか実行されていない
    • メリット
      • ゲストアプリケーションのI/Oにかかるパフォーマンスオーバーヘッドがほとんどない
        • ゲストアプリケーションがホストカーネルに直接システムコールを実行できるため
      • ゲストにアロケートされるメモリは、ゲストが全てを使うことができる
        • ゲストカーネル・ハイパーバイザなどに専有されることがない
      • ファイルシステムキャッシュが統一されており、ホストとゲストで二重にキャッシュされることはない
      • ホストからすべてのゲストプロセスを観察できるというデバッグのしやすさ
      • CPUが実CPU(vCPUではない)。アダプティブミューテックスロックの前提条件が有効。
        • アダプティブミューテックスロック:Spin locksとMutex locksのハイブリッド
        • ロック獲得しているスレッドが現在他のCPUで実行中の場合はスピンする。他のCPUでなければブロックするか、スピンの閾値を超えたらブロックする。
        • CPUリソースを無駄にせず、低レイテンシなロックアクセスができるように最適化されている。
        • マルチスレッドアプリケーションにおける同期プリミティブ - ゆううきメモ
    • デメリット
      • カーネルパニックがすべてのゲストに影響を及ぼす
      • ゲストは、異なるカーネルバージョンを実行できない
  • ハードウェア仮想化
    • 以下のようなタイプがある
    • 完全仮想化ーバイナリ変換
      • 仮想ハードウェアコンポーネントから構成された完全な仮想システム。
      • 必要に応じてプロセッサの直接実行と命令のバイナリ変換を使い分ける
      • 物理リソースに働きかけるゲストカーネル命令は識別され、バイナリ変換される。
    • 完全仮想化ーハードウェア支援
      • 仮想ハードウェアコンポーネントから構成された完全な仮想システム。
      • 仮想マシンをより効率よく実行するためのプロセッサのサポート(AMD-V, Intel VT-x エクステンション)を利用する
      • バイナリ命令を変換するのではなく、ゲストカーネルの特権的な命令をもっと特権的なVMMに強制的にトラップさせ、VMMが特権をエミュレートして仮想化をサポートする。
    • 準仮想化
      • ゲストOSがすべてのコンポーネントを完全に仮想化しなくても済むように、効率よくホストリソースを利用するためのインターフェイス(ハイパーコール)を含む仮想化システムの提供。
      • ゲストOSが準仮想化をサポートしてくれることに依存することになる
      • 仮想化しなければならないゲストOSの命令は、ハイパーバイザを呼び出すハイパーコールに置き換えられる。
    • ハイブリッド仮想化
      • ハードウェア支援仮想化と準仮想化の両方を使うもの
    • ハードウェア仮想化はいずれも、ゲストOSがハードウェアにアクセスしようとするたびに、オーバーヘッドを生み出す。
      • コマンドを仮想デバイスから物理デバイスに変換しなければならないため
    • 仮想化のもとでは、ゲストからハードウェアへの新しいメモリページのマッピング(ページフォルト)は、2段階でおこなわれる。
      1. ゲストカーネルが仮想メモリからゲストの物理メモリへの変換をおこなう
      2. ハイパーバイザのVMMがゲストの物理メモリからホストの物理メモリ(実メモリ)への変換をおこなう
  • ハイパーバイザには2つのタイプがある
    • タイプ1
      • ほかのホストのカーネル / ユーザーレベルソフトウェアとしてハイパーバイザを実行するのではなく、プロセッサ上でハイパーバイザを直接実行する
      • ネイティブハイパーバイザ、ベアメタルハイパーバイザとも呼ばれる。
      • ゲストVMのために自分自身のCPUスケジューラを内蔵している
      • Xenなどはこれに分類される
    • タイプ2
      • ホストOSのカーネルによって実行され、カーネルレベルモジュールとユーザーレベルモジュールから構成することができる
      • ホストOSは、ハイパーバイザを管理し新しいゲストを起動する特権を持っている
      • KVMなどはこれに分類される
  • 二重仮想化
    • 個々のKVMインスタンスを独自のセキュアなゾーンにカプセル化することでセキュリティ保護の二重化を図ること
  • Linuxでは、perf(1)がKVMとXenの両方に対してトレースポイントを提供している

復習

  • CPU数が増えると、CPUキャッシュのコヒーレンシ(キャッシュの一貫性)を維持するのも大変になる
  • バースティング:可能ならただちにCPUリソースを動的にアロケートする戦略

なるほど

  • ハードウェア仮想化での可観測性
    • 何が観測できるかはハイパーバイザのタイプと可観測性ツールが起動される位置によって左右される
    • タイプ1かタイプ2の場合
      • すべての物理リソースは標準のOSツールを使って観察可能
      • I/OはI/Oプロキシから観察可能
      • ゲストの内部は直接の観察は不可能
    • ゲストから
      • 物理リソースとその使用状況は、一般的に観察不可能
      • ゲストが使っている仮想リソースとその使用状況は観察可能
  • 仮想化テクノロジーを比較したとき、パフォーマンス面での比較は多いが、可観測性の比較が見落とされやすい
    • 不要な仕事を見つけ、取り除くことでパフォーマンスを大きく向上させられる、という点では、可観測性への考慮は重要