void cleanup_upon_sig(int sig __attribute__((unused))) { time_t actual_duration; if (finished) return; finished = 1; rt_timer_stop(); rt_sem_delete(&display_sem); if (do_histogram || do_stats) dump_hist_stats(); time(&test_end); actual_duration = test_end - test_start; if (!test_duration) test_duration = actual_duration; gavgjitter /= (test_loops ?: 2)-1; printf("---|------------|------------|------------|--------|-------------------------\n" "RTS|%12ld|%12ld|%12ld|%8ld| %.2ld:%.2ld:%.2ld/%.2d:%.2d:%.2d\n", gminjitter, gavgjitter, gmaxjitter, goverrun, actual_duration / 3600,(actual_duration / 60) % 60,actual_duration % 60, test_duration / 3600,(test_duration / 60) % 60,test_duration % 60); if (histogram_avg) free(histogram_avg); if (histogram_max) free(histogram_max); if (histogram_min) free(histogram_min); exit(0); }
void cleanup(void) { time_t actual_duration; long gmaxj, gminj, gavgj; if (test_mode == USER_TASK) { rt_sem_delete(&display_sem); gavgjitter /= (test_loops > 1 ? test_loops : 2) - 1; gminj = rt_timer_tsc2ns(gminjitter); gmaxj = rt_timer_tsc2ns(gmaxjitter); gavgj = rt_timer_tsc2ns(gavgjitter); } else { struct rttst_overall_bench_res overall; overall.histogram_min = histogram_min; overall.histogram_max = histogram_max; overall.histogram_avg = histogram_avg; rt_dev_ioctl(benchdev, RTTST_RTIOC_TMBENCH_STOP, &overall); gminj = overall.result.min; gmaxj = overall.result.max; gavgj = overall.result.avg; goverrun = overall.result.overruns; } if (benchdev >= 0) rt_dev_close(benchdev); if (need_histo()) dump_hist_stats(); time(&test_end); actual_duration = test_end - test_start - WARMUP_TIME; if (!test_duration) test_duration = actual_duration; printf ("---|-----------|-----------|-----------|--------|------|-------------------------\n" "RTS|%11.3f|%11.3f|%11.3f|%8ld|%6u| %.2ld:%.2ld:%.2ld/%.2d:%.2d:%.2d\n", (double)gminj / 1000, (double)gavgj / 1000, (double)gmaxj / 1000, goverrun, max_relaxed, actual_duration / 3600, (actual_duration / 60) % 60, actual_duration % 60, test_duration / 3600, (test_duration / 60) % 60, test_duration % 60); if (max_relaxed > 0) printf( "Warning! some latency maxima may have been due to involuntary mode switches.\n" "Please contact [email protected]\n"); if (histogram_avg) free(histogram_avg); if (histogram_max) free(histogram_max); if (histogram_min) free(histogram_min); exit(0); }
void cleanup_upon_sig(int sig __attribute__((unused))) { time_t actual_duration; long gmaxj, gminj, gavgj; if (finished) return; finished = 1; if (!hard_timer_running) { rt_timer_stop(); } rt_sem_delete(&display_sem); if (do_histogram || do_stats) dump_hist_stats(); time(&test_end); actual_duration = test_end - test_start - WARMUP_TIME; if (!test_duration) test_duration = actual_duration; gavgjitter /= (test_loops > 1 ? test_loops : 2)-1; gminj = rt_timer_tsc2ns(gminjitter); gmaxj = rt_timer_tsc2ns(gmaxjitter); gavgj = rt_timer_tsc2ns(gavgjitter); printf("---|------------|------------|------------|--------|-------------------------\n" "RTS|%12ld|%12ld|%12ld|%8ld| %.2ld:%.2ld:%.2ld/%.2d:%.2d:%.2d\n", gminj, gavgj, gmaxj, goverrun, actual_duration / 3600, (actual_duration / 60) % 60, actual_duration % 60, test_duration / 3600, (test_duration / 60) % 60, test_duration % 60); if (histogram_avg) free(histogram_avg); if (histogram_max) free(histogram_max); if (histogram_min) free(histogram_min); exit(0); }