How to measure time spent in context switch
How to measure time spent in context switch in Linux i.e. the time the application stays suspended while the kernel is doing something else. I don't want to use any profiling tools. What approach should I take to write my own C code, which can also run as kernel module if required, to measure time spent accurately. Will it also require to modify the scheduler code? Does /proc gives any statistics in this regard? Ref: http://stackoverflow.com/questions/2368384/write-a-c-program-to-measure-time... -- Manavendra Nath Manav
Hi Manavendra Have you think in a driver that you can call when the context switch happen? If this can be detected (more investigation on this area is required). If that is possible we can create the driver to measure the time according to the interruption. Thanks a lot and regards Victor Rodriguez On Mon, Jul 16, 2012 at 2:28 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
How to measure time spent in context switch in Linux i.e. the time the application stays suspended while the kernel is doing something else. I don't want to use any profiling tools. What approach should I take to write my own C code, which can also run as kernel module if required, to measure time spent accurately. Will it also require to modify the scheduler code? Does /proc gives any statistics in this regard?
Ref: http://stackoverflow.com/questions/2368384/write-a-c-program-to-measure-time...
-- Manavendra Nath Manav _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Tue, Jul 17, 2012 at 1:20 AM, Victor Rodriguez <vm.rod25@gmail.com> wrote:
Hi Manavendra
Have you think in a driver that you can call when the context switch happen? If this can be detected (more investigation on this area is required). If that is possible we can create the driver to measure the time according to the interruption.
Thanks a lot and regards
Victor Rodriguez
On Mon, Jul 16, 2012 at 2:28 PM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
How to measure time spent in context switch in Linux i.e. the time the application stays suspended while the kernel is doing something else. I don't want to use any profiling tools. What approach should I take to write my own C code, which can also run as kernel module if required, to measure time spent accurately. Will it also require to modify the scheduler code? Does /proc gives any statistics in this regard?
Ref: http://stackoverflow.com/questions/2368384/write-a-c-program-to-measure-time...
-- Manavendra Nath Manav _______________________________________________
Hi Victor I was thinking something in these terms: 1) Process is executing a non-critical section like a bottom-half. 2) At Nth line of code, I will measure the timestamp. 3) At (N+1)th line of code, I will voluntarily call schedule() to do context switch. 4) At (N+2)th, I will measure the timestamp, and calculate the time difference. Although the above procedure will measure context switch time statically and not dynamically, it can give a fair idea but for multi-core processors this measurement will heavily deviate from accuracy. If we can set scheduler() process affinity to one single core, will it affect the measurements and predictability of context switches? -- Manavendra Nath Manav
Hi... :) Sorry for jumping in... On Tue, Jul 17, 2012 at 3:09 AM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote: ......
If we can set scheduler() process affinity to one single core, will it affect the measurements and predictability of context switches?
I think it will affect, up to some unknown degree. On inter processor scheduling, there would happen cache remote invalidation and process task_struct transfer (IIRC process descripter is per cpu). -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
Hi... On Tue, Jul 17, 2012 at 2:28 AM, Manavendra Nath Manav <mnm.kernel@gmail.com> wrote:
How to measure time spent in context switch in Linux i.e. the time the application stays suspended while the kernel is doing something else. I don't want to use any profiling tools. What approach should I take to write my own C code, which can also run as kernel module if required, to measure time spent accurately. Will it also require to modify the scheduler code? Does /proc gives any statistics in this regard?
IMHO, you need to mimic how lmbench does it. And AFAIK too, what you are going to do is very much what lmbench does. But please check their code for better understanding. -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
participants (3)
-
Manavendra Nath Manav -
Mulyadi Santosa -
Victor Rodriguez