我在我的KVM虚拟机中运行一个SPECJbb基准测试。它显示了仓库2和仓库3之间的吞吐量急剧下降(它们之间的不同只是在并发任务上添加)。
然后在我的来宾虚拟机中使用perf。结果表明,_spin_unlock_irqrestore具有很高的采样率。
活动: 31K周期
..。
似乎只有7.36%的cpu运行我的Java程序。为什么自旋解锁的采样率这么高?那它是做什么的?
发布于 2013-02-05 15:19:30
这是perf的坏报告,而不是_spin_unlock_irqrestore消耗的周期。
当IRQ被禁用时,perf的中断将不被处理。相反,当中断重新启用时,它们将被处理。当perf的中断处理程序查看指令指针以查看正在运行的代码时,它会找到启用中断的函数--通常是_spin_unlock_irqrestore。
因此,您所知道的是,这些周期是由禁用中断并使用_spin_unlock_irqrestore启用的代码所消耗的。
如果您可以使用NMI (非屏蔽中断),它可以解决这个问题。
我知道可以通过更改makefile来实现oprofile ( perf的前身),但不知道perf。
https://stackoverflow.com/questions/14703328
复制相似问题