第2章 パフォーマンス監視ツール

本章では、ゲストの仮想マシン環境の監視に使用するツールについて説明します。

2.1. perf kvm

ホストからゲストのオペレーティングシステムの統計値を収集し、分析するには、perf コマンドに kvm オプションを付けて使用します。perf パッケージは perf コマンドを提供します。これは、以下のコマンドを実行してインストールできます。
# yum install perf
ホストで perf kvm を使用するには、ゲストの /proc/modules ファイルと /proc/kallsyms ファイルにアクセスできなければなりません。ホストにファイルを転送してからそのファイルでレポートを実行するには、以下の手順 (手順2.1「ゲストの /proc ファイルをホストにコピーする」) を参照してください。

手順2.1 ゲストの /proc ファイルをホストにコピーする

重要

必要なファイルを /proc ディレクトリーから直接コピーしても (scp などを使用)、コピーしたファイルは空になります。本セクションでは、まず、ゲストのファイルを一時的な場所に保存し (cat コマンドを使用)、その保存先からファイルをホストにコピーして、perf kvm で使用する手順を説明しています。
  1. ゲストにログインしてファイルを保存する

    ゲストにログインして、/proc/modules/proc/kallsyms を一時的な場所の /tmp に保存します。
    # cat /proc/modules > /tmp/modules
    # cat /proc/kallsyms > /tmp/kallsyms
  2. 一時ファイルをホストにコピーする

    ゲストからログオフしたら、今度は次の例に示す scp コマンドを実行して一時的な場所に保存したファイルをホストにコピーします。必要に応じてホスト名と TCP ポートをご使用の値に置き換えてください。
    # scp root@GuestMachine:/tmp/kallsyms guest-kallsyms
    # scp root@GuestMachine:/tmp/modules guest-modules
    これでゲストからの 2 つのファイル (guest-kallsymsguest-modules) がホスト上にコピーされ、perf kvm で使用する準備が整いました。
  3. perf kvm でイベントの記録とレポートを実行する

    前述の手順で入手したファイルを使って、ゲスト内のイベント、ホスト内のイベントのいずれかまたは両方を記録し、レポートできるようになりました。
    次のコマンドの例を実行します。
    # perf kvm --host --guest --guestkallsyms=guest-kallsyms \
    --guestmodules=guest-modules record -a -o perf.data

    注記

    --host--guest の両方をコマンドに使用すると、出力は perf.data.kvm というファイル名で保存されます。--host だけを使用すると、ファイル名は perf.data.host になります。同じように、--guest のみを使用すると、そのファイル名は perf.data.guest になります。
    記録の動作を停止させる場合は Ctrl-C を押します。
  4. イベントをレポートする

    記録のプロセスで取得したファイルを使って出力を新しいファイル「analyze」にリダイレクトする例を示します。
    perf kvm --host --guest --guestmodules=guest-modules report -i perf.data.kvm \
    --force > analyze
    記録したイベントを調べるため、analyze ファイルの内容を表示します。
    # cat analyze
    
    
    # Events: 7K cycles
    #
    # Overhead       Command  Shared Object      Symbol
    # ........  ............  .................  .........................
    #
        95.06%            vi  vi                 [.] 0x48287
         0.61%          init  [kernel.kallsyms]  [k] intel_idle
         0.36%            vi  libc-2.12.so       [.] _wordcopy_fwd_aligned
         0.32%            vi  libc-2.12.so       [.] __strlen_sse42
         0.14%       swapper  [kernel.kallsyms]  [k] intel_idle
         0.13%          init  [kernel.kallsyms]  [k] uhci_irq
         0.11%          perf  [kernel.kallsyms]  [k] generic_exec_single
         0.11%          init  [kernel.kallsyms]  [k] tg_shares_up
         0.10%      qemu-kvm  [kernel.kallsyms]  [k] tg_shares_up
    
    [output truncated...]