@@ -401,8 +401,135 @@ timerlat_print_summary(struct timerlat_hist_params *params,
401401 trace_seq_reset (trace -> seq );
402402}
403403
404+ static void
405+ timerlat_print_stats_all (struct timerlat_hist_params * params ,
406+ struct trace_instance * trace ,
407+ struct timerlat_hist_data * data )
408+ {
409+ struct timerlat_hist_cpu * cpu_data ;
410+ struct timerlat_hist_cpu sum ;
411+ int cpu ;
412+
413+ if (params -> no_summary )
414+ return ;
415+
416+ memset (& sum , 0 , sizeof (sum ));
417+ sum .min_irq = ~0 ;
418+ sum .min_thread = ~0 ;
419+ sum .min_user = ~0 ;
420+
421+ for (cpu = 0 ; cpu < data -> nr_cpus ; cpu ++ ) {
422+ if (params -> cpus && !CPU_ISSET (cpu , & params -> monitored_cpus ))
423+ continue ;
424+
425+ if (!data -> hist [cpu ].irq_count && !data -> hist [cpu ].thread_count )
426+ continue ;
427+
428+ cpu_data = & data -> hist [cpu ];
429+
430+ sum .irq_count += cpu_data -> irq_count ;
431+ update_min (& sum .min_irq , & cpu_data -> min_irq );
432+ update_sum (& sum .sum_irq , & cpu_data -> sum_irq );
433+ update_max (& sum .max_irq , & cpu_data -> max_irq );
434+
435+ sum .thread_count += cpu_data -> thread_count ;
436+ update_min (& sum .min_thread , & cpu_data -> min_thread );
437+ update_sum (& sum .sum_thread , & cpu_data -> sum_thread );
438+ update_max (& sum .max_thread , & cpu_data -> max_thread );
439+
440+ sum .user_count += cpu_data -> user_count ;
441+ update_min (& sum .min_user , & cpu_data -> min_user );
442+ update_sum (& sum .sum_user , & cpu_data -> sum_user );
443+ update_max (& sum .max_user , & cpu_data -> max_user );
444+ }
445+
446+ if (!params -> no_index )
447+ trace_seq_printf (trace -> seq , "ALL: " );
448+
449+ if (!params -> no_irq )
450+ trace_seq_printf (trace -> seq , " IRQ" );
451+
452+ if (!params -> no_thread )
453+ trace_seq_printf (trace -> seq , " Thr" );
454+
455+ if (params -> user_hist )
456+ trace_seq_printf (trace -> seq , " Usr" );
457+
458+ trace_seq_printf (trace -> seq , "\n" );
459+
460+ if (!params -> no_index )
461+ trace_seq_printf (trace -> seq , "count:" );
462+
463+ if (!params -> no_irq )
464+ trace_seq_printf (trace -> seq , "%9d " ,
465+ sum .irq_count );
466+
467+ if (!params -> no_thread )
468+ trace_seq_printf (trace -> seq , "%9d " ,
469+ sum .thread_count );
470+
471+ if (params -> user_hist )
472+ trace_seq_printf (trace -> seq , "%9d " ,
473+ sum .user_count );
474+
475+ trace_seq_printf (trace -> seq , "\n" );
476+
477+ if (!params -> no_index )
478+ trace_seq_printf (trace -> seq , "min: " );
479+
480+ if (!params -> no_irq )
481+ trace_seq_printf (trace -> seq , "%9llu " ,
482+ sum .min_irq );
483+
484+ if (!params -> no_thread )
485+ trace_seq_printf (trace -> seq , "%9llu " ,
486+ sum .min_thread );
487+
488+ if (params -> user_hist )
489+ trace_seq_printf (trace -> seq , "%9llu " ,
490+ sum .min_user );
491+
492+ trace_seq_printf (trace -> seq , "\n" );
493+
494+ if (!params -> no_index )
495+ trace_seq_printf (trace -> seq , "avg: " );
496+
497+ if (!params -> no_irq )
498+ trace_seq_printf (trace -> seq , "%9llu " ,
499+ sum .sum_irq / sum .irq_count );
500+
501+ if (!params -> no_thread )
502+ trace_seq_printf (trace -> seq , "%9llu " ,
503+ sum .sum_thread / sum .thread_count );
504+
505+ if (params -> user_hist )
506+ trace_seq_printf (trace -> seq , "%9llu " ,
507+ sum .sum_user / sum .user_count );
508+
509+ trace_seq_printf (trace -> seq , "\n" );
510+
511+ if (!params -> no_index )
512+ trace_seq_printf (trace -> seq , "max: " );
513+
514+ if (!params -> no_irq )
515+ trace_seq_printf (trace -> seq , "%9llu " ,
516+ sum .max_irq );
517+
518+ if (!params -> no_thread )
519+ trace_seq_printf (trace -> seq , "%9llu " ,
520+ sum .max_thread );
521+
522+ if (params -> user_hist )
523+ trace_seq_printf (trace -> seq , "%9llu " ,
524+ sum .max_user );
525+
526+ trace_seq_printf (trace -> seq , "\n" );
527+ trace_seq_do_printf (trace -> seq );
528+ trace_seq_reset (trace -> seq );
529+ }
530+
404531/*
405- * timerlat_print_stats - print data for all CPUs
532+ * timerlat_print_stats - print data for each CPUs
406533 */
407534static void
408535timerlat_print_stats (struct timerlat_hist_params * params , struct osnoise_tool * tool )
@@ -485,6 +612,7 @@ timerlat_print_stats(struct timerlat_hist_params *params, struct osnoise_tool *t
485612 trace_seq_reset (trace -> seq );
486613
487614 timerlat_print_summary (params , trace , data );
615+ timerlat_print_stats_all (params , trace , data );
488616}
489617
490618/*
0 commit comments