The main purpose of the JMH tests below is to compare the Ericsson’s jinterface package and Appulse encon library.

Benchmark host machine

For benchmarking we are using DigitalOcean’s CPU Optimized Droplets:

$> sudo lshw -short
H/W path      Device      Class      Description
================================================
                          system     Droplet
/0                        bus        Motherboard
/0/0                      memory     96KiB BIOS
/0/401                    processor  Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
/0/402                    processor  Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
/0/1000                   memory     4GiB System Memory
/0/1000/0                 memory     4GiB DIMM RAM
/0/100                    bridge     440FX - 82441FX PMC [Natoma]
/0/100/1                  bridge     82371SB PIIX3 ISA [Natoma/Triton II]
/0/100/1.1                storage    82371SB PIIX3 IDE [Natoma/Triton II]
/0/100/1.2                bus        82371SB PIIX3 USB [Natoma/Triton II]
/0/100/1.2/1  usb1        bus        UHCI Host Controller
/0/100/1.3                bridge     82371AB/EB/MB PIIX4 ACPI
/0/100/2                  display    QXL paravirtual graphic card
/0/100/3                  network    Virtio network device
/0/100/3/0    eth0        network    Ethernet interface
/0/100/4                  storage    Virtio SCSI
/0/100/4/0                generic    Virtual I/O device
/0/100/5                  storage    Virtio block device
/0/100/5/0    /dev/vda    disk       26GB Virtual I/O device
/0/100/5/0/1  /dev/vda1   volume     24GiB EXT4 volume
/0/100/5/0/e  /dev/vda14  volume     4095KiB BIOS Boot partition
/0/100/5/0/f  /dev/vda15  volume     105MiB Windows FAT volume
/0/100/6                  generic    Virtio memory balloon
/0/100/6/0                generic    Virtual I/O device
  • JMH version: 1.21

  • VM version: JDK 1.8.0_181, Java HotSpot(TM) 64-Bit Server VM, 25.181-b13

  • VM options: -Xms1G -Xmx2G

  • Warmup: 10 iterations, 10 s each

  • Measurement: 20 iterations, 10 s each

  • Timeout: 10 min per iteration

  • Threads: 1 thread, will synchronize iterations

  • Benchmark mode: Throughput, ops/time

The results

Multi client tests

The installation consist of a server node at separate thread, which echoes the messages and N-threads-clients, which pitch the messages and receive it back.

implementation clients score error units
encon 1 11679.266 414.090 ops/s
jinterface 1 11862.914 385.573 ops/s
encon 2 22337.500 918.292 ops/s
jinterface 2 18217.878 861.270 ops/s
encon 4 36001.870 2033.472 ops/s
jinterface 4 23202.485 1295.186 ops/s
encon 8 44742.858 1865.853 ops/s
jinterface 8 23495.184 671.766 ops/s

Mailbox to mailbox

In this test we have only one node and two mailboxes which send the message to each other.

implementation score error units
encon 4080746.356 79809.419 ops/s
jinterface 4885380.490 61920.971 ops/s