Skip to content

Commit fe983a8

Browse files
authored
Merge pull request #57 from plainbanana/update-benchmarks
Replace legacy benchmark results
2 parents dabf5a0 + ff86f15 commit fe983a8

File tree

3 files changed

+130
-125
lines changed

3 files changed

+130
-125
lines changed

Diff for: README.md

+16-19
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,22 @@ This client start to connect using RESP2 and currently it has no option to upgra
5858

5959
Simple microbenchmark comparing PP and XS.
6060
The benchmark script used can be found under examples directory.
61-
62-
Redis::Cluster::Fast is 0.084
63-
Redis::ClusterRider is 0.26
64-
### mset ###
65-
Rate Redis::ClusterRider Redis::Cluster::Fast
66-
Redis::ClusterRider 13245/s -- -34%
67-
Redis::Cluster::Fast 20080/s 52% --
68-
### mget ###
69-
Rate Redis::ClusterRider Redis::Cluster::Fast
70-
Redis::ClusterRider 14641/s -- -40%
71-
Redis::Cluster::Fast 24510/s 67% --
72-
### incr ###
73-
Rate Redis::ClusterRider Redis::Cluster::Fast
74-
Redis::ClusterRider 18367/s -- -44%
75-
Redis::Cluster::Fast 32879/s 79% --
76-
### new and ping ###
77-
Rate Redis::ClusterRider Redis::Cluster::Fast
78-
Redis::ClusterRider 146/s -- -96%
79-
Redis::Cluster::Fast 3941/s 2598% --
61+
Each operation was executed 100,000 times, and the execution time was measured in milliseconds.
62+
63+
+--------------------------------+-------+-------+-------+-------+-------+
64+
| Operation | P50 | P80 | P95 | P99 | P100 |
65+
+--------------------------------+-------+-------+-------+-------+-------+
66+
| get_pp | 0.028 | 0.032 | 0.036 | 0.050 | 0.880 |
67+
| get_xs | 0.020 | 0.023 | 0.025 | 0.044 | 0.881 |
68+
| get_xs_pipeline | 0.014 | 0.015 | 0.018 | 0.021 | 0.472 |
69+
| get_xs_pipeline_batched_100 | 0.003 | 0.003 | 0.004 | 0.074 | 0.323 |
70+
| set_pp | 0.028 | 0.032 | 0.037 | 0.051 | 2.014 |
71+
| set_xs | 0.021 | 0.024 | 0.027 | 0.047 | 0.729 |
72+
| set_xs_pipeline | 0.014 | 0.016 | 0.018 | 0.021 | 0.393 |
73+
| set_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.379 |
74+
+--------------------------------+-------+-------+-------+-------+-------+
75+
76+
c.f. https://github.com/plainbanana/Redis-Cluster-Fast-Benchmarks
8077

8178
# METHODS
8279

Diff for: examples/benchmark-simple.pl

+98-87
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,114 @@
11
use strict;
22
use warnings FATAL => 'all';
3+
use feature qw/say/;
4+
use lib ".";
5+
use lib "./_build/lib";
6+
use lib "./blib/arch";
7+
use lib "./blib/lib";
38
use lib './xt/lib';
4-
use Benchmark;
9+
10+
use Time::HiRes qw/gettimeofday tv_interval/;
511
use Redis::Cluster::Fast;
612
use Redis::ClusterRider;
7-
use Test::More; # for Test::RedisCluster
8-
use Test::Docker::RedisCluster qw/get_startup_nodes/;
9-
10-
print "Redis::Cluster::Fast is " . $Redis::Cluster::Fast::VERSION . "\n";
11-
print "Redis::ClusterRider is " . $Redis::ClusterRider::VERSION . "\n";
1213

13-
my $nodes = get_startup_nodes;
14+
my $nodes_str = $ENV{REDIS_NODES};
15+
my $nodes = [
16+
split(/,/, $nodes_str)
17+
];
1418

1519
my $xs = Redis::Cluster::Fast->new(
1620
startup_nodes => $nodes,
21+
route_use_slots => 1,
1722
);
1823

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

