Lines Matching refs:pair
185 pair->param = (pair->param ? pair->param : def); \
186 if (pair->param < low) \
188 if (pair->param > hi) \
201 static void tst_fzsync_pair_init(struct tst_fzsync_pair *pair) in tst_fzsync_pair_init() argument
218 static void tst_fzsync_pair_cleanup(struct tst_fzsync_pair *pair) in tst_fzsync_pair_cleanup() argument
220 if (pair->thread_b) { in tst_fzsync_pair_cleanup()
221 tst_atomic_store(1, &pair->exit); in tst_fzsync_pair_cleanup()
222 SAFE_PTHREAD_JOIN(pair->thread_b, NULL); in tst_fzsync_pair_cleanup()
223 pair->thread_b = 0; in tst_fzsync_pair_cleanup()
256 static void tst_fzsync_pair_reset(struct tst_fzsync_pair *pair, in tst_fzsync_pair_reset() argument
259 tst_fzsync_pair_cleanup(pair); in tst_fzsync_pair_reset()
261 tst_init_stat(&pair->diff_ss); in tst_fzsync_pair_reset()
262 tst_init_stat(&pair->diff_sa); in tst_fzsync_pair_reset()
263 tst_init_stat(&pair->diff_sb); in tst_fzsync_pair_reset()
264 tst_init_stat(&pair->diff_ab); in tst_fzsync_pair_reset()
265 tst_init_stat(&pair->spins_avg); in tst_fzsync_pair_reset()
266 pair->delay = 0; in tst_fzsync_pair_reset()
267 pair->sampling = pair->min_samples; in tst_fzsync_pair_reset()
269 pair->exec_loop = 0; in tst_fzsync_pair_reset()
271 pair->a_cntr = 0; in tst_fzsync_pair_reset()
272 pair->b_cntr = 0; in tst_fzsync_pair_reset()
273 pair->exit = 0; in tst_fzsync_pair_reset()
275 SAFE_PTHREAD_CREATE(&pair->thread_b, 0, run_b, 0); in tst_fzsync_pair_reset()
277 pair->exec_time_start = (float)tst_timeout_remaining(); in tst_fzsync_pair_reset()
298 static void tst_fzsync_pair_info(struct tst_fzsync_pair *pair) in tst_fzsync_pair_info() argument
301 pair->exec_loop, pair->delay_bias); in tst_fzsync_pair_info()
302 tst_fzsync_stat_info(pair->diff_ss, "ns", "start_a - start_b"); in tst_fzsync_pair_info()
303 tst_fzsync_stat_info(pair->diff_sa, "ns", "end_a - start_a"); in tst_fzsync_pair_info()
304 tst_fzsync_stat_info(pair->diff_sb, "ns", "end_b - start_b"); in tst_fzsync_pair_info()
305 tst_fzsync_stat_info(pair->diff_ab, "ns", "end_a - end_b"); in tst_fzsync_pair_info()
306 tst_fzsync_stat_info(pair->spins_avg, " ", "spins"); in tst_fzsync_pair_info()
451 static void tst_fzsync_pair_update(struct tst_fzsync_pair *pair) in tst_fzsync_pair_update() argument
453 float alpha = pair->avg_alpha; in tst_fzsync_pair_update()
455 float max_dev = pair->max_dev_ratio; in tst_fzsync_pair_update()
458 pair->delay = pair->delay_bias; in tst_fzsync_pair_update()
460 over_max_dev = pair->diff_ss.dev_ratio > max_dev in tst_fzsync_pair_update()
461 || pair->diff_sa.dev_ratio > max_dev in tst_fzsync_pair_update()
462 || pair->diff_sb.dev_ratio > max_dev in tst_fzsync_pair_update()
463 || pair->diff_ab.dev_ratio > max_dev in tst_fzsync_pair_update()
464 || pair->spins_avg.dev_ratio > max_dev; in tst_fzsync_pair_update()
466 if (pair->sampling > 0 || over_max_dev) { in tst_fzsync_pair_update()
467 tst_upd_diff_stat(&pair->diff_ss, alpha, in tst_fzsync_pair_update()
468 pair->a_start, pair->b_start); in tst_fzsync_pair_update()
469 tst_upd_diff_stat(&pair->diff_sa, alpha, in tst_fzsync_pair_update()
470 pair->a_end, pair->a_start); in tst_fzsync_pair_update()
471 tst_upd_diff_stat(&pair->diff_sb, alpha, in tst_fzsync_pair_update()
472 pair->b_end, pair->b_start); in tst_fzsync_pair_update()
473 tst_upd_diff_stat(&pair->diff_ab, alpha, in tst_fzsync_pair_update()
474 pair->a_end, pair->b_end); in tst_fzsync_pair_update()
475 tst_upd_stat(&pair->spins_avg, alpha, pair->spins); in tst_fzsync_pair_update()
476 if (pair->sampling > 0 && --pair->sampling == 0) { in tst_fzsync_pair_update()
478 tst_fzsync_pair_info(pair); in tst_fzsync_pair_update()
480 } else if (fabsf(pair->diff_ab.avg) >= 1 && pair->spins_avg.avg >= 1) { in tst_fzsync_pair_update()
481 per_spin_time = fabsf(pair->diff_ab.avg) / pair->spins_avg.avg; in tst_fzsync_pair_update()
482 time_delay = drand48() * (pair->diff_sa.avg + pair->diff_sb.avg) in tst_fzsync_pair_update()
483 - pair->diff_sb.avg; in tst_fzsync_pair_update()
484 pair->delay += (int)(time_delay / per_spin_time); in tst_fzsync_pair_update()
486 if (!pair->sampling) { in tst_fzsync_pair_update()
489 pair->max_dev_ratio); in tst_fzsync_pair_update()
491 (int)(pair->diff_sb.avg / per_spin_time) + pair->delay_bias, in tst_fzsync_pair_update()
492 (int)(pair->diff_sa.avg / per_spin_time) - pair->delay_bias); in tst_fzsync_pair_update()
493 tst_fzsync_pair_info(pair); in tst_fzsync_pair_update()
494 pair->sampling = -1; in tst_fzsync_pair_update()
496 } else if (!pair->sampling) { in tst_fzsync_pair_update()
498 pair->sampling = -1; in tst_fzsync_pair_update()
501 pair->spins = 0; in tst_fzsync_pair_update()
563 static inline void tst_fzsync_wait_a(struct tst_fzsync_pair *pair) in tst_fzsync_wait_a() argument
565 tst_fzsync_pair_wait(&pair->a_cntr, &pair->b_cntr, NULL); in tst_fzsync_wait_a()
574 static inline void tst_fzsync_wait_b(struct tst_fzsync_pair *pair) in tst_fzsync_wait_b() argument
576 tst_fzsync_pair_wait(&pair->b_cntr, &pair->a_cntr, NULL); in tst_fzsync_wait_b()
590 static inline int tst_fzsync_run_a(struct tst_fzsync_pair *pair) in tst_fzsync_run_a() argument
593 float rem_p = 1 - tst_timeout_remaining() / pair->exec_time_start; in tst_fzsync_run_a()
595 if ((pair->exec_time_p * SAMPLING_SLICE < rem_p) in tst_fzsync_run_a()
596 && (pair->sampling > 0)) { in tst_fzsync_run_a()
599 pair->exec_loop, pair->min_samples); in tst_fzsync_run_a()
600 pair->sampling = 0; in tst_fzsync_run_a()
601 tst_fzsync_pair_info(pair); in tst_fzsync_run_a()
604 if (pair->exec_time_p < rem_p) { in tst_fzsync_run_a()
610 if (++pair->exec_loop > pair->exec_loops) { in tst_fzsync_run_a()
616 tst_atomic_store(exit, &pair->exit); in tst_fzsync_run_a()
617 tst_fzsync_wait_a(pair); in tst_fzsync_run_a()
620 tst_fzsync_pair_cleanup(pair); in tst_fzsync_run_a()
633 static inline int tst_fzsync_run_b(struct tst_fzsync_pair *pair) in tst_fzsync_run_b() argument
635 tst_fzsync_wait_b(pair); in tst_fzsync_run_b()
636 return !tst_atomic_load(&pair->exit); in tst_fzsync_run_b()
657 static inline void tst_fzsync_start_race_a(struct tst_fzsync_pair *pair) in tst_fzsync_start_race_a() argument
661 tst_fzsync_pair_update(pair); in tst_fzsync_start_race_a()
663 tst_fzsync_wait_a(pair); in tst_fzsync_start_race_a()
665 delay = pair->delay; in tst_fzsync_start_race_a()
669 tst_fzsync_time(&pair->a_start); in tst_fzsync_start_race_a()
678 static inline void tst_fzsync_end_race_a(struct tst_fzsync_pair *pair) in tst_fzsync_end_race_a() argument
680 tst_fzsync_time(&pair->a_end); in tst_fzsync_end_race_a()
681 tst_fzsync_pair_wait(&pair->a_cntr, &pair->b_cntr, &pair->spins); in tst_fzsync_end_race_a()
690 static inline void tst_fzsync_start_race_b(struct tst_fzsync_pair *pair) in tst_fzsync_start_race_b() argument
694 tst_fzsync_wait_b(pair); in tst_fzsync_start_race_b()
696 delay = pair->delay; in tst_fzsync_start_race_b()
700 tst_fzsync_time(&pair->b_start); in tst_fzsync_start_race_b()
709 static inline void tst_fzsync_end_race_b(struct tst_fzsync_pair *pair) in tst_fzsync_end_race_b() argument
711 tst_fzsync_time(&pair->b_end); in tst_fzsync_end_race_b()
712 tst_fzsync_pair_wait(&pair->b_cntr, &pair->a_cntr, &pair->spins); in tst_fzsync_end_race_b()
739 static inline void tst_fzsync_pair_add_bias(struct tst_fzsync_pair *pair, int change) in tst_fzsync_pair_add_bias() argument
741 if (pair->sampling > 0) in tst_fzsync_pair_add_bias()
742 pair->delay_bias += change; in tst_fzsync_pair_add_bias()