_spin_unlock_irqrestore()在我的kvm中有很高的采样率,为什么?

时间:2013-02-05 08:48:10

标签: linux-kernel kvm

我在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

...

似乎只有7.36%的cpu时间运行我的Java程序。为什么_spin_unlock_irqrestore的采样率如此之高?它做了什么?

1 个答案:

答案 0 :(得分:6)

perf的报告不好,而不是_spin_unlock_irqrestore消耗的周期。

禁用IRQ时,不会处理perf的中断。相反,它们在重新启用中断时被处理。当perf的中断处理程序查看指令指针时,为了查看正在运行的代码,它会找到启用中断的函数 - 通常是_spin_unlock_irqrestore

所有你知道的是,循环被禁用了中断的代码消耗,并使用_spin_unlock_irqrestore启用它们。

如果你能使用穿孔来使用NMI(不可屏蔽中断),它可以解决这个问题 我知道可以使用oprofile(perf的前身)通过更改makefile来完成,但不知道perf。

相关问题