aboutsummaryrefslogtreecommitdiff
path: root/scripts/release_perf_producer.pl
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-08-19 04:43:28 +0300
committerGitHub <noreply@github.com>2026-08-19 04:43:28 +0300
commita5c69beabfc82d9c3f9563eb821139b2e0f3e14f (patch)
tree9b7049e4629913dcab40d985df399acee262b67b /scripts/release_perf_producer.pl
parent3667151744e379ac5c8f76d57203b675de8a6ebc (diff)
fix(perf): eliminate redundant terminal wake work (#2962)
* fix(perf): eliminate redundant terminal wake work * fix(perf): harden release benchmark gate * test(perf): strengthen performance guardrails
Diffstat (limited to 'scripts/release_perf_producer.pl')
-rwxr-xr-xscripts/release_perf_producer.pl26
1 files changed, 26 insertions, 0 deletions
diff --git a/scripts/release_perf_producer.pl b/scripts/release_perf_producer.pl
new file mode 100755
index 00000000..e99973cc
--- /dev/null
+++ b/scripts/release_perf_producer.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Time::HiRes qw(clock_gettime sleep CLOCK_MONOTONIC);
+
+my ($rate, $gate, $label) = @ARGV;
+die "usage: $0 <rate-hz> <gate-file> <label>\n"
+ unless defined $rate && defined $gate && defined $label
+ && length $gate && length $label;
+die "rate must be a positive number\n"
+ unless $rate =~ /\A(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)\z/ && $rate > 0;
+
+sleep 0.01 until -e $gate;
+$| = 1;
+my $period = 1 / $rate;
+my $next = clock_gettime(CLOCK_MONOTONIC);
+my $sequence = 0;
+while (1) {
+ $sequence++;
+ printf "\rbench-output-%08d-%s", $sequence, $label;
+ $next += $period;
+ my $now = clock_gettime(CLOCK_MONOTONIC);
+ $next = $now + $period if $next < $now - $period;
+ my $remaining = $next - $now;
+ sleep $remaining if $remaining > 0;
+}