@@ -8,25 +8,48 @@ module ProfMem
88 module_function
99
1010 ATTEMPT_COUNT = 1000
11+ MAX_PIPELINE_SIZE = 30
12+ SLICED_NUMBERS = Array . new ( ATTEMPT_COUNT ) { |i | i } . each_slice ( MAX_PIPELINE_SIZE ) . freeze
13+ CLI_TYPES = %w[ primary_only scale_read_random scale_read_latency pooled ] . freeze
14+ MODES = {
15+ single : lambda do |client_builder_method |
16+ cli = send ( client_builder_method )
17+ ATTEMPT_COUNT . times { |i | cli . call ( 'SET' , i , i ) }
18+ ATTEMPT_COUNT . times { |i | cli . call ( 'GET' , i ) }
19+ end ,
20+ excessive_pipelining : lambda do |client_builder_method |
21+ cli = send ( client_builder_method )
22+ cli . pipelined do |pi |
23+ ATTEMPT_COUNT . times { |i | pi . call ( 'SET' , i , i ) }
24+ end
1125
12- def run
13- %w[ primary_only scale_read_random scale_read_latency pooled ] . each do |cli_type |
14- prepare
15- print_letter ( cli_type , 'w/ pipelining' )
16- profile do
17- send ( "new_#{ cli_type } _client" . to_sym ) . pipelined do |pi |
18- ATTEMPT_COUNT . times { |i | pi . call ( 'SET' , i , i ) }
19- ATTEMPT_COUNT . times { |i | pi . call ( 'GET' , i ) }
26+ cli . pipelined do |pi |
27+ ATTEMPT_COUNT . times { |i | pi . call ( 'GET' , i ) }
28+ end
29+ end ,
30+ pipelining_in_moderation : lambda do |client_builder_method |
31+ cli = send ( client_builder_method )
32+ SLICED_NUMBERS . each do |numbers |
33+ cli . pipelined do |pi |
34+ numbers . each { |i | pi . call ( 'SET' , i , i ) }
35+ end
36+
37+ cli . pipelined do |pi |
38+ numbers . each { |i | pi . call ( 'GET' , i ) }
2039 end
2140 end
41+ end
42+ } . freeze
2243
44+ def run
45+ mode = ENV . fetch ( 'MEMORY_PROFILE_MODE' , :single ) . to_sym
46+ subject = MODES . fetch ( mode )
47+
48+ CLI_TYPES . each do |cli_type |
2349 prepare
24- print_letter ( cli_type , 'w/o pipelining' )
25- profile do
26- cli = send ( "new_#{ cli_type } _client" . to_sym )
27- ATTEMPT_COUNT . times { |i | cli . call ( 'SET' , i , i ) }
28- ATTEMPT_COUNT . times { |i | cli . call ( 'GET' , i ) }
29- end
50+ print_letter ( mode , cli_type )
51+ client_builder_method = "new_#{ cli_type } _client" . to_sym
52+ profile { subject . call ( client_builder_method ) }
3053 end
3154 end
3255
0 commit comments