[lkml]   [2010]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH] workqueue: Add basic tracepoints to track workqueue execution
On Mon, Aug 23, 2010 at 11:46:18AM +0200, Tejun Heo wrote:
> Hello,
> On 08/22/2010 06:01 AM, Frederic Weisbecker wrote:
> > On Sat, Aug 21, 2010 at 01:14:02PM -0700, Arjan van de Ven wrote:
> >>
> >> From: Arjan van de Ven <>
> >> Date: Sat, 21 Aug 2010 13:07:26 -0700
> >> Subject: [PATCH] workqueue: Add basic tracepoints to track workqueue execution
> >>
> >> With the introduction of the new unified work queue thread pools,
> >> we lost one feature: It's no longer possible to know which worker
> >> is causing the CPU to wake out of idle. The result is that PowerTOP
> >> now reports a lot of "kworker/a:b" instead of more readable results.
> >>
> >> This patch adds a pair of tracepoints to the new workqueue code,
> >> similar in style to the timer/hrtimer tracepoints.
> >>
> >> With this pair of tracepoints, the next PowerTOP can correctly
> >> report which work item caused the wakeup (and how long it took):
> >>
> >> Interrupt (43) i915 time 3.51ms wakeups 141
> >> Work ieee80211_iface_work time 0.81ms wakeups 29
> >> Work do_dbs_timer time 0.55ms wakeups 24
> >> Process Xorg time 21.36ms wakeups 4
> >> Timer sched_rt_period_timer time 0.01ms wakeups 1
> >>
> >> Signed-off-by: Arjan van de Ven <>
> >
> > Ok, Linus applied it. That answers my doubts about the
> > route for this patch :)
> I was planning to work on wq tracing in this devel cycle but yeah
> Arjan's patch seems like a good starting place.
> We definitely need more tracing points tho. Also, David was wondering
> whether it would be possible to have simple file based interface to
> monitor the current status of workers. That's doable w/ tracing API,
> right?

Yeah but the ftrace API that handles statistics is a very basic thing.
It works well for measuring entities that won't be freed, like
for branch and function profiling for example.
But once you deal with entities that can disappear (like workqueue threads),
you need to handle all the locking by yourself.

You can have a look at kernel/trace/trace_workqueue.c. It's broken
as we have removed some workqueue tracepoints, so I planned to
remove it. It's a basic thing but perhaps you can restart from there.

I think there was also a race between reader and writer. A stat node
probably need to be read under rcu (and freed after a grace period).

 \ /
  Last update: 2010-08-27 15:17    [W:0.049 / U:0.280 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site