From ae9a6125065a9e87f2d2854e9b3e0f9e2a99e450 Mon Sep 17 00:00:00 2001 From: James Ainslie <42301770+jamesainslie@users.noreply.github.com> Date: Mon, 30 Mar 2026 08:16:45 -0400 Subject: [PATCH] docs: add benchmark results to README (85K msg/s on 32-core EPYC) --- CHANGELOG.md | 4 ++++ README.md | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0404f6e..0ef2591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Performance benchmarks in README (32-core AMD EPYC-Milan: 30.9K msg/s 1P/1C, 85.6K msg/s 4P/4C) + ### Fixed - Publisher disconnects under sustained high-throughput load due to blocking inbox send stalling heartbeat processing diff --git a/README.md b/README.md index b48f50d..952b439 100644 --- a/README.md +++ b/README.md @@ -282,6 +282,22 @@ curl http://localhost:15672/api/healthchecks/node curl -u guest:guest http://localhost:15672/api/definitions > backup.json ``` +## Performance + +Benchmarked on a **32-core AMD EPYC-Milan** (251 GB RAM, Linux 6.17) using `gomqperf` with 16-byte messages, auto-ack, and prefetch 1000. All tests run over TCP loopback (not embedded). + +| Scenario | GoMQ | Notes | +|----------|------|-------| +| 1 publisher, 1 consumer | **30,900 msg/s** | 500K messages, p99 latency 3.1s | +| 4 publishers, 4 consumers | **85,600 msg/s** | 1M messages, p99 latency 718ms | +| 1 publisher, 1 consumer (macOS, embedded) | **47,600 msg/s** | 500K messages, p99 latency 72ms | +| 4 publishers, 4 consumers (macOS, embedded) | **73,600 msg/s** | 1M messages | + +For context, RabbitMQ 4.1 on the same hardware achieves ~35,000 msg/s (1P/1C) and ~90,000 msg/s (4P/4C). LavinMQ (Crystal) reports 800,000 msg/s on a 2-vCPU ARM instance — GoMQ's architecture is the same but Go's goroutine scheduler has higher overhead than Crystal's cooperative fibers. Performance optimization is ongoing. + +> **Test environment:** AMD EPYC-Milan, 32 cores, 251 GB RAM, Linux 6.17.0, ext4, loopback TCP. +> Benchmarks are end-to-end (publish → route → persist → deliver → consume) with latency measured via embedded nanosecond timestamps. + ## Benchmarking GoMQ includes `gomqperf`, a built-in load testing tool: