Skip to main content

Performance Report

All benchmarks use the msg_gen request-response benchmark with 1KB messages. A client sends requests to a server, which replies immediately. The client controls the number of messages in flight for pipelining.

caution

Performance varies significantly across cloud VM pairs even within the same provider. Compare results across platforms with caution.


Benchmark Setup

Start the Machnet Docker container on both client and server:

# Server
./machnet.sh --mac <server_MAC> --ip <server_IP>

# Client
./machnet.sh --mac <client_MAC> --ip <client_IP>

Run msg_gen:

MSG_GEN="docker run -v /var/run/machnet:/var/run/machnet \
ghcr.io/microsoft/machnet/machnet:latest \
release_build/src/apps/msg_gen/msg_gen"

# Server
${MSG_GEN} --local_ip <server_IP> --msg_size 1024

# Client: Latency test (1 message in flight)
${MSG_GEN} --local_ip <client_IP> --remote_ip <server_IP> \
--msg_window 1 --tx_msg_size 1024

# Client: Throughput test (32 messages in flight)
${MSG_GEN} --local_ip <client_IP> --remote_ip <server_IP> \
--msg_window 32 --tx_msg_size 1024

Results: Cloud VMs

PlatformNIC / DriverTestP50P99P99.9RPC/s
Azure F8s_v2CX4-Lx, netvscLatency18 us19 us25 us54K
Throughput41 us54 us61 us753K
AWS c5.xlargeENA, enaLatency42 us66 us105 us22K
Throughput61 us132 us209 us122K

Azure VMs tested without proximity placement groups. AWS VMs tested with proximity groups and --msg_window 8.


Results: Bare Metal

HardwareNIC / DriverTestP50P99P99.9RPC/s
Intel E810 PFiceLatency18 us21 us22 us55K
Mariner 2.0Throughput30 us33 us37 us1,043K
Intel E810 VFiavfLatency18 us22 us22 us55K
Mariner 2.0Throughput31 us35 us41 us1,003K
Bluefield-2mlx5Latency9 us12 us13 us99K
Ubuntu 22.04Throughput24 us26 us28 us1,320K

Highlights

  • 750K+ RPC/s on a single Azure VM pair with 61 us P99.9
  • 1.3M+ RPC/s on bare metal with Bluefield-2 at 28 us P99.9
  • 9 us P50 latency on Bluefield-2 — approaching hardware limits
  • Single-message latency consistently under 25 us on all platforms

Reproduce These Results

All benchmarks can be reproduced using the msg_gen tool included in the Docker image. See the Quick Start Guide for setup instructions.