| 599 | # ============================================================================= |
| 600 | |
| 601 | def print_summary_table(benchmark_results): |
| 602 | naive_lat = benchmark_results["naive_latencies"] |
| 603 | cl_lat = benchmark_results["cl_latencies"] |
| 604 | dist = benchmark_results["cl_attempts_dist"] |
| 605 | n = benchmark_results["n_queries"] |
| 606 | |
| 607 | print("\n" + "=" * 68) |
| 608 | print(" BENCHMARK SUMMARY") |
| 609 | print("=" * 68) |
| 610 | print(f" {'Metric':<38} {'Naive':>10} {'Control Layer':>14}") |
| 611 | print("-" * 68) |
| 612 | print(f" {'Pass rate':<38} {benchmark_results['naive_pass_rate']:>9.0f}%" |
| 613 | f" {benchmark_results['cl_pass_rate']:>13.0f}%") |
| 614 | print(f" {'Min latency (ms)':<38} {min(naive_lat):>10.1f} {min(cl_lat):>14.1f}") |
| 615 | print(f" {'Median latency (ms)':<38} {np.median(naive_lat):>10.1f}" |
| 616 | f" {np.median(cl_lat):>14.1f}") |
| 617 | print(f" {'Mean latency (ms)':<38} {np.mean(naive_lat):>10.1f}" |
| 618 | f" {np.mean(cl_lat):>14.1f}") |
| 619 | print(f" {'P90 latency (ms)':<38} {np.percentile(naive_lat, 90):>10.1f}" |
| 620 | f" {np.percentile(cl_lat, 90):>14.1f}") |
| 621 | print(f" {'Max latency (ms)':<38} {max(naive_lat):>10.1f} {max(cl_lat):>14.1f}") |
| 622 | print(f" {'Total queries':<38} {n:>10} {n:>14}") |
| 623 | print(f" {'Resolved on attempt 1':<38} {'N/A':>10} {dist.get(1, 0):>14}") |
| 624 | print(f" {'Resolved on attempt 2':<38} {'N/A':>10} {dist.get(2, 0):>14}") |
| 625 | print(f" {'Resolved on attempt 3+':<38} {'N/A':>10} {dist.get(3, 0):>14}") |
| 626 | print("=" * 68) |
| 627 | |
| 628 | |
| 629 | # ============================================================================= |