Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

この章では、ゲスト仮想マシン環境のモニターリングに使用されるツールについて説明します。

2.1. perf kvm

kvm オプションを指定した perf コマンドを使用して、ホストからゲストオペレーティングシステムの統計情報を収集および分析できます。perf パッケージは perf コマンドを提供します。次のコマンドを実行してインストールします。
# yum install perf
In order to use perf kvm in the host, you must have access to the /proc/modules ファイルと /proc/kallsyms ファイルにアクセスできる必要があります。ファイルをホストに転送し、ファイルに関するレポートを実行する場合は、手順2.1「ゲストからホストへの /proc ファイルのコピー」 を参照してください。

手順2.1 ゲストからホストへの /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...]