Perfにおけるスタックアンワインディングの難問

2025-01-31
Perfにおけるスタックアンワインディングの難問

Perfは強力なパフォーマンス分析ツールであり、PMUカウンタのオーバーフロー割り込みを使用して、プロファイリングのためのスレッド状態をキャプチャします。しかし、スタックアンワインディングは課題となります。最新のコンパイラはデフォルトでフレームポインタを省略するため、スタックトレースが困難になります。 -fno-omit-frame-pointerを使用して再コンパイルすることもできますが、コストが高く、システムライブラリとの互換性の問題が生じる可能性があります。DWARFは代替手段を提供しますが、その複雑さとパフォーマンスオーバーヘッドは大きく、Linus Torvaldsもカーネルでのスタックアンワインディングへの使用を拒否しています。そのため、Perfは妥協案として、スタックの上部のみをユーザースペースにコピーしてアンワインディングを行う方法を採用しています。これによりスタックサイズが制限されます(65,528バイト)が、パフォーマンスと実用性を効果的にバランスさせています。