我一直在用户空间使用Linux perf工具。我想编写代码,在每次执行上下文切换时读取线程的性能计数器。
所需步骤是:
1) 获得一种读取性能计数器寄存器的机制。
2) 每次上下文切换后从调度程序调用步骤(1)。
我陷入了步骤(1),因为我无法弄清楚要调用哪些函数来读取性能寄存器以及如何在执行此操作时描述事件。
我尝试浏览文档以及这个问题如何在内核内部使用性能计数器? https://stackoverflow.com/questions/29765275/how-do-i-use-performance-counters-inside-of-the-kernel.
你实际上可以完全做到这一点perf
通过使用跟踪点事件 and 组长抽样.
The sched:sched_switch
是在每次上下文切换时触发的跟踪点事件。将该事件与其他事件放入启用组领导者采样的组中,这样您就可以在发生领导者样本时读取非领导者计数器。语法如下:
perf record -e "{sched:sched_switch,cycles,instructions}:S" -a
这将记录cycles
价值观和instructions
每当有上下文切换时,每个 CPU 都会执行此操作。您可以使用以下命令检查输出perf script
,它还允许您使用 python 程序读取它。
如果你想在自己的程序中进行监控,可以使用perf_event_open
with PERF_FORMAT_GROUP
and PERF_SAMPLE_READ
.
The perf
工具及其底层perf_event_open
界面非常强大,但有时会缺乏文档。如果您需要更大的灵活性,您可以使用BPF https://www.iovisor.org/technology/ebpf and bcc https://github.com/iovisor/bcc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)