Loading system/osi/src/alarm.c +10 −23 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ typedef struct { size_t rescheduled_count; size_t total_updates; period_ms_t last_update_ms; stat_t callback_execution; stat_t overdue_scheduling; stat_t premature_scheduling; } alarm_stats_t; Loading Loading @@ -134,10 +133,8 @@ static void alarm_queue_ready(fixed_queue_t *queue, void *context); static void timer_callback(void *data); static void callback_dispatch(void *context); static bool timer_create_internal(const clockid_t clock_id, timer_t *timer); static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms, period_ms_t execution_delta_ms); static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms); static void update_stat(stat_t *stat, period_ms_t delta) { Loading Loading @@ -614,14 +611,12 @@ static void alarm_queue_ready(fixed_queue_t *queue, pthread_mutex_lock(&alarm->callback_lock); pthread_mutex_unlock(&monitor); period_ms_t t0 = now(); callback(data); period_ms_t t1 = now(); // Update the statistics assert(t1 >= t0); period_ms_t delta = t1 - t0; update_scheduling_stats(&alarm->stats, t0, deadline, delta); update_scheduling_stats(&alarm->stats, now(), deadline); // NOTE: Do NOT access "alarm" after the callback, as a safety precaution // in case the callback itself deleted the alarm. callback(data); pthread_mutex_unlock(&alarm->callback_lock); } Loading Loading @@ -693,16 +688,11 @@ static bool timer_create_internal(const clockid_t clock_id, timer_t *timer) { return true; } static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms, period_ms_t execution_delta_ms) { static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms) { stats->total_updates++; stats->last_update_ms = now_ms; update_stat(&stats->callback_execution, execution_delta_ms); if (deadline_ms < now_ms) { // Overdue scheduling period_ms_t delta_ms = now_ms - deadline_ms; Loading Loading @@ -755,7 +745,7 @@ void alarm_debug_dump(int fd) dprintf(fd, "%-51s: %zu / %zu / %zu / %zu\n", " Action counts (sched/resched/exec/cancel)", stats->scheduled_count, stats->rescheduled_count, stats->callback_execution.count, stats->canceled_count); stats->total_updates, stats->canceled_count); dprintf(fd, "%-51s: %zu / %zu\n", " Deviation counts (overdue/premature)", Loading @@ -768,9 +758,6 @@ void alarm_debug_dump(int fd) (unsigned long long) alarm->period, (long long)(alarm->deadline - just_now)); dump_stat(fd, &stats->callback_execution, " Callback execution time in ms (total/max/avg)"); dump_stat(fd, &stats->overdue_scheduling, " Overdue scheduling time in ms (total/max/avg)"); Loading Loading
system/osi/src/alarm.c +10 −23 Original line number Diff line number Diff line Loading @@ -64,7 +64,6 @@ typedef struct { size_t rescheduled_count; size_t total_updates; period_ms_t last_update_ms; stat_t callback_execution; stat_t overdue_scheduling; stat_t premature_scheduling; } alarm_stats_t; Loading Loading @@ -134,10 +133,8 @@ static void alarm_queue_ready(fixed_queue_t *queue, void *context); static void timer_callback(void *data); static void callback_dispatch(void *context); static bool timer_create_internal(const clockid_t clock_id, timer_t *timer); static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms, period_ms_t execution_delta_ms); static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms); static void update_stat(stat_t *stat, period_ms_t delta) { Loading Loading @@ -614,14 +611,12 @@ static void alarm_queue_ready(fixed_queue_t *queue, pthread_mutex_lock(&alarm->callback_lock); pthread_mutex_unlock(&monitor); period_ms_t t0 = now(); callback(data); period_ms_t t1 = now(); // Update the statistics assert(t1 >= t0); period_ms_t delta = t1 - t0; update_scheduling_stats(&alarm->stats, t0, deadline, delta); update_scheduling_stats(&alarm->stats, now(), deadline); // NOTE: Do NOT access "alarm" after the callback, as a safety precaution // in case the callback itself deleted the alarm. callback(data); pthread_mutex_unlock(&alarm->callback_lock); } Loading Loading @@ -693,16 +688,11 @@ static bool timer_create_internal(const clockid_t clock_id, timer_t *timer) { return true; } static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms, period_ms_t execution_delta_ms) { static void update_scheduling_stats(alarm_stats_t *stats, period_ms_t now_ms, period_ms_t deadline_ms) { stats->total_updates++; stats->last_update_ms = now_ms; update_stat(&stats->callback_execution, execution_delta_ms); if (deadline_ms < now_ms) { // Overdue scheduling period_ms_t delta_ms = now_ms - deadline_ms; Loading Loading @@ -755,7 +745,7 @@ void alarm_debug_dump(int fd) dprintf(fd, "%-51s: %zu / %zu / %zu / %zu\n", " Action counts (sched/resched/exec/cancel)", stats->scheduled_count, stats->rescheduled_count, stats->callback_execution.count, stats->canceled_count); stats->total_updates, stats->canceled_count); dprintf(fd, "%-51s: %zu / %zu\n", " Deviation counts (overdue/premature)", Loading @@ -768,9 +758,6 @@ void alarm_debug_dump(int fd) (unsigned long long) alarm->period, (long long)(alarm->deadline - just_now)); dump_stat(fd, &stats->callback_execution, " Callback execution time in ms (total/max/avg)"); dump_stat(fd, &stats->overdue_scheduling, " Overdue scheduling time in ms (total/max/avg)"); Loading