[ltt-dev] [patch] add tracepoints to trace activate/deactivate task

Jason Baron jbaron at redhat.com
Tue Dec 9 16:29:12 EST 2008


On Tue, Dec 09, 2008 at 04:00:48PM -0500, Jason Baron wrote:
> > On Mon, 2008-12-08 at 17:38 -0500, Jason Baron wrote:
> > > On Mon, Dec 08, 2008 at 08:54:10PM +0100, Peter Zijlstra wrote:
> > > > On Mon, 2008-12-08 at 14:49 -0500, Jason Baron wrote:
> > > > > hi,
> > > > > 
> > > > > I thought it would be useful to track when a task is
> > > > > 'activated/deactivated'. This case is different from wakeup/wait, in that
> > > > > task can be activated and deactivated, when the scheduler re-balances
> > > > > tasks, the allowable cpuset changes, or cpu hotplug occurs. Using these
> > > > > patches I can more precisely figure out when a task becomes runnable and
> > > > > why. 
> > > > 
> > > > Then I still not agree with it because it does not expose the event that
> > > > did the change.
> > > > 
> > > > If you want the cpu allowed mask, put a tracepoint there. If you want
> > > > migrate information (didn't we have that?) then put one there, etc.
> > > > 
> > > 
> > > well, with stap backtrace I can figure out the event, otherwise i'm
> > > sprinkling 14 more trace events in the scheduler...I can go down that
> > > patch if people think its better?
> > 
> > what events are you interested in? some of them are just straight
> > syscall things like nice.
> > 
> > But yes, I'd rather you'd do the events - that's what tracepoints are
> > all about, marking indivudual events, not some fugly hook for stap.
> 
> well, i think that the activate/deactivate combination gives you a lot
> of interesting statistics. You could figure out how long tasks wait on
> the runqueue, when and how tasks are migrated between runqueues, queue
> lengths, average queue lengths, large queues lengths. These statistics
> could help diagnose performance problems.
> 
> For example, i just wrote the systemtap script below which outputs the 
> distribution of queue lengths per-cpu on my system. I'm sure Frank could 
> improve the stap code, but below is the script and the output.

ok, a couple suggestions from Frank I now get:

cpu: 0
value |-------------------------------------------------- count
    0 |@@@@@@@@                                            8460
    1 |@@@@@@@@@@@@@@@@@@@@                               19346
    2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  47466
    4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@                        26154
    8 |                                                     357
   16 |                                                       0
   32 |                                                       0

cpu: 2
value |-------------------------------------------------- count
    0 |@@@@@@@                                             6101
    1 |@@@@@@@@@@@@@@@@@@                                 14782
    2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  39206
    4 |@@@@@@@@@@@@@@@@@@@@@@@@                           18968
    8 |                                                     369
   16 |                                                       0
   32 |                                                       0

cpu: 1
value |-------------------------------------------------- count
    0 |@@@@@@@                                             6488
    1 |@@@@@@@@@@@@@@@@@@@                                16540
    2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  43027
    4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@                        23262
    8 |                                                     337
   16 |                                                       0
   32 |                                                       0

cpu: 3
value |-------------------------------------------------- count
    0 |@@@@@@@                                             5991
    1 |@@@@@@@@@@@@@@@@@@@                                14808
    2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  38258
    4 |@@@@@@@@@@@@@@@@@@@@@@@@@                          19172
    8 |                                                     323
   16 |                                                       0
   32 |                                                       0

script:

#!/usr/bin/env stap  
#

global cpu_queue_distribution
global current_queue_length

/* process added into runqueue : really running or well prepared */
probe kernel.mark("kernel_activate_task"){
	cpu_queue_distribution[$arg3] <<<
			(++current_queue_length[$arg3]);
}

/* process removed from runqueue : in wait queue or other state */
probe kernel.mark("kernel_deactivate_task") {
	if(current_queue_length[$arg3])
		cpu_queue_distribution[$arg3] <<<
			(--current_queue_length[$arg3]);
}
	
probe end{
	foreach (cpu in cpu_queue_distribution) { 
		printf("cpu: %d\n", cpu);
		print(@hist_log(cpu_queue_distribution[cpu]));
	}
}






More information about the lttng-dev mailing list