然后我在我的来宾虚拟机中使用perf.它表明_spin_unlock_irqrestore具有非常高的采样率.
事件:31K周期
> 74.89%[kernel] [k] _spin_unlock_irqrestore
> 7.36%perf-1968.map [.] 0x7f84b913e064
> 6.82%[kernel] [k] __do_softirq
> 6.39%[kernel] [k] handle_IRQ_event
…
似乎只有7.36%的cpu时间运行我的Java程序.为什么_spin_unlock_irqrestore的采样率如此之高?它做了什么?
解决方法 这是由perf报告的错误,而不是_spin_unlock_irqrestore消耗的周期.禁用IRQ时,不会处理perf的中断.相反,它们在重新启用中断时被处理.当perf的中断处理程序查看指令指针时,为了查看正在运行的代码,它会找到启用中断的函数 – 通常是_spin_unlock_irqrestore.
所有你知道的是,循环被禁用了中断的代码消耗,并使用_spin_unlock_irqrestore启用它们.
如果你可以使用perf来使用NMI(不可屏蔽中断),它可以解决这个问题.我知道可以通过更改makefile来完成oprofile(perf的前身),但不知道perf.
总结以上是内存溢出为你收集整理的linux-kernel – _spin_unlock_irqrestore()在我的kvm中有很高的采样率,为什么?全部内容,希望文章能够帮你解决linux-kernel – _spin_unlock_irqrestore()在我的kvm中有很高的采样率,为什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)