23-
my $cc = 0;
24-
my $dd = 0;
25-
2628
my $loop = 100000;
27-
print "### mset ###\n";
28-
Benchmark::cmpthese($loop, {
29-
"Redis::ClusterRider" => sub {
30-
$cc++;
31-
$pp->mset("{pp$cc}atest", $cc, "{pp$cc}btest", $cc, "{pp$cc}ctest", $cc);
32-
},
33-
"Redis::Cluster::Fast" => sub {
34-
$dd++;
35-
$xs->mset("{xs$dd}atest", $dd, "{xs$dd}btest", $dd, "{xs$dd}ctest", $dd);
36-
},
37-
});
38-
39-
$cc = 0;
40-
$dd = 0;
41-
42-
print "### mget ###\n";
43-
Benchmark::cmpthese($loop, {
44-
"Redis::ClusterRider" => sub {
45-
$cc++;
46-
$pp->mget("{pp$cc}atest", "{pp$cc}btest", "{pp$cc}ctest");
47-
},
48-
"Redis::Cluster::Fast" => sub {
49-
$dd++;
50-
$xs->mget("{xs$dd}atest", "{xs$dd}btest", "{xs$dd}ctest");
51-
},
52-
});
53-
54-
print "### incr ###\n";
55-
Benchmark::cmpthese(-2, {
56-
"Redis::ClusterRider" => sub {
57-
$pp->incr("incr_1");
58-
},
59-
"Redis::Cluster::Fast" => sub {
60-
$xs->incr("incr_2");
61-
},
62-
});
63-
64-
print "### new and ping ###\n";
65-
Benchmark::cmpthese(-2, {
66-
"Redis::ClusterRider" => sub {
67-
my $tmp = Redis::ClusterRider->new(
68-
startup_nodes => $nodes,
69-
);
70-
$tmp->ping;
71-
},
72-
"Redis::Cluster::Fast" => sub {
73-
my $tmp = Redis::Cluster::Fast->new(
74-
startup_nodes => $nodes,
75-
);
76-
$tmp->ping;
77-
},
78-
});
79-
80-
is 1, 1;
81-
done_testing;
82-
__END__
83-
% AUTHOR_TESTING=1 perl ./examples/benchmark-simple.pl
84-
Redis::Cluster::Fast is 0.084
85-
Redis::ClusterRider is 0.26
86-
### mset ###
87-
Rate Redis::ClusterRider Redis::Cluster::Fast
88-
Redis::ClusterRider 13245/s -- -34%
89-
Redis::Cluster::Fast 20080/s 52% --
90-
### mget ###
91-
Rate Redis::ClusterRider Redis::Cluster::Fast
92-
Redis::ClusterRider 14641/s -- -40%
93-
Redis::Cluster::Fast 24510/s 67% --
94-
### incr ###
95-
Rate Redis::ClusterRider Redis::Cluster::Fast
96-
Redis::ClusterRider 18367/s -- -44%
97-
Redis::Cluster::Fast 32879/s 79% --
98-
### new and ping ###
99-
Rate Redis::ClusterRider Redis::Cluster::Fast
100-
Redis::ClusterRider 146/s -- -96%
101-
Redis::Cluster::Fast 3941/s 2598% --
102-
ok 1
103-
1..1
29+
30+
######
31+
# set
32+
######
33+
sleep 1;
34+
for my $num (1 .. $loop) {
35+
my $start_time = [ gettimeofday ];
36+
37+
$xs->set('1' . $num, 123);
38+
39+
my $elapsed_time = tv_interval($start_time);
40+
printf "set_xs,%.10f\n", $elapsed_time * 1000;
41+
}
42+
sleep 1;
43+
for my $num (1 .. $loop) {
44+
my $start_time = [ gettimeofday ];
45+
46+
$xs->set('2' . $num, 123, sub {});
47+
$xs->run_event_loop;
48+
49+
my $elapsed_time = tv_interval($start_time);
50+
printf "set_xs_pipeline,%.10f\n", $elapsed_time * 1000;
51+
}
52+
sleep 1;
53+
for my $num (1 .. $loop) {
54+
my $start_time = [ gettimeofday ];
55+
56+
$xs->set('3' . $num, 123, sub {});
57+
$xs->run_event_loop if $num % 100 == 0;
58+
59+
my $elapsed_time = tv_interval($start_time);
60+
printf "set_xs_pipeline_batched_100,%.10f\n", $elapsed_time * 1000;
61+
}
62+
sleep 1;
63+
for my $num (1 .. $loop) {
64+
my $start_time = [ gettimeofday ];
65+
66+
$pp->set('4' . $num, 123);
67+
68+
my $elapsed_time = tv_interval($start_time);
69+
printf "set_pp,%.10f\n", $elapsed_time * 1000;
70+
}
71+
72+
######
73+
# get
74+
######
75+
sleep 1;
76+
for my $num (1 .. $loop) {
77+
my $start_time = [ gettimeofday ];
78+
79+
$xs->get('1' . $num);
80+
81+
my $elapsed_time = tv_interval($start_time);
82+
printf "get_xs,%.10f\n", $elapsed_time * 1000;
83+
}
84+
sleep 1;
85+
for my $num (1 .. $loop) {
86+
my $start_time = [ gettimeofday ];
87+
88+
$xs->get('2' . $num, sub {});
89+
$xs->run_event_loop;
90+
91+
my $elapsed_time = tv_interval($start_time);
92+
printf "get_xs_pipeline,%.10f\n", $elapsed_time * 1000;
93+
}
94+
sleep 1;
95+
for my $num (1 .. $loop) {
96+
my $start_time = [ gettimeofday ];
97+
98+
$xs->get('3' . $num, sub {});
99+
$xs->run_event_loop if $num % 100 == 0;
100+
101+
my $elapsed_time = tv_interval($start_time);
102+
printf "get_xs_pipeline_batched_100,%.10f\n", $elapsed_time * 1000;
103+
}
104+
sleep 1;
105+
for my $num (1 .. $loop) {
106+
my $start_time = [ gettimeofday ];
107+
108+
$pp->get('4' . $num);
109+
110+
my $elapsed_time = tv_interval($start_time);
111+
printf "get_pp,%.10f\n", $elapsed_time * 1000;
112+
}
113+
114+
__END__

Diff for: lib/Redis/Cluster/Fast.pm

+16-19
Original file line numberDiff line numberDiff line change
@@ -192,25 +192,22 @@ This client start to connect using RESP2 and currently it has no option to upgra
192192
193193
Simple microbenchmark comparing PP and XS.
194194
The benchmark script used can be found under examples directory.
195-
196-
Redis::Cluster::Fast is 0.084
197-
Redis::ClusterRider is 0.26
198-
### mset ###
199-
Rate Redis::ClusterRider Redis::Cluster::Fast
200-
Redis::ClusterRider 13245/s -- -34%
201-
Redis::Cluster::Fast 20080/s 52% --
202-
### mget ###
203-
Rate Redis::ClusterRider Redis::Cluster::Fast
204-
Redis::ClusterRider 14641/s -- -40%
205-
Redis::Cluster::Fast 24510/s 67% --
206-
### incr ###
207-
Rate Redis::ClusterRider Redis::Cluster::Fast
208-
Redis::ClusterRider 18367/s -- -44%
209-
Redis::Cluster::Fast 32879/s 79% --
210-
### new and ping ###
211-
Rate Redis::ClusterRider Redis::Cluster::Fast
212-
Redis::ClusterRider 146/s -- -96%
213-
Redis::Cluster::Fast 3941/s 2598% --
195+
Each operation was executed 100,000 times, and the execution time was measured in milliseconds.
196+
197+
+--------------------------------+-------+-------+-------+-------+-------+
198+
| Operation | P50 | P80 | P95 | P99 | P100 |
199+
+--------------------------------+-------+-------+-------+-------+-------+
200+
| get_pp | 0.028 | 0.032 | 0.036 | 0.050 | 0.880 |
201+
| get_xs | 0.020 | 0.023 | 0.025 | 0.044 | 0.881 |
202+
| get_xs_pipeline | 0.014 | 0.015 | 0.018 | 0.021 | 0.472 |
203+
| get_xs_pipeline_batched_100 | 0.003 | 0.003 | 0.004 | 0.074 | 0.323 |
204+
| set_pp | 0.028 | 0.032 | 0.037 | 0.051 | 2.014 |
205+
| set_xs | 0.021 | 0.024 | 0.027 | 0.047 | 0.729 |
206+
| set_xs_pipeline | 0.014 | 0.016 | 0.018 | 0.021 | 0.393 |
207+
| set_xs_pipeline_batched_100 | 0.003 | 0.004 | 0.005 | 0.073 | 0.379 |
208+
+--------------------------------+-------+-------+-------+-------+-------+
209+
210+
c.f. https://github.com/plainbanana/Redis-Cluster-Fast-Benchmarks
214211
215212
=head1 METHODS
216213

0 commit comments

Comments
 (0)