OProfile + VM

VMware vSphere Hypervisor 5 (ESXi 5) 上の Linux (CentOS 6) で OProfile を使おうとして全然データが取れなくて頭をひねっていたんですが、VM 上では(VMware 固有かどうかは不明)パフォーマンスカウンタインターフェースを使ったプロファイルができないんですな (FAQ)

OProfile がどのようにカウンタの存在を検出しているのかはわかりませんが(CPUID だろうか?)、CPU のパフォーマンスカウンタが存在しているように見えるのに実際には使えない(イベントが来ない)ため、こういう状態になります。確かに CPU のパフォーマンスカウンタを仮想化するのは手間の割に得るものが少なそうなので、VM の中から CPU のパフォーマンスカウンタが使えないというのは、言われてみればそうだよねぇ、という感じです。

で、対処法ですが、kernel 2.6 では timer interrupt mode を使うことになります。

# opcontrol --deinit
# modprobe oprofile timer=1
# opcontrol --start

計測精度が(たぶん)低いとか、割り込み禁止になっている部分のコードのプロファイル(カーネルプロファイルを取るときに必要なことがある)ができないとか、低レイヤのプロファイル(たとえば、キャッシュミスとか分岐予測ミスとかの回数)ができないとかいろいろ問題はありますが、ほとんどの場合はそこまで細かいプロファイルはしないと思うので、これで行けそうです。

Trackback

no comment untill now

Add your comment now