Disable Erlang busy wait by default
By disabling Erlang busy wait threshold CPU usage with 5000 idle connection
drops from 110% to 14%. Throughput does not seem to be affected at all,
if any thing it actually goes up a bit when you have 5000 idle connections
(because less CPU cycles are wasted polling idle connections).
rabbitmq-perf-test-2.13.0/bin/runjava com.rabbitmq.perf.PerfTest -s 8000 -z 15
With default erlang busy wait threshold:
id: test-115706-497, sending rate avg: 39589 msg/s
id: test-115706-497, receiving rate avg: 39570 msg/s
With busy wait disabled:
id: test-115807-719, sending rate avg: 40340 msg/s
id: test-115807-719, receiving rate avg: 40301 msg/s
rabbitmq-diagnostics runtime_thread_stats output while running the
PerfTest:
with default busy wait threshold:
Stats per type:
         async    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
           aux    0.01%    0.00%    0.00%    0.00%    0.00%    0.00%   99.98%
dirty_cpu_sche    0.00%    0.00%    0.00%    0.03%    0.05%    0.00%   99.92%
dirty_io_sched    0.00%    0.00%    0.00%    0.00%    0.01%    0.00%   99.99%
          poll    0.00%    0.67%    0.00%    0.00%    0.00%    0.00%   99.33%
     scheduler    0.69%    0.18%   28.41%    5.49%    9.50%    7.43%   48.29%
without busy wait threshold:
Stats per type:
         async    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
           aux    0.01%    0.00%    0.00%    0.00%    0.01%    0.00%   99.98%
dirty_cpu_sche    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
dirty_io_sched    0.00%    0.00%    0.00%    0.00%    0.00%    0.00%  100.00%
          poll    0.00%    0.77%    0.00%    0.00%    0.00%    0.00%   99.23%
     scheduler    0.70%    0.14%   28.29%    5.41%    0.86%    7.22%   57.38%
			
			
This commit is contained in:
		
							parent
							
								
									7725db9b82
								
							
						
					
					
						commit
						413bfe7b37
					
				|  | @ -119,8 +119,12 @@ DEFAULT_MAX_NUMBER_OF_ATOMS=5000000 | |||
| [ -n "$MAX_NUMBER_OF_ATOMS" ] || MAX_NUMBER_OF_ATOMS="$DEFAULT_MAX_NUMBER_OF_ATOMS" | ||||
| [ -n "$RABBITMQ_MAX_NUMBER_OF_ATOMS" ] || RABBITMQ_MAX_NUMBER_OF_ATOMS="$MAX_NUMBER_OF_ATOMS" | ||||
| 
 | ||||
| DEFAULT_SCHEDULER_BUSY_WAIT_THRESHOLD=none | ||||
| [ -n "$SCHEDULER_BUSY_WAIT_THRESHOLD" ] || SCHEDULER_BUSY_WAIT_THRESHOLD="$DEFAULT_SCHEDULER_BUSY_WAIT_THRESHOLD" | ||||
| [ -n "$RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD" ] || RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD="$SCHEDULER_BUSY_WAIT_THRESHOLD" | ||||
| 
 | ||||
| ## Common server defaults | ||||
| SERVER_ERL_ARGS=" +P $RABBITMQ_MAX_NUMBER_OF_PROCESSES +t $RABBITMQ_MAX_NUMBER_OF_ATOMS +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE " | ||||
| SERVER_ERL_ARGS=" +P $RABBITMQ_MAX_NUMBER_OF_PROCESSES +t $RABBITMQ_MAX_NUMBER_OF_ATOMS +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE +sbwt $RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD +sbwtdcpu $RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD +sbwtdio $RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD " | ||||
| 
 | ||||
| ##--- Set environment vars RABBITMQ_<var_name> to defaults if not set | ||||
| 
 | ||||
|  |  | |||
|  | @ -88,8 +88,16 @@ if "!RABBITMQ_MAX_NUMBER_OF_ATOMS!"=="" ( | |||
|     set RABBITMQ_MAX_NUMBER_OF_ATOMS=!DEFAULT_MAX_NUMBER_OF_ATOMS! | ||||
| ) | ||||
| 
 | ||||
| set DEFAULT_SCHEDULER_BUSY_WAIT_THRESHOLD=none | ||||
| if "!RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD!"=="" ( | ||||
|     set RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD=!SCHEDULER_BUSY_WAIT_THRESHOLD! | ||||
| ) | ||||
| if "!RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD!"=="" ( | ||||
|     set RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD=!DEFAULT_SCHEDULER_BUSY_WAIT_THRESHOLD! | ||||
| ) | ||||
| 
 | ||||
| REM Common server defaults | ||||
| set SERVER_ERL_ARGS=+P !RABBITMQ_MAX_NUMBER_OF_PROCESSES! +t !RABBITMQ_MAX_NUMBER_OF_ATOMS! +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE! | ||||
| set SERVER_ERL_ARGS=+P !RABBITMQ_MAX_NUMBER_OF_PROCESSES! +t !RABBITMQ_MAX_NUMBER_OF_ATOMS! +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE! +sbwt !RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD! +sbwtdcpu !RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD! +sbwtdio !RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD! | ||||
| 
 | ||||
| REM ##--- Set environment vars RABBITMQ_<var_name> to defaults if not set | ||||
| 
 | ||||
|  |  | |||
|  | @ -126,3 +126,34 @@ setup() { | |||
|     echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +t 4000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS" | ||||
|     [[ $RABBITMQ_SERVER_ERL_ARGS == *" +t 4000000 "* ]] | ||||
| } | ||||
| 
 | ||||
| @test "default Erlang scheduler busy wait threshold" { | ||||
|     source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env" | ||||
|     echo $RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD | ||||
| 
 | ||||
|     echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +sbwt none ', but got: $RABBITMQ_SERVER_ERL_ARGS" | ||||
|     [[ $RABBITMQ_SERVER_ERL_ARGS == *" +sbwt none "* ]] | ||||
| } | ||||
| 
 | ||||
| @test "can configure Erlang scheduler busy wait threshold via conf file" { | ||||
|     echo 'SCHEDULER_BUSY_WAIT_THRESHOLD=medium' > "$RABBITMQ_CONF_ENV_FILE" | ||||
|     source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env" | ||||
| 
 | ||||
|     echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +sbwt medium ', but got: $RABBITMQ_SERVER_ERL_ARGS" | ||||
|     [[ $RABBITMQ_SERVER_ERL_ARGS == *" +sbwt medium "* ]] | ||||
| } | ||||
| 
 | ||||
| @test "can configure Erlang scheduler busy wait threshold via env" { | ||||
|     RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD=long source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env" | ||||
| 
 | ||||
|     echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +sbwt long ', but got: $RABBITMQ_SERVER_ERL_ARGS" | ||||
|     [[ $RABBITMQ_SERVER_ERL_ARGS == *" +sbwt long "* ]] | ||||
| } | ||||
| 
 | ||||
| @test "Erlang scheduler busy wait threshold env takes precedence over conf file" { | ||||
|     echo 'SCHEDULER_BIND_TYPE=s' > "$RABBITMQ_CONF_ENV_FILE" | ||||
|     RABBITMQ_SCHEDULER_BUSY_WAIT_THRESHOLD=short source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env" | ||||
| 
 | ||||
|     echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +sbwt short ', but got: $RABBITMQ_SERVER_ERL_ARGS" | ||||
|     [[ $RABBITMQ_SERVER_ERL_ARGS == *" +sbwt short "* ]] | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue