Skip to content

Instantly share code, notes, and snippets.

@melo
Last active December 2, 2016 15:29
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 melo/fa5d0fc8ad87d9fc00cfd0ea14771d8f to your computer and use it in GitHub Desktop.
Save melo/fa5d0fc8ad87d9fc00cfd0ea14771d8f to your computer and use it in GitHub Desktop.
Benchmark ZADD's over the network to a low-powered server

Started Redis server on small linux box with:

docker run -it --rm --net=host redis

linux box was a:

$ uname -a
Linux wanderer 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 61
model name	: Intel(R) Pentium(R) 3805U @ 1.90GHz
stepping	: 4
microcode	: 0x18
cpu MHz		: 1900.074
cache size	: 2048 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 20
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer xsave rdrand lahf_lm abm 3dnowprefetch ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust erms invpcid rdseed xsaveopt
bogomips	: 3791.17
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

(cpuinfo only shows first thread, there are two threads).

Client was a iMac late 2013, 3.4GHz i5, connected to the server over gigabit ethernet.

Benchmark script executed as:

REDIS_SERVER=<linux-server-ip>:6379 carton exec perl redis_zadd_benchmark.pl
# Use `carton install` to install these deps
requires 'Redis::Fast';
requires 'Data::UUID::LibUUID';
requires 'Time::HiRes';
# Run with `REDIS_SERVER=.... carton exec perl redis_zadd_benchmark.pl`
use strict;
use warnings;
use Redis::Fast;
use Data::UUID::LibUUID;
use Time::HiRes qw( gettimeofday tv_interval );
my $r = Redis::Fast->new or die "Could not connect to server $ENV{REDIS_SERVER}";
my $elems_n = 10_000_000;
$|++;
## Add 1M keys to a zset
my $count = 0;
my $t0 = [gettimeofday()];
while ($count++ < $elems_n) {
$r->zadd('zeds', time(), new_uuid_string(), sub {});
if (($count & 0xfffff) == 0) {
my $t1 = [gettimeofday()];
$r->wait_all_responses;
my $db = tv_interval($t1);
my $da = tv_interval($t0);
print "$count elems, sync took $db seconds, rate is "
. ($count/$da) . " elems per second, "
. ($da/$count)*1000 . " per zadd (in miliseconds)\n";
}
}
$r->wait_all_responses;
my $delta = tv_interval($t0);
print "ZADD'ed $elems_n in $delta seconds: "
. ($elems_n/$delta) . " elems per second, "
. ($delta/$elems_n)*1000 . " per zadd (in miliseconds)\n";
## Three runs, 10_000_000 elements added on each
## Final ZSET contains 30_000_000 elements
$ REDIS_SERVER=<linux-server-ip>:6379 carton exec perl redis_zadd_benchmark.pl
1048576 elems, sync took 3.642998 seconds, rate is 155547.726401219 elems per second, 0.00642889499664307 per zadd (in miliseconds)
2097152 elems, sync took 3.474124 seconds, rate is 162012.736816368 elems per second, 0.00617235422134399 per zadd (in miliseconds)
3145728 elems, sync took 4.128699 seconds, rate is 158843.928254103 elems per second, 0.00629548772176107 per zadd (in miliseconds)
4194304 elems, sync took 3.209421 seconds, rate is 162682.135320937 elems per second, 0.00614695644378662 per zadd (in miliseconds)
5242880 elems, sync took 3.262474 seconds, rate is 165237.407592339 elems per second, 0.00605189838409424 per zadd (in miliseconds)
6291456 elems, sync took 3.300628 seconds, rate is 166673.223435529 elems per second, 0.00599976396560669 per zadd (in miliseconds)
7340032 elems, sync took 3.263613 seconds, rate is 168073.551413235 elems per second, 0.00594977610451834 per zadd (in miliseconds)
8388608 elems, sync took 3.347797 seconds, rate is 168635.682621861 elems per second, 0.0059299430847168 per zadd (in miliseconds)
9437184 elems, sync took 4.811891 seconds, rate is 164683.209482469 elems per second, 0.00607226445939806 per zadd (in miliseconds)
ZADD'ed 10000000 in 61.294236 seconds: 163147.477684525 elems per second, 0.0061294236 per zadd (in miliseconds)
$ REDIS_SERVER=<linux-server-ip>:6379 carton exec perl redis_zadd_benchmark.pl
1048576 elems, sync took 5.104909 seconds, rate is 127605.112645182 elems per second, 0.00783667659759522 per zadd (in miliseconds)
2097152 elems, sync took 3.44391 seconds, rate is 139597.628516697 elems per second, 0.00716344547271728 per zadd (in miliseconds)
3145728 elems, sync took 5.141591 seconds, rate is 136924.82303461 elems per second, 0.00730327765146891 per zadd (in miliseconds)
4194304 elems, sync took 3.392497 seconds, rate is 143758.888095656 elems per second, 0.00695609164237976 per zadd (in miliseconds)
5242880 elems, sync took 3.517988 seconds, rate is 147718.884219329 elems per second, 0.00676961517333984 per zadd (in miliseconds)
6291456 elems, sync took 3.326938 seconds, rate is 151330.293140241 elems per second, 0.00660806226730347 per zadd (in miliseconds)
7340032 elems, sync took 4.153715 seconds, rate is 150977.520676477 elems per second, 0.00662350259508405 per zadd (in miliseconds)
8388608 elems, sync took 4.788017 seconds, rate is 149466.389498 elems per second, 0.0066904673576355 per zadd (in miliseconds)
9437184 elems, sync took 4.397497 seconds, rate is 149212.046263782 elems per second, 0.00670187176598443 per zadd (in miliseconds)
ZADD'ed 10000000 in 67.260055 seconds: 148676.655111269 elems per second, 0.0067260055 per zadd (in miliseconds)
$ REDIS_SERVER=<linux-server-ip>:6379 carton exec perl redis_zadd_benchmark.pl
1048576 elems, sync took 4.52939 seconds, rate is 136163.157478516 elems per second, 0.00734413051605225 per zadd (in miliseconds)
2097152 elems, sync took 4.3959 seconds, rate is 141189.469739002 elems per second, 0.00708268117904663 per zadd (in miliseconds)
3145728 elems, sync took 4.504448 seconds, rate is 141760.946673672 elems per second, 0.00705412896474202 per zadd (in miliseconds)
4194304 elems, sync took 3.327519 seconds, rate is 147518.578994694 elems per second, 0.00677880716323853 per zadd (in miliseconds)
5242880 elems, sync took 6.235921 seconds, rate is 140255.941518648 elems per second, 0.00712982273101807 per zadd (in miliseconds)
6291456 elems, sync took 3.244281 seconds, rate is 144208.416324713 elems per second, 0.00693440802892049 per zadd (in miliseconds)
7340032 elems, sync took 3.480223 seconds, rate is 147008.565975544 elems per second, 0.00680232470376151 per zadd (in miliseconds)
8388608 elems, sync took 4.990912 seconds, rate is 144864.499168678 elems per second, 0.00690300250053406 per zadd (in miliseconds)
9437184 elems, sync took 3.776824 seconds, rate is 146494.779084996 elems per second, 0.00682618183559842 per zadd (in miliseconds)
ZADD'ed 10000000 in 67.937883 seconds: 147193.282428303 elems per second, 0.0067937883 per zadd (in miliseconds)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment