通过核心跟踪线程执行

时间:2011-06-11 20:02:32

标签: c multithreading multicore

假设我想在x轴上绘制CPU“点击”(或挂钟时间)的图形,并在y轴上绘制线程。所以,例如,如果我有4个核心,我有4个y轴刻度,x轴是时间,我想用红色绘制,当核心执行该线程时:我怎么能以编程方式收集信息来做到这一点?我想完全理解这个问题,所以我真的不需要使用TBB或任何IDE,Intel或其他的线程可视化......我只想了解一个简单的代码片段。语言不是问题,但如果它是C,那就更好了。我不需要“绘制”图形,我只需要知道CPU正在执行什么线程以及执行多长时间。谢谢!

编辑:我刚发现nptl trace tool,如果有的话,我会看到他们正在做的事情,并根据我的需要进行调整。

1 个答案:

答案 0 :(得分:2)

在不涉及内核的情况下这样做很难

制作图表的最佳方法是让内核在调度流程时记录更改(由于大多数操作系统都具有软关联性并且更喜欢将线程放在同一个核心上。)

也就是说,某些操作系统将此类统计信息导出到用户空间。例如,Linux有/proc/[pid]/statin that file,有一个名为processor的字段。

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