Reputation: 20140
Suppose I would like to draw a graph with CPU "clicks" (or wall-clock time) on the x-axis, and thread execution on the y-axis. So, for example, if I have 4 cores, I have 4 y-axis ticks, x-axis is time, and I'd like to plot, say, in red, when a core is executing that thread: how can I programmatically gather the information to do that? I would like to understand the problem fully, so I don't really need to use TBB or the thread visualization of any IDE, Intel or otherwise... I'd just like to understand a simple piece of code that does this. Language is not an issue, really, but if it is C, so much better. I don't need to "draw" the graph, I just need to know what CPU is executing what thread and for how long. Thanks!
EDIT: I just found nptl trace tool, if anything I will see what they're doing and adjust to my needs.
Upvotes: 3
Views: 202
Reputation: 182734
Doing this without involving the kernel will be hard.
The best way to make the graph would be to have the kernel log the changes as it schedules a process (it won't have to make a lot of changes as most operating systems have a soft affinity and prefer to keep a thread on the same core).
That said, some operating systems export such statistics to user-space. For example Linux has /proc/[pid]/stat
and in that file there is a field called processor
.
To get an idea (a vague one) of what is happening to your threads at any given moment you can monitor the files in /proc/self/task/*/stat
.
Upvotes: 2