gpt4 book ai didi

linux-kernel - 为什么 perf 总是显示 _raw_spin_unlock_irqrestore 或其他一些自旋解锁功能

转载 作者:行者123 更新时间:2023-12-03 20:17:49 53 4
gpt4 key购买 nike

有谁知道为什么 perf 总是显示 _raw_spin_unlock_irqrestore 或其他一些自旋解锁功能?与 spin_lock 相比, spin_unlock 实现通常更简单。如果 spin_lock 上存在高竞争,那么 perf 不应该在 spin_lock 中显示结果吗?

最佳答案

当中断被禁止时,定时器中断 perf用于采样不会触发。当中断最终被启用时(在任何 irqrestore 函数中),perf错误地考虑了整个时间跨度,就好像它是由该还原功能占用的一样。
如果您使用 perf annotate 更深入地了解,您会看到大多数(如果不是全部)样本是 popfq 之后的 1 个操作码,更新 EFLAGS 寄存器,启用中断:

_raw_spin_unlock_irqrestore  /proc/kcore
Percent│ Disassembly of section load0:

│ ffffffff819bd790 <load0>:
│ nop
│ push %rbp
│ mov %rsp,%rbp
│ movb $0x0,(%rdi)
│ nop
│ mov %rsi,%rdi
│ push %rdi
│ popfq
100.00 │ nop
│ pop %rbp
│ ← retq
Linux tries to use an NMI用于性能监控中断。自 v2.6.31~ 以来,此更改已在主线中,但我想它适用于裸机内核,而不适用于作为 VM 运行的内核(即,我的裸机 Linux 机器上的 perf record 没有出现此问题,而 perf record 在在我的机器上运行的 KVM 确实如此)。
this answer更多细节。

关于linux-kernel - 为什么 perf 总是显示 _raw_spin_unlock_irqrestore 或其他一些自旋解锁功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45830407/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com