Skip to content

Commit

Permalink
chore: Replace legacy benchmark results
Browse files Browse the repository at this point in the history
  • Loading branch information
plainbanana committed Jan 30, 2025
1 parent dabf5a0 commit abc543f
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 123 deletions.
30 changes: 12 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,24 +59,18 @@ This client start to connect using RESP2 and currently it has no option to upgra
Simple microbenchmark comparing PP and XS.
The benchmark script used can be found under examples directory.

Redis::Cluster::Fast is 0.084
Redis::ClusterRider is 0.26
### mset ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 13245/s -- -34%
Redis::Cluster::Fast 20080/s 52% --
### mget ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 14641/s -- -40%
Redis::Cluster::Fast 24510/s 67% --
### incr ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 18367/s -- -44%
Redis::Cluster::Fast 32879/s 79% --
### new and ping ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 146/s -- -96%
Redis::Cluster::Fast 3941/s 2598% --
+--------------------------------+-------+-------+-------+-------+-------+
| Operation | P50 | P80 | P95 | P99 | P100 |
+--------------------------------+-------+-------+-------+-------+-------+
| get_pp | 0.028 | 0.033 | 0.039 | 0.049 | 0.955 |
| get_xs | 0.021 | 0.023 | 0.026 | 0.045 | 0.445 |
| get_xs_pipeline | 0.014 | 0.014 | 0.016 | 0.019 | 0.437 |
| get_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.398 |
| set_pp | 0.028 | 0.032 | 0.036 | 0.049 | 2.013 |
| set_xs | 0.021 | 0.024 | 0.027 | 0.047 | 0.539 |
| set_xs_pipeline | 0.014 | 0.016 | 0.017 | 0.020 | 0.345 |
| set_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.308 |
+--------------------------------+-------+-------+-------+-------+-------+

# METHODS

Expand Down
185 changes: 98 additions & 87 deletions examples/benchmark-simple.pl
Original file line number Diff line number Diff line change
@@ -1,103 +1,114 @@
use strict;
use warnings FATAL => 'all';
use feature qw/say/;
use lib ".";
use lib "./_build/lib";
use lib "./blib/arch";
use lib "./blib/lib";
use lib './xt/lib';
use Benchmark;

use Time::HiRes qw/gettimeofday tv_interval/;
use Redis::Cluster::Fast;
use Redis::ClusterRider;
use Test::More; # for Test::RedisCluster
use Test::Docker::RedisCluster qw/get_startup_nodes/;

print "Redis::Cluster::Fast is " . $Redis::Cluster::Fast::VERSION . "\n";
print "Redis::ClusterRider is " . $Redis::ClusterRider::VERSION . "\n";

my $nodes = get_startup_nodes;
my $nodes_str = $ENV{REDIS_NODES};
my $nodes = [
split(/,/, $nodes_str)
];

my $xs = Redis::Cluster::Fast->new(
startup_nodes => $nodes,
route_use_slots => 1,
);

my $pp = Redis::ClusterRider->new(
startup_nodes => $nodes,
);

my $cc = 0;
my $dd = 0;

my $loop = 100000;
print "### mset ###\n";
Benchmark::cmpthese($loop, {
"Redis::ClusterRider" => sub {
$cc++;
$pp->mset("{pp$cc}atest", $cc, "{pp$cc}btest", $cc, "{pp$cc}ctest", $cc);
},
"Redis::Cluster::Fast" => sub {
$dd++;
$xs->mset("{xs$dd}atest", $dd, "{xs$dd}btest", $dd, "{xs$dd}ctest", $dd);
},
});

$cc = 0;
$dd = 0;

print "### mget ###\n";
Benchmark::cmpthese($loop, {
"Redis::ClusterRider" => sub {
$cc++;
$pp->mget("{pp$cc}atest", "{pp$cc}btest", "{pp$cc}ctest");
},
"Redis::Cluster::Fast" => sub {
$dd++;
$xs->mget("{xs$dd}atest", "{xs$dd}btest", "{xs$dd}ctest");
},
});

print "### incr ###\n";
Benchmark::cmpthese(-2, {
"Redis::ClusterRider" => sub {
$pp->incr("incr_1");
},
"Redis::Cluster::Fast" => sub {
$xs->incr("incr_2");
},
});

print "### new and ping ###\n";
Benchmark::cmpthese(-2, {
"Redis::ClusterRider" => sub {
my $tmp = Redis::ClusterRider->new(
startup_nodes => $nodes,
);
$tmp->ping;
},
"Redis::Cluster::Fast" => sub {
my $tmp = Redis::Cluster::Fast->new(
startup_nodes => $nodes,
);
$tmp->ping;
},
});

is 1, 1;
done_testing;
__END__
% AUTHOR_TESTING=1 perl ./examples/benchmark-simple.pl
Redis::Cluster::Fast is 0.084
Redis::ClusterRider is 0.26
### mset ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 13245/s -- -34%
Redis::Cluster::Fast 20080/s 52% --
### mget ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 14641/s -- -40%
Redis::Cluster::Fast 24510/s 67% --
### incr ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 18367/s -- -44%
Redis::Cluster::Fast 32879/s 79% --
### new and ping ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 146/s -- -96%
Redis::Cluster::Fast 3941/s 2598% --
ok 1
1..1

######
# set
######
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->set('1' . $num, 123);

my $elapsed_time = tv_interval($start_time);
printf "set_xs,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->set('2' . $num, 123, sub {});
$xs->run_event_loop;

my $elapsed_time = tv_interval($start_time);
printf "set_xs_pipeline,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->set('3' . $num, 123, sub {});
$xs->run_event_loop if $num % 100 == 0;

my $elapsed_time = tv_interval($start_time);
printf "set_xs_pipeline_batched_100,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$pp->set('4' . $num, 123);

my $elapsed_time = tv_interval($start_time);
printf "set_pp,%.10f\n", $elapsed_time * 1000;
}

######
# get
######
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->get('1' . $num);

my $elapsed_time = tv_interval($start_time);
printf "get_xs,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->get('2' . $num, sub {});
$xs->run_event_loop;

my $elapsed_time = tv_interval($start_time);
printf "get_xs_pipeline,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$xs->get('3' . $num, sub {});
$xs->run_event_loop if $num % 100 == 0;

my $elapsed_time = tv_interval($start_time);
printf "get_xs_pipeline_batched_100,%.10f\n", $elapsed_time * 1000;
}
sleep 1;
for my $num (1 .. $loop) {
my $start_time = [ gettimeofday ];

$pp->get('4' . $num);

my $elapsed_time = tv_interval($start_time);
printf "get_pp,%.10f\n", $elapsed_time * 1000;
}

__END__
30 changes: 12 additions & 18 deletions lib/Redis/Cluster/Fast.pm
Original file line number Diff line number Diff line change
Expand Up @@ -193,24 +193,18 @@ This client start to connect using RESP2 and currently it has no option to upgra
Simple microbenchmark comparing PP and XS.
The benchmark script used can be found under examples directory.
Redis::Cluster::Fast is 0.084
Redis::ClusterRider is 0.26
### mset ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 13245/s -- -34%
Redis::Cluster::Fast 20080/s 52% --
### mget ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 14641/s -- -40%
Redis::Cluster::Fast 24510/s 67% --
### incr ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 18367/s -- -44%
Redis::Cluster::Fast 32879/s 79% --
### new and ping ###
Rate Redis::ClusterRider Redis::Cluster::Fast
Redis::ClusterRider 146/s -- -96%
Redis::Cluster::Fast 3941/s 2598% --
+--------------------------------+-------+-------+-------+-------+-------+
| Operation | P50 | P80 | P95 | P99 | P100 |
+--------------------------------+-------+-------+-------+-------+-------+
| get_pp | 0.028 | 0.033 | 0.039 | 0.049 | 0.955 |
| get_xs | 0.021 | 0.023 | 0.026 | 0.045 | 0.445 |
| get_xs_pipeline | 0.014 | 0.014 | 0.016 | 0.019 | 0.437 |
| get_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.398 |
| set_pp | 0.028 | 0.032 | 0.036 | 0.049 | 2.013 |
| set_xs | 0.021 | 0.024 | 0.027 | 0.047 | 0.539 |
| set_xs_pipeline | 0.014 | 0.016 | 0.017 | 0.020 | 0.345 |
| set_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.308 |
+--------------------------------+-------+-------+-------+-------+-------+
=head1 METHODS
Expand Down

0 comments on commit abc543f

Please sign in to comment.