[PATCH] cyclictest: Add tracing function about wakeup and wakeup_rt.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Clark williams,

I read "cyclictest: handle latest ftrace" log at the
http://git.kernel.org/?p=linux/kernel/git/clrkwllms/rt-tests.git;a=commit;h=9ba30e6ef2e2975ca27834e8968393ca5b07da29 webpage.
 
This is patch to support wakeup & wakeup_rt tracing at the argument of cyclictest additionally.
Currently, current cyclictest support three tracing like PREEMPTOFF, IRQSOFF, PREEMPTIRQSOFF just.

Please, Append WAKEUP & WAKEUP_RT tracing at the current cyclictest version.
This additional function will help wakeup related tracing about sleep api [ex: nanosleep() , usleep] 
of cyclictest.

After patching,
Fedora9#> cat /debug/tracing/available_tracers
syscall blk kmemtrace power branch function_graph mmiotrace wakeup_rt wakeup preemptirqsoff 
preemptoff irqsoff function sched_switch initcall nop
Fedora9#> cyclictest -t 5 -p 80 -b 1000 -w -D 10 [enter] <--- tracing wakeup
Fedora9#> cat /debug/tracing/trace

Fedora9#> cyclictest -t 5 -p 80 -b 1000 -W -D 10 [enter] <--- tracing wakeup-rt
Fedora9#> cat /debug/tracing/trace


# tracer: wakeup
#
# wakeup latency trace v1.1.5 on 2.6.29.1-rt7-ftrace
# --------------------------------------------------------------------
# latency: 1797 us, #4/4, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
#    -----------------
#    | task: desched/3-54 (uid:0 nice:-10 policy:0 rt_prio:0)
#    -----------------
#
#                  _------=> CPU#            
#                 / _-----=> irqs-off        
#                | / _----=> need-resched    
#                || / _---=> hardirq/softirq 
#                ||| / _--=> preempt-depth   
#                |||| /                      
#                |||||     delay             
#  cmd     pid   ||||| time  |   caller      
#     \   /      |||||   \   |   /           
     gcc-29530   3d..4    0us :  29530:120:R   + [003]    54:110:D desched/3
     gcc-29530   3d..4    1us!: wake_up_process <-__mmdrop_delayed
     gcc-29530   3d..3 1797us : do_exit <-sys_exit_group
     gcc-29530   3d..3 1798us :  29530:120:? ==> [003]    54:110:R desched/3

    Fedora9#> cyclictest -t 5 -p 80 -b 1000 -W -D 10 [enter] <--- tracing wake up rt
    Fedora9#> cat /debug/tracing/trace

    Fedora9#> cat trace
# tracer: wakeup_rt
#
# wakeup_rt latency trace v1.1.5 on 2.6.29.1-rt7-ftrace
# --------------------------------------------------------------------
# latency: 129 us, #86/86, CPU#2 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
#    -----------------
#    | task: sirq-timer/2-32 (uid:0 nice:-5 policy:1 rt_prio:50)
#    -----------------
#
#                  _------=> CPU#            
#                 / _-----=> irqs-off        
#                | / _----=> need-resched    
#                || / _---=> hardirq/softirq 
#                ||| / _--=> preempt-depth   
#                |||| /                      
#                |||||     delay             
#  cmd     pid   ||||| time  |   caller      
#     \   /      |||||   \   |   /           
  <idle>-0       2d.h3    1us :      0:140:R   + [002]    32: 49:D sirq-timer/2
  <idle>-0       2d.h3    2us+: wake_up_process <-wakeup_softirqd
  <idle>-0       2d.h2    3us : check_preempt_curr_idle <-try_to_wake_up
  <idle>-0       2d.h2    5us : resched_task <-check_preempt_curr_idle
  <idle>-0       2dNh2    6us+: task_wake_up_rt <-try_to_wake_up
  <idle>-0       2dNh2    8us+: __spin_unlock_irqrestore <-try_to_wake_up
  <idle>-0       2dNh1   10us : preempt_schedule <-__spin_unlock_irqrestore
  <idle>-0       2dNh1   11us : softlockup_tick <-run_local_timers
  <idle>-0       2dNh1   12us+: __touch_softlockup_watchdog <-softlockup_tick
  <idle>-0       2dNh1   14us : rcu_pending <-update_process_times
  <idle>-0       2dNh1   15us : rcu_check_callbacks <-update_process_times
  <idle>-0       2dNh1   16us : idle_cpu <-rcu_check_callbacks
  <idle>-0       2dNh1   17us+: __spin_lock_irqsave <-rcu_check_callbacks
  <idle>-0       2dNh2   20us : __rcu_advance_callbacks <-rcu_check_callbacks
  <idle>-0       2dNh2   21us : __spin_unlock_irqrestore <-rcu_check_callbacks
  <idle>-0       2dNh1   22us : preempt_schedule <-__spin_unlock_irqrestore
  <idle>-0       2dNh1   23us+: run_posix_cpu_timers <-update_process_times
  <idle>-0       2dNh1   25us+: hrtimer_forward <-tick_sched_timer
  <idle>-0       2dNh1   26us : ktime_add_safe <-hrtimer_forward
  <idle>-0       2dNh1   28us : ktime_add_safe <-hrtimer_forward
  <idle>-0       2dNh1   29us+: __spin_lock <-__run_hrtimer
  <idle>-0       2dNh2   31us+: enqueue_hrtimer <-__run_hrtimer
  <idle>-0       2dNh2   33us : __spin_unlock <-hrtimer_interrupt
  <idle>-0       2dNh1   35us+: preempt_schedule <-__spin_unlock
  <idle>-0       2dNh1   36us+: tick_program_event <-hrtimer_interrupt
  <idle>-0       2dNh1   38us : tick_dev_program_event <-tick_program_event
  <idle>-0       2dNh1   39us : ktime_get <-tick_dev_program_event
  <idle>-0       2dNh1   40us+: ktime_get_ts <-ktime_get
  <idle>-0       2dNh1   41us+: getnstimeofday <-ktime_get_ts
  <idle>-0       2dNh1   44us+: set_normalized_timespec <-ktime_get_ts
  <idle>-0       2dNh1   45us : clockevents_program_event <-tick_dev_program_event
  <idle>-0       2dNh1   46us+: lapic_next_event <-clockevents_program_event
  <idle>-0       2dNh1   48us+: native_apic_mem_write <-lapic_next_event
  <idle>-0       2dNh1   50us+: perf_counter_unthrottle <-smp_apic_timer_interrupt
  <idle>-0       2dNh1   52us+: irq_exit <-smp_apic_timer_interrupt
  <idle>-0       2dN.2   54us+: do_softirq <-irq_exit
  <idle>-0       2d...   56us+: __do_softirq <-do_softirq
  <idle>-0       2d...   58us : trigger_softirqs <-__do_softirq
  <idle>-0       2d...   59us+: wakeup_softirqd <-trigger_softirqs
  <idle>-0       2dN.2   61us+: rcu_irq_exit <-irq_exit
  <idle>-0       2dN.2   62us+: idle_cpu <-irq_exit
  <idle>-0       2dN.1   64us+: tick_nohz_restart_sched_tick <-cpu_idle
  <idle>-0       2dN.1   66us : tick_nohz_stop_idle <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   68us : rcu_exit_nohz <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   69us+: select_nohz_load_balancer <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   70us+: ktime_get <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   72us+: ktime_get_ts <-ktime_get
  <idle>-0       2dN.1   74us+: getnstimeofday <-ktime_get_ts
  <idle>-0       2dN.1   76us+: set_normalized_timespec <-ktime_get_ts
  <idle>-0       2dN.1   78us+: tick_do_update_jiffies64 <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   80us : account_idle_ticks <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   80us : account_idle_time <-account_idle_ticks
  <idle>-0       2dN.1   81us : touch_softlockup_watchdog <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   82us : hrtimer_cancel <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   83us : hrtimer_try_to_cancel <-hrtimer_cancel
  <idle>-0       2dN.1   85us+: lock_hrtimer_base <-hrtimer_try_to_cancel
  <idle>-0       2dN.1   86us+: __spin_lock_irqsave <-lock_hrtimer_base
  <idle>-0       2dN.2   88us : __remove_hrtimer <-hrtimer_try_to_cancel
  <idle>-0       2dN.2   89us+: __spin_unlock_irqrestore <-hrtimer_try_to_cancel
  <idle>-0       2dN.1   91us : preempt_schedule <-__spin_unlock_irqrestore
  <idle>-0       2dN.1   92us : hrtimer_forward <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   94us+: ktime_add_safe <-hrtimer_forward
  <idle>-0       2dN.1   95us+: ktime_add_safe <-hrtimer_forward
  <idle>-0       2dN.1   97us : hrtimer_start_range_ns <-tick_nohz_restart_sched_tick
  <idle>-0       2dN.1   98us : __hrtimer_start_range_ns <-hrtimer_start_range_ns
  <idle>-0       2dN.1  100us : lock_hrtimer_base <-__hrtimer_start_range_ns
  <idle>-0       2dN.1  101us+: __spin_lock_irqsave <-lock_hrtimer_base
  <idle>-0       2dN.2  103us+: ktime_add_safe <-__hrtimer_start_range_ns
  <idle>-0       2dN.2  104us : enqueue_hrtimer <-__hrtimer_start_range_ns
  <idle>-0       2dN.2  106us : __spin_unlock_irqrestore <-__hrtimer_start_range_ns
  <idle>-0       2dN.1  107us : preempt_schedule <-__spin_unlock_irqrestore
  <idle>-0       2.N..  108us : __schedule <-cpu_idle
  <idle>-0       2.N..  110us+: rcu_qsctr_inc <-__schedule
  <idle>-0       2.N.1  112us+: __spin_lock_irq <-__schedule
  <idle>-0       2d..2  115us : put_prev_task_idle <-__schedule
  <idle>-0       2d..2  116us+: pick_next_task_rt <-__schedule
  <idle>-0       2d..2  119us : perf_counter_task_sched_out <-__schedule
  <idle>-0       2d..2  120us : perf_swcounter_event <-perf_counter_task_sched_out
  <idle>-0       2d..2  121us+: __perf_swcounter_event <-perf_swcounter_event
  <idle>-0       2d..3  123us : perf_swcounter_ctx_event <-__perf_swcounter_event
  <idle>-0       2d..3  124us : perf_swcounter_ctx_event <-__perf_swcounter_event
  <idle>-0       2d..2  125us : __perf_counter_sched_out <-perf_counter_task_sched_out
  <idle>-0       2d..2  126us : __spin_lock <-__perf_counter_sched_out
  <idle>-0       2d..3  128us+: __spin_unlock <-__perf_counter_sched_out
  <idle>-0       2d..3  129us : cpu_idle <-start_secondary
  <idle>-0       2d..3  130us :      0:140:R ==> [002]    32: 49:R sirq-timer/2
    Fedora9#> 
    Fedora9#> 
    Fedora9#> 

-------------------------------------------------------

Author: Lim,GeunSik <leemgs1@xxxxxxxxx>
Date:   Fri Apr 24 10:13:55 2009 +0900

    [PATCH] cyclictest: Add tracing function about wakeup and wakeup_rt of ftrace.
    
    This is patch to support wakeup & wakeup_rt tracing at the argument of
    cyclictest additionally. Current cyclictest support three tracing
    like PREEMPTOFF, IRQSOFF, PREEMPTIRQSOFF just.
    
    This additional function will help wakeup related tracing
    about sleep api [ex: nanosleep() , usleep] of cyclictest.

    Practically speaking, wakeup(+wakeup-rt) tracing by steven rostedt is useful 
    in the linux based embedded product development.
    
    After patching,
    Fedora9#> cat /debug/tracing/available_tracers
    syscall blk kmemtrace power branch function_graph mmiotrace wakeup_rt wakeup \
    preemptirqsoff preemptoff irqsoff function sched_switch initcall nop
    Fedora9#> cyclictest -t 5 -p 80 -b 1000 -w -D 10 [enter] <--- tracing wakeup
    Fedora9#> cat /debug/tracing/trace
    
    Fedora9#> cyclictest -t 5 -p 80 -b 1000 -W -D 10 [enter] <--- tracing wakeup-rt
    Fedora9#> cat /debug/tracing/trace
    
        Signed-off-by: GeunSik Lim <geunsik.lim@xxxxxxxxxxx>

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index 884f2c3..93b895b 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -93,6 +93,8 @@ enum {
 	IRQSOFF,
 	PREEMPTOFF,
 	IRQPREEMPTOFF,
+	WAKEUP,
+	WAKEUPRT,
 };
 
 #define HIST_MAX		1000000
@@ -415,6 +417,13 @@ static void setup_tracer(void)
 		case CTXTSWITCH:
 			ret = settracer("sched_switch");
 			break;
+               case WAKEUP:
+                       ret = settracer("wakeup");
+                       break;
+               case WAKEUPRT:
+                       ret = settracer("wakeup_rt");
+                       break;
+
 		default:
 			printf("cyclictest: unknown tracer!\n");
 			ret = 0;
@@ -711,6 +720,9 @@ static void display_help(void)
 	       "                           to modify value to minutes, hours or days\n"
 	       "-h       --histogram=US    dump a latency histogram to stdout after the run\n"
 	       "                           US is the max time to be be tracked in microseconds\n"
+               "-w       --wakeup          rt task wakeup tracing (used with -b)\n"
+               "-W       --wakeuprt        non_rt task wakeup_rt tracing (used with -b)\n"
+
 		);
 	exit(0);
 }
@@ -773,10 +785,12 @@ static void process_options (int argc, char *argv[])
 			{"threads", optional_argument, NULL, 't'},
 			{"verbose", no_argument, NULL, 'v'},
 			{"duration",required_argument, NULL, 'D'},
+                        {"wakeup", no_argument, NULL, 'w'},
+                        {"wakeuprt", no_argument, NULL, 'W'},
 			{"help", no_argument, NULL, '?'},
 			{NULL, 0, NULL, 0}
 		};
-		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:p:Pmqrst::vD:",
+		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:p:Pmqrst::vD:wW:",
 			long_options, &option_index);
 		if (c == -1)
 			break;
@@ -821,8 +835,9 @@ static void process_options (int argc, char *argv[])
 			break;
 		case 'v': verbose = 1; break;
 		case 'm': lockall = 1; break;
-		case 'D': duration = parse_time_string(optarg);
-			break;
+		case 'D': duration = parse_time_string(optarg); break;
+                case 'w': tracetype = WAKEUP; break;
+                case 'W': tracetype = WAKEUPRT; break;
 		case '?': error = 1; break;
 		}
 	}


Best regards,
GeunSik Lim.

-----------------------------------------------
To unsubscribe from this list: send the line "unsubscribe linux-***" 
in the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

GeunSik Lim (ELS - OS Group - S/W Lab - SAIT - SAMSUNG)
e-Mail  :1) geunsik.lim@xxxxxxxxxxx
         2) leemgs@xxxxxxxxx , leemgs1@xxxxxxxxx
HomePage: http://intomail.dnip.net/invain/me/
-----------------------------------------------
Author: Lim,GeunSik <leemgs1@xxxxxxxxx>
Date:   Fri Apr 24 10:13:55 2009 +0900

    [PATCH] cyclictest: Add tracing function about wakeup and wakeup_rt of ftrace.
    
    This is patch to support wakeup & wakeup_rt tracing at the argument of
    cyclictest additionally. Current cyclictest support three tracing
    like PREEMPTOFF, IRQSOFF, PREEMPTIRQSOFF just.
    
    This additional function will help wakeup related tracing
    about sleep api [ex: nanosleep() , usleep] of cyclictest.

    Practically speaking, wakeup(+wakeup-rt) tracing by steven rostedt is useful 
    in the linux based embedded product development.
    
    After patching,
    Fedora9#> cat /debug/tracing/available_tracers
    syscall blk kmemtrace power branch function_graph mmiotrace wakeup_rt wakeup \
    preemptirqsoff preemptoff irqsoff function sched_switch initcall nop
    Fedora9#> cyclictest -t 5 -p 80 -b 1000 -w -D 10 [enter] <--- tracing wakeup
    Fedora9#> cat /debug/tracing/trace
    
    Fedora9#> cyclictest -t 5 -p 80 -b 1000 -W -D 10 [enter] <--- tracing wakeup-rt
    Fedora9#> cat /debug/tracing/trace
    
        Signed-off-by: GeunSik Lim <geunsik.lim@xxxxxxxxxxx>

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index 884f2c3..93b895b 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -93,6 +93,8 @@ enum {
 	IRQSOFF,
 	PREEMPTOFF,
 	IRQPREEMPTOFF,
+	WAKEUP,
+	WAKEUPRT,
 };
 
 #define HIST_MAX		1000000
@@ -415,6 +417,13 @@ static void setup_tracer(void)
 		case CTXTSWITCH:
 			ret = settracer("sched_switch");
 			break;
+               case WAKEUP:
+                       ret = settracer("wakeup");
+                       break;
+               case WAKEUPRT:
+                       ret = settracer("wakeup_rt");
+                       break;
+
 		default:
 			printf("cyclictest: unknown tracer!\n");
 			ret = 0;
@@ -711,6 +720,9 @@ static void display_help(void)
 	       "                           to modify value to minutes, hours or days\n"
 	       "-h       --histogram=US    dump a latency histogram to stdout after the run\n"
 	       "                           US is the max time to be be tracked in microseconds\n"
+               "-w       --wakeup          rt task wakeup tracing (used with -b)\n"
+               "-W       --wakeuprt        non_rt task wakeup_rt tracing (used with -b)\n"
+
 		);
 	exit(0);
 }
@@ -773,10 +785,12 @@ static void process_options (int argc, char *argv[])
 			{"threads", optional_argument, NULL, 't'},
 			{"verbose", no_argument, NULL, 'v'},
 			{"duration",required_argument, NULL, 'D'},
+                        {"wakeup", no_argument, NULL, 'w'},
+                        {"wakeuprt", no_argument, NULL, 'W'},
 			{"help", no_argument, NULL, '?'},
 			{NULL, 0, NULL, 0}
 		};
-		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:p:Pmqrst::vD:",
+		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:p:Pmqrst::vD:wW:",
 			long_options, &option_index);
 		if (c == -1)
 			break;
@@ -821,8 +835,9 @@ static void process_options (int argc, char *argv[])
 			break;
 		case 'v': verbose = 1; break;
 		case 'm': lockall = 1; break;
-		case 'D': duration = parse_time_string(optarg);
-			break;
+		case 'D': duration = parse_time_string(optarg); break;
+                case 'w': tracetype = WAKEUP; break;
+                case 'W': tracetype = WAKEUPRT; break;
 		case '?': error = 1; break;
 		}
 	}

[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux