Signal Send/Receive Benchmark Results

This page contains results comparing signal send and receive throughput before and after the parallel signal send optimization. See the commit message of this commit for more information about the optimization.

Benchmark Description

The benchmark lets N Erlang processes send signals (of configurable types and sizes) to a single process during a period of T seconds. Both N and T are configurable variables. A signal with size S has a payload consisting of a list of length S with word-sized (64 bits) items. The send throughput is calculated by dividing the number of signals that are sent by T. The receive throughput is calculated by waiting until all sent signals have been received, and then dividing the total number of signals sent by the time between when the first signal was sent and when the last signal was received.

Benchmark Code

Machine Configuration

Machine:
Microsoft Azure VM instance: Standard D64s v3 (64 vcpus, 256 GB memory):

Operating System:

      Description:	Ubuntu 18.04.2 LTS
      Linux version:	5.4.0-1051-azure
    

Run-time Parameters

The benchmark was started with the parameter "+sbt tnnps".

    erl +sbt tnnps -eval "parallel_messages_SUITE:large_throughput_benchmark(),erlang:halt()"
  

Benchmark Configuration

The benchmark configuration used can be found here.

Results

Notice that every second graph contain send throughput and every second contain receive throughput.

_1_2_4_8_15_16_31_32_47_48_63_64010M20M30M40M50M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {message_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M10M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {message_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6405M10M15M20M25M30M35M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {message_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6401M2M3M4M5M6M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {message_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {message_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.5M1M1.5M2M2.5M3M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {message_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.2M0.4M0.6M0.8M1M1.2M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {message_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.2M0.4M0.6M0.8M1M1.2M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {message_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6401M2M3M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.5M1M1.5M2M2.5M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.5M1M1.5M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.2M0.4M0.6M0.8M1M
Scenario: Send Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.2M0.4M0.6M0.8M1M
Scenario: Receive Throughput, send_duration=1000 ms, 100.000000% {exit_signal_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M10M
Scenario: Send Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,1}, 50.000000% {message_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6401M2M3M4M
Scenario: Receive Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,1}, 50.000000% {message_size,1}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M8M10M
Scenario: Send Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,10}, 50.000000% {message_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.5M1M1.5M2M2.5M
Scenario: Receive Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,10}, 50.000000% {message_size,10}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6402M4M6M
Scenario: Send Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,100}, 50.000000% {message_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.5M1M1.5M2M
Scenario: Receive Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,100}, 50.000000% {message_size,100}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_6400.2M0.4M0.6M0.8M1M1.2M
Scenario: Send Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,1000}, 50.000000% {message_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



_1_2_4_8_15_16_31_32_47_48_63_640200k400k600k800k
Scenario: Receive Throughput, send_duration=1000 ms, 50.000000% {exit_signal_size,1000}, 50.000000% {message_size,1000}, Spawn Options=[{message_queue_data,off_heap}]# of ProcessesOperations/Secondmaster_2ef0cVer: 2 parallel_sigq_658f8



This page generates graphs from data produced by the Message Send/Receive Benchmark which is defined in the function parallel_messages_SUITE:test_throughput_benchmark/1 (see "$ERL_TOP/erts/test/parallel_messages_SUITE.erl").

Note that one can paste results from several benchmark runs into the field below. Results from the same scenario but from different benchmark runs will be relabeled and plotted in the same graph automatically.

Note also that that lines can be hidden by clicking on the corresponding label.

Paste the generated data in the field below and press the Render button:

Include Throughput Plot
Include % More Throughput Than Worst Plot
Include % Less Throughput Than Best Plot
Bar Plot
Same X Spacing Between Points