Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
8.2. perf kvm
ホストからゲストのオペレーティングシステムの統計値を収集するには、
perf
コマンドに kvm
オプションを付けて使用します。
Red Hat Enterprise Linux では、 perf パッケージで
perf
コマンドを提供しています。 rpm -q perf
を実行して perf パッケージがインストールされているか確認します。 インストールされていない場合は、ゲストのオペレーティングシステムの統計値を収集して分析するため、 root ユーザーになり次のコマンドを使用してこのパッケージをインストールします。
yum install perf
ホストで
perf kvm
を使用するには、 ゲストの /proc/modules
ファイルと /proc/kallsyms
ファイルにアクセスできなければなりません。 これを行なうための方法が 2 種類あります。 ホストにファイルを転送してからそのファイルで報告を実行する場合は、 手順8.1「ゲストの /proc ファイルをホストにコピーする」 を参照してください。 ゲストを直接マウントしてそのファイルにアクセスする場合は、 手順8.2「代替方法: sshfs を使ってファイルに直接アクセスする」 を参照してください。
手順8.1 ゲストの /proc ファイルをホストにコピーする
重要
必要なファイルを /proc ディレクトリから直接コピーしても (
scp
などを使用)、 コピーしたファイルは空になります。 本セクションでは、 まず、 ゲストのファイルを一時的な場所に保存し (cat
)、 その保存先からファイルをホストにコピーして、 perf kvm
でのイベントの記録や報告に使用する手順を説明しています。
ゲストにログインしてファイルを保存する
ゲストにログインして、/proc/modules
と/proc/kallsyms
を一時的な場所となる/tmp
に保存します。# cat /proc/modules > /tmp/modules # cat /proc/kallsyms > /tmp/kallsyms
一時ファイルをホストにコピーする
ゲストからログオフしたら、 今度は次の例に示すscp
コマンドを実行して一時的な場所に保存したファイルをホストにコピーします。 必要に応じてホスト名と TCP ポートをご使用の値に置き換えてください。# scp root@GuestMachine:/tmp/kallsyms guest-kallsyms # scp root@GuestMachine:/tmp/modules guest-modules
これでゲストからの 2 つのファイル (guest-kallsyms
とguest-modules
) がホスト上にコピーされ、perf kvm
で使用する準備が整いました。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 を押します。イベントを報告する
記録のプロセスで取得したファイルを使って出力を新しいファイル「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...]
手順8.2 代替方法: sshfs を使ってファイルに直接アクセスする
重要
以下に示すのは一例です。 使用環境に合わせて適した値に置き換えてください。# Get the PID of the qemu process for the guest: PID=`ps -eo pid,cmd | grep "qemu.*-name GuestMachine" \ | grep -v grep | awk '{print $1}'` # Create mount point and mount guest mkdir -p /tmp/guestmount/$PID sshfs -o allow_other,direct_io GuestMachine:/ /tmp/guestmount/$PID # Begin recording perf kvm --host --guest --guestmount=/tmp/guestmount \ record -a -o perf.data # Ctrl-C interrupts recording. Run report: perf kvm --host --guest --guestmount=/tmp/guestmount report \ -i perf.data # Unmount sshfs to the guest once finished: fusermount -u /tmp/guestmount