This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Stap scripts to track task cpu changes


Hello William,

> Subject: Re: Stap scripts to track task cpu changes
> Date: Thursday 09 Jul 2009
> From: William Cohen <wcohen@redhat.com>
> To: Ankita Garg <ankita@in.ibm.com>, systemtap@sources.redhat.com, 
> prerna@linux.vnet.ibm.com
> 
> Ankita Garg wrote:
> > Hello folks,
> > 
> > Quite sometime back, I was faced with a situation where I needed to
> > track instances when a particular task was being migrated away from a
> > cpu. I used the following trivial script. The tid needs to be passed as
> > parameter. Sharing it, hoping it might be useful for some folks.
> 
> I would like to add these example to the systemtap examples. I have looked
> through them and made some tweaks. For both of them I formatted them not to 
> use
> tabs so they can used in documentation.
> 

Thanks for making the required formatting changes.

> For chng_cpu.stp use the appropriate probe point, scheduler.cpu_on.  Why the
> check for "tid() != 0"?
> 
> For migrate.stp The check "$1 != 0" seemed to be unneeded. Was there a reason
> for using $p->pid and kernel_string($p->comm) rather tid() and execname()?  
> The
> test is using "tid() == $1"
>

True, the checks for tid() !=0 seem unneccesary. In migrate.stp (ie in
function __migrate_task), the task being migrated need not be the
current task. Hence, using $p->pid and $p->comm, where $p is the task being
migrated.
 
> -Will

> /*    Filename: chng_cpu.stp
>  *      Author: Ankita Garg <ankita@in.ibm.com>
>  * Description: Captures information on the number of times an executable
>  * switches cpu
>  *
>  * This program is free software; you can redistribute it and/or modify
>  * it under the terms of the GNU General Public License as published by
>  * the Free Software Foundation; either version 2 of the License, or
>  * (at your option) any later version.
>  *
>  * This program is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * GNU General Public License for more details.
>  *
>  * Copyright (C) IBM Corp. 2009.  All Rights Reserved.
>  *
>  */
> 
> global threads
> 
> probe scheduler.cpu_on
> {
>   if ((threads[tid()] != cpu()) && (tid() != 0) && (execname() == @1)) {
>     printf("thread %d (%s) context switched on %d \n",
>            tid(), execname(), cpu());
>     printf("state: %d\n", task_state(task_current()))
>     print_stack(backtrace())
>   }
>   threads[tid()] = cpu();
> }

> /*    Filename: migrate.stp
>  *      Author: Ankita Garg <ankita@in.ibm.com>
>  * Description: Captures information on the migration of a thread
>  *
>  * This program is free software; you can redistribute it and/or modify
>  * it under the terms of the GNU General Public License as published by
>  * the Free Software Foundation; either version 2 of the License, or
>  * (at your option) any later version.
>  *
>  * This program is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>  * GNU General Public License for more details.
>  *
>  * Copyright (C) IBM Corp. 2009.  All Rights Reserved.
>  *
> */
> 
> probe kernel.function("__migrate_task")
> {
>   if(tid() == $1) {
>     printf ("thread %d (%s) is migrating from %d to %d \n",
>             $p->pid, kernel_string($p->comm), $src_cpu, $dest_cpu);
>   }
> }


-- 
Regards,
Ankita Garg (ankita@in.ibm.com)
Linux Technology Center
IBM India Systems & Technology Labs, 
Bangalore, India   


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]