Skip to content

Instantly share code, notes, and snippets.

/minion_bench.pl Secret

Created March 17, 2016 02:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/8cb045a84edb3fb74aa8 to your computer and use it in GitHub Desktop.
Save anonymous/8cb045a84edb3fb74aa8 to your computer and use it in GitHub Desktop.
$ perl -Irepo/minion/lib minion_bench.pl
Clean start with 10000 jobs
Enqueued 10000 jobs in 4.14251303672791 seconds (2413.994/s)
85025 has started 4 workers
85030 will finish 1000 jobs
85031 will finish 1000 jobs
85033 will finish 1000 jobs
85032 will finish 1000 jobs
85033 finished 1000 jobs in 1.52169513702393 seconds (657.162/s)
85032 finished 1000 jobs in 1.52468419075012 seconds (655.874/s)
85030 finished 1000 jobs in 1.52593517303467 seconds (655.336/s)
85031 finished 1000 jobs in 1.52984499931335 seconds (653.661/s)
4 workers finished 1000 jobs each in 1.55294394493103 seconds (2575.753/s)
85025 has started 4 workers
85040 will finish 1000 jobs
85038 will finish 1000 jobs
85039 will finish 1000 jobs
85041 will finish 1000 jobs
85040 finished 1000 jobs in 1.58918619155884 seconds (629.253/s)
85038 finished 1000 jobs in 1.58949017524719 seconds (629.133/s)
85041 finished 1000 jobs in 1.59609603881836 seconds (626.529/s)
85039 finished 1000 jobs in 1.60254907608032 seconds (624.006/s)
4 workers finished 1000 jobs each in 1.62194681167603 seconds (2466.172/s)
Requesting stats 100 times
Received stats 100 times in 0.388854026794434 seconds (257.166/s)
Repairing 100 times
Repaired 100 times in 0.580440998077393 seconds (172.283/s)
use Mojo::Base -strict;
use Minion;
use Time::HiRes 'time';
my $ENQUEUE = 10000;
my $DEQUEUE = 1000;
my $REPETITIONS = 2;
my $WORKERS = 4;
my $STATS = 100;
my $REPAIR = 100;
my $minion = Minion->new(Pg => 'postgresql://tester:testing@/test');
$minion->add_task(foo => sub { });
$minion->add_task(bar => sub { });
$minion->reset;
# Enqueue
say "Clean start with $ENQUEUE jobs";
my $before = time;
$minion->enqueue($_ % 2 ? 'foo' : 'bar') for 1 .. $ENQUEUE;
my $elapsed = time - $before;
my $avg = sprintf '%.3f', $ENQUEUE / $elapsed;
say "Enqueued $ENQUEUE jobs in $elapsed seconds ($avg/s)";
# Dequeue
sub dequeue {
my @pids;
for (1 .. $WORKERS) {
die "Couldn't fork: $!" unless defined(my $pid = fork);
unless ($pid) {
my $worker = $minion->worker->register;
say "$$ will finish $DEQUEUE jobs";
my $before = time;
$worker->dequeue(0.5)->finish for 1 .. $DEQUEUE;
my $elapsed = time - $before;
my $avg = sprintf '%.3f', $DEQUEUE / $elapsed;
say "$$ finished $DEQUEUE jobs in $elapsed seconds ($avg/s)";
$worker->unregister;
exit;
}
push @pids, $pid;
}
say "$$ has started $WORKERS workers";
my $before = time;
waitpid $_, 0 for @pids;
my $elapsed = time - $before;
my $avg = sprintf '%.3f', ($DEQUEUE * $WORKERS) / $elapsed;
say
"$WORKERS workers finished $DEQUEUE jobs each in $elapsed seconds ($avg/s)";
}
dequeue() for 1 .. $REPETITIONS;
# Stats
say "Requesting stats $STATS times";
$before = time;
$minion->stats for 1 .. $STATS;
$elapsed = time - $before;
$avg = sprintf '%.3f', $STATS / $elapsed;
say "Received stats $STATS times in $elapsed seconds ($avg/s)";
# Repair
say "Repairing $REPAIR times";
$before = time;
$minion->repair for 1 .. $REPAIR;
$elapsed = time - $before;
$avg = sprintf '%.3f', $REPAIR / $elapsed;
say "Repaired $REPAIR times in $elapsed seconds ($avg/s)";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment