C 通过内核跟踪线程执行
假设我想画一个x轴上CPU“点击”(或挂钟时间)和y轴上线程执行的图形。例如,如果我有4个内核,我有4个y轴记号,x轴是时间,我想在内核执行线程时用红色绘制:我如何以编程方式收集信息?我想完全理解这个问题,所以我真的不需要使用TBB或任何IDE、Intel或其他的线程可视化。。。我只想理解一段简单的代码来实现这一点。语言不是一个问题,真的,但如果它是C,那就更好了。我不需要“绘制”图形,我只需要知道什么CPU正在执行什么线程以及执行多长时间。谢谢C 通过内核跟踪线程执行,c,multithreading,multicore,C,Multithreading,Multicore,假设我想画一个x轴上CPU“点击”(或挂钟时间)和y轴上线程执行的图形。例如,如果我有4个内核,我有4个y轴记号,x轴是时间,我想在内核执行线程时用红色绘制:我如何以编程方式收集信息?我想完全理解这个问题,所以我真的不需要使用TBB或任何IDE、Intel或其他的线程可视化。。。我只想理解一段简单的代码来实现这一点。语言不是一个问题,真的,但如果它是C,那就更好了。我不需要“绘制”图形,我只需要知道什么CPU正在执行什么线程以及执行多长时间。谢谢 编辑:我刚刚发现,如果有什么问题,我会看到他们在
编辑:我刚刚发现,如果有什么问题,我会看到他们在做什么,并根据我的需要进行调整。在不涉及内核的情况下这样做将很困难 绘制图形的最佳方法是让内核在调度进程时记录更改(它不必做很多更改,因为大多数操作系统都具有软关联,并且更喜欢在同一个内核上保留线程) 也就是说,一些操作系统将此类统计数据导出到用户空间。例如,Linux有
/proc/[pid]/stat
,有一个名为处理器的字段
要了解(模糊的)线程在任何给定时刻发生的情况,您可以监视/proc/self/task/*/stat
中的文件。是否已经有无数程序可以这样做?我认为这样做不行。OP可能需要使用perf或kernelshark之类的东西。