Dervin Thunk
Dervin Thunk

Reputation: 20140

Tracking thread execution by core

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

Answers (1)

cnicutar
cnicutar

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

Related Questions