6

KVM仮想マシンでSPECJbbベンチマークを実行します。これは、ウェアハウス2とウェアハウス3の間でスループットが大幅に低下していることを示しています(両者の違いは、同時実行タスクを追加するだけです)

次に、ゲスト仮想マシンでperfを使用します。これは、_spin_unlock_irqrestoreのサンプリングレートが非常に高いことを示しています。

イベント:31Kサイクル

  • 74.89%[核] [k] _spin_unlock_irqrestore

  • 7.36%perf-1968.map[。]0x7f84b913e064

  • 6.82%[核] [k] __do_softirq

  • 6.39%[カーネル] [k] handle_IRQ_event

..。

私のJavaプログラムの実行時間はわずか7.36%のようです。_spin_unlock_irqrestoreのサンプリングレートが非常に高いのはなぜですか?そしてそれは何をしますか?

4

1 に答える 1

9

perfによって消費されたサイクルではなく、による不適切なレポート_spin_unlock_irqrestoreです。

IRQ が無効になっている場合、perf の割り込みは処理されません。代わりに、割り込みが再度有効になったときに処理されます。perf の割り込みハンドラーが命令ポインターを調べて、実行中のコードを確認すると、割り込みを有効にした関数を見つけます_spin_unlock_irqrestore

つまり、割り込みを無効にしたコードによってサイクルが消費され、_spin_unlock_irqrestore.

perf で NMI (マスク不可能な割り込み) を使用できるようにすると、この問題を解決できる可能性があります。
oprofile (perf の前身) で makefile を変更することでできることは知っていますが、perf についてはわかりません。

于 2013-02-05T15:19:30.603 に答える