问题描述
我有一个程序,它运行在具有 Linux 内核 4.18 和 Intel cpu 的多线程框架上。我运行 perf record -p pid -g -e cycles:u --call-graph lbr -F 99 -- sleep 20
来收集堆栈跟踪并生成火焰图。
我的程序在低工作负载下运行,因此在 futex_wait
上花费的时间是预期的。但是栈顶是一个核函数native_write_msr
。根据{{3}}和,该函数用于性能计数器。我已禁用 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
我的问题是
- 为什么
native_write_msr
在堆栈跟踪中出现了这么多次(因此,它在火焰图中占据了大约 80% 的大空间)。是块操作,还是调用时释放cpu? - 为什么相对于帧图,系统 cpu 使用率相对较低?根据图表,80% 的 cpu 时间应该属于
%system
而不是%usr
。
感谢任何帮助。如果我错过了任何有用的信息,请评论。
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)