微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 `native_write_msr` 支配我的分析结果?

如何解决为什么 `native_write_msr` 支配我的分析结果?

我有一个程序,它运行在具有 Linux 内核 4.18 和 Intel cpu 的多线程框架上。我运行 perf record -p pid -g -e cycles:u --call-graph lbr -F 99 -- sleep 20 来收集堆栈跟踪并生成火焰图。

Documentation

我的程序在低工作负载下运行,因此在 futex_wait 上花费的时间是预期的。但是栈顶是一个函数native_write_msr。根据{{​​3}}和

enter image description here

,该函数用于性能计数器。我已禁用 native_write_msr 中的跟踪点。

然后 pidstat -p pid 1 告诉我系统 cpu 使用率很低。

05:44:34 PM   UID       PID    %usr %system  %guest    %cpu   cpu  Command
05:44:35 PM  1001     67441   60.00    4.00    0.00   64.00    11  my_profram
05:44:36 PM  1001     67441   58.00    7.00    0.00   65.00    11  my_profram
05:44:37 PM  1001     67441   61.00    3.00    0.00   64.00    11  my_profram

我的问题是

  1. 为什么 native_write_msr 在堆栈跟踪中出现了这么多次(因此,它在火焰图中占据了大约 80% 的大空间)。是块操作,还是调用时释放cpu
  2. 为什么相对于帧图,系统 cpu 使用率相对较低?根据图表,80% 的 cpu 时间应该属于 %system 而不是 %usr

感谢任何帮助。如果我错过了任何有用的信息,请评论

非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。