qemuのトレースを採る方法については、いくつかありますが、標準エラー出力にトレースを書き出す "stderr" trace-backend がもっとも簡単な方法です。
"stderr" backend の仕組みは qemu 内部のトレースイベントを標準エラー出力にデバッグprintfをするという非常に単純なものです。
qemu-kvm 0.15よりサポートされています。
関連コミット:
http://git.qemu.org/?p=qemu.git;a=commit;h=320fba2a1f384e17db150d74540a2cf005eb47b5
使い方
qemuのトレースは採取しない設定でもオーバヘッドがあるため、デフォルトではオフになっています。トレースを有効にするには、コンパイル時にトレースを有効にする必要があります。
コンパイルオプションは以下のようになります。
./configure --prefix=/usr/local/ --enable-trace-backend=stderr
トレースイベント一覧は以下のファイルにかかれています。
qemu/trace-events
イベント一覧から、取得したいイベントを選びファイルに書き出します。 例えば、以下のような内容のファイルを作ります。ワイルドカード指定が可能です。
g_malloc g_free qemu* virtio*
qemu を起動する際に、このイベントファイルを-traceオプションに指定します。
sudo ./qemu-system-x86_64 -enable-kvm -hda ~/vmimg/f1.img -m 512 -trace events=/path/to/events-file
得られる出力は以下のようになります。
g_malloc size 16 ptr 0x7f3f40004270 qemu_co_mutex_lock_entry mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_lock_return mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_unlock_entry mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_unlock_return mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_coroutine_yield from 0x7f3f54a7faa0 to 0x7f3f400009d8 qemu_coroutine_enter from 0x7f3f54a7fbb8 to 0x7f3f54a7faa0 opaque (nil) qemu_co_mutex_lock_entry mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_lock_return mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_unlock_entry mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 qemu_co_mutex_unlock_return mutex 0x7f3f54a80898 self 0x7f3f54a7faa0 g_free ptr 0x7f3f40004270
libvirtとの連携
qemuを利用する際は、通常libvirt経由で利用することが多いと思います。ここではlibvirtから"stderr" trace-backend を利用する際のtipsを記載します。
・libvirtのログに出力
virsh start domain コマンドでドメインを起動した場合、stderrの出力先は、以下になります。
/var/log/libvirt/qemu/domain.log
・動的なイベントのオン・オフ
qemu monitor command を利用することで、稼働中のドメインで採取するイベントを動的にon/offできます。
利用可能なトレースイベント一覧の取得
# virsh qemu-monitor-command --hmp domain info trace-events
イベントのon・off
# virsh qemu-monitor-command --hmp domain trace-event qemu_vmalloc on # virsh qemu-monitor-command --hmp domain trace-event qemu_vmalloc off参考情報
Observability using QEMU tracing
qemuのtrace機能
docs/tracing
0 件のコメント:
コメントを投稿