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