跟踪线程在核心上的执行

3
假设我想在x轴上绘制CPU“点击”(或墙钟时间),在y轴上绘制线程执行。因此,例如,如果我有4个内核,则有4个y轴刻度,x轴是时间,并且我想以红色绘制当一个内核正在执行该线程时:如何以编程方式收集信息来实现这一点?我想充分理解问题,所以我不需要使用TBB或任何IDE的线程可视化,无论是英特尔还是其他...我只想了解一个简单的代码片段来完成这个任务。语言并不重要,但如果是C,那就更好了。我不需要“绘制”图形,我只需要知道哪个CPU正在执行哪个线程以及持续多长时间。谢谢!

编辑:我刚刚发现nptl trace tool,如果有什么需要,我会看看他们在做什么并进行调整。

难道不已经有无数个程序可以做到这一点了吗? - David Heffernan
1个回答

2

如果不涉及内核,这将是困难的。

制作图表的最佳方法是让内核记录进程调度时的更改情况(大多数操作系统都有软亲和性,倾向于在同一核心上保留线程,因此它不必进行太多更改)。

尽管如此,某些操作系统会向用户空间导出此类统计信息。例如,Linux有/proc/[pid]/stat,并且在该文件中有一个名为processor的字段。

要了解您的线程在任何给定时刻正在发生的事情(模糊的了解),您可以监视/proc/self/task/*/stat中的文件。


1
我认为那样做不太好。原帖作者可能需要使用类似于perfkernelshark的工具。 - ninjalj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接