【问题标题】:_spin_unlock_irqrestore() has very high sampling rate in my kvm, why?_spin_unlock_irqrestore() 在我的 kvm 中有很高的采样率,为什么?
【发布时间】:2013-02-05 08:48:10
【问题描述】:

我在我的 KVM 虚拟机中运行 SPECJbb 基准测试。它显示了 Warehouse 2 和 Warehouse 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% [kernel] [k] handle_IRQ_event

...

运行我的 Java 程序似乎只有 7.36% 的 cpu 时间。为什么_spin_unlock_irqrestore的采样率这么高?它有什么作用?

【问题讨论】:

    标签: linux-kernel kvm


    【解决方案1】:

    这是 perf 的糟糕报告,而不是 _spin_unlock_irqrestore 消耗的周期。

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

    所以您所知道的是,这些周期被禁用中断并使用_spin_unlock_irqrestore 启用它们的代码所消耗。

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

    【讨论】:

    • 感谢您的回答。你能给我更多解释一下为什么 IRQ 禁用时间这么长吗?那是因为我在kvm中运行它吗?谢谢!
    猜你喜欢
    • 2017-07-25
    • 2018-04-13
    • 2020-06-15
    • 1970-01-01
    • 2015-10-05
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多