1 #!/usr/bin/env tclsh8.5
2 # Copyright (C) 2011 Salvatore Sanfilippo
3 # Released under the BSD license like Redis itself
5 source ..
/tests
/support
/redis.tcl
8 proc run-tests branches
{
13 puts "Benchmarking $b"
14 exec -ignorestderr git checkout
$b 2> /dev
/null
15 exec -ignorestderr make clean
2> /dev
/null
17 exec -ignorestderr make
2> /dev
/null
19 if {$branch_id == 0} {
20 puts " copy redis-benchmark from unstable to /tmp..."
21 exec -ignorestderr cp .
/redis-benchmark
/tmp
26 # Start the Redis server
27 puts " starting the server... [exec ./redis-server -v]"
28 set pids
[exec echo
"port $::port\nloglevel warning\n" | .
/redis-server
- > /dev
/null
2> /dev
/null
&]
31 puts " running the benchmark"
33 set r
[redis
127.0.0.1 $::port]
35 puts " redis INFO shows version: [lindex [split $i] 0]"
38 set output
[exec /tmp
/redis-benchmark
-n 100000 --csv -p $::port]
39 lappend runs
$b $output
40 puts " killing server..."
41 catch {exec kill
-9 [lindex $pids 0]}
42 catch {exec kill
-9 [lindex $pids 1]}
48 proc get-result-with-name
{output name
} {
49 foreach line
[split $output "\n"] {
50 lassign
[split $line ","] key value
51 set key
[string tolower
[string range
$key 1 end-1
]]
52 set value
[string range
$value 1 end-1
]
53 if {$key eq
[string tolower
$name]} {
60 proc get-test-names output
{
62 foreach line
[split $output "\n"] {
63 lassign
[split $line ","] key value
64 set key
[string tolower
[string range
$key 1 end-1
]]
70 proc combine-results
{results
} {
71 set tests
[get-test-names
[lindex $results 1]]
74 foreach {branch output
} $results {
75 puts [format "%-20s %s" \
76 $branch [get-result-with-name
$output $test]]
83 # Note: the first branch is only used in order to get the redis-benchmark
84 # executable. Tests are performed starting from the second branch.
86 slowset
2.2.0 2.4.0 unstable slowset
88 set results
[run-tests
$branches]
89 puts [combine-results
$results]
92 # Force the user to run the script from the 'utils' directory.
93 if {![file exists speed-regression.tcl
]} {
94 puts "Please make sure to run speed-regression.tcl while inside /utils."
95 puts "Example: cd utils; ./speed-regression.tcl"
99 # Make sure there is not already a server runnign on port 12123
100 set is_not_running
[catch {set r
[redis
127.0.0.1 $::port]}]
101 if {!$is_not_running} {
102 puts "Sorry, you have a running server on port $::port"