Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Бенчмарки
Во что ruststream-lapin обходится на каждом сообщении: пропускная способность против сырого
клиента lapin, инструкции и выделения памяти его кода.
Против сырого клиента
Первый график прогоняет один сценарий тремя способами на настоящем узле RabbitMQ. «Сырой клиент» -
это lapin, которым напрямую управляет цикл, написанный вручную. «Крейт брокера» - тот же
цикл поверх этого крейта: брокер, дескриптор очереди, поток подписки, собственный ack
доставки и его издатель, без рантайма вокруг. «RustStream» - сервис, который пишет пользователь: обработчик #[subscriber] в
приложении, публикующий через того же издателя. Первая разность показывает, сколько этот крейт
стоит поверх клиента, которого он оборачивает, а вторая - сколько сверху добавляет рантайм.
Каждый цикл изображён полосой от лучшего круга до самого медленного: точка отмечает лучший круг, засечка - медиану. Ноль оси - лучший круг сырого клиента, и точка правее нуля значит, что цикл медленнее. Пустая точка отмечает цикл, у которого разница с сырым клиентом меньше разброса кругов. Таблица под графиком печатает лучший круг, а в скобках медиану.
Два сценария - это два типа очередей, которые есть в RabbitMQ. Классическая очередь держит сообщения в памяти и закрывает доставку одним кадром. Кворумная очередь реплицирует каждое сообщение по Raft и записывает его на диск, прежде чем отдать, и настолько дорогой транспорт почти не оставляет места тому, что работает над ним.
Стоимость кода
Второй график считает, во что обходится одно сообщение на потоке сервиса: инструкции под
callgrind и выделения памяти под DHAT, в установившемся режиме. Каждый сценарий - сервис на
LapinBroker против того же узла. В счёт входят диспетчеризация фреймворка, кодек, код этого
крейта и работа, которую lapin делает на этом потоке. Читает и пишет сокет lapin в собственном
потоке, и этот поток в счёт не входит. Большая часть выделений памяти в каждой строке - выделения
клиента: каждое подтверждение и каждая публикация заводят на потоке сервиса обещания и внутреннюю
задачу. «Холодный старт» - разовая цена соединения, открытия каналов, объявления очереди,
регистрации потребителя и первой доставки.
Результаты
- Сырой клиент
- Крейт брокера
- RustStream
- круги, от лучшего до самого медленного
- лучший круг
- медианный круг
- разброс кругов
- неразличимо
ruststream-lapin 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.10-x64v3-xanmod1-1, rabbitmq:4-management-alpine in Docker on localhost, измерено 2026-10-18. Как сняты числа
- неразличимо
- неразличимо
- неразличимо
- неразличимо
Показать числа таблицей
| Сценарий | Сырой клиент | Крейт брокера | RustStream | Оверхед |
|---|---|---|---|---|
| Classic queue, 512 B JSON, ack each | 63 187 msg/s (62 538) | 63 001 msg/s (62 226) (неразличимо к клиенту) | 61 650 msg/s (60 015) | неразличимо |
| Quorum queue, 512 B JSON, ack each | 33 202 msg/s (32 709) | 32 788 msg/s (32 446) (неразличимо к клиенту) | 33 272 msg/s (33 183) | неразличимо |
AMD Ryzen 9 7900X 12-Core Processor, x86_64, 427-5912 MHz, 12 physical, 24 logical, 62.4 GiB, unknown, Linux 7.2.10-x64v3-xanmod1-1, 1.99.0, 3.25.1, bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only), ruststream-lapin default (none), ruststream macros,json. ruststream-lapin 0.7.0, ruststream 0.7.0, измерено 2026-10-18.
Показать числа таблицей
| Сценарий | Инструкции | Выделения | Холодный старт |
|---|---|---|---|
| classic queue, JSON decode into a small struct, ack each | 14 617 | 16 | 370 049 / 217 |
| classic queue, reply published through LapinPublish | 22 145,8 | 27 | 367 859 / 219 |
| classic queue, batches of 64 assembled on the client | 14 994,4 | 16,3 | 377 775 / 223 |
Машина
| Процессор | AMD Ryzen 9 7900X 12-Core Processor |
|---|---|
| Архитектура | x86_64 |
| Частота | 427-5912 MHz |
| Ядра | 12 physical, 24 logical |
| Память | 62.4 GiB |
| Скорость памяти | unknown |
| Операционная система | Linux 7.2.10-x64v3-xanmod1-1 |
| Брокер | rabbitmq:4-management-alpine in Docker on localhost |
| Круговая задержка | 69.8 us for one basic.qos answered by the server |
| Компилятор | 1.99.0 |
| Профиль сборки | bench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only) |
| Фичи | ruststream-lapin default (none), ruststream macros,json |
| RUSTFLAGS | none (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU) |
| Valgrind | 3.25.1 |
Числа взяты из docs/benchmarks/results.json этой версии, который записывает рецепт бенчмарков.
Методология объясняет, как их сняли, а Числа - какие выводы они
позволяют сделать.