Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Бенчмарки

Во что 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. Как сняты числа

Classic queue, 512 B JSON, ack each
  • неразличимо
  • неразличимо
Quorum queue, 512 B JSON, ack each
  • неразличимо
  • неразличимо
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
Classic queue, 512 B JSON, ack each63 187 msg/s (62 538)63 001 msg/s (62 226) (неразличимо к клиенту)61 650 msg/s (60 015)неразличимо
Quorum queue, 512 B JSON, ack each33 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
classic queue, reply published through LapinPublish
22 145,8
27
classic queue, batches of 64 assembled on the client
14 994,4
16,3
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
classic queue, JSON decode into a small struct, ack each14 61716370 049 / 217
classic queue, reply published through LapinPublish22 145,827367 859 / 219
classic queue, batches of 64 assembled on the client14 994,416,3377 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
RUSTFLAGSnone (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU)
Valgrind3.25.1

Числа взяты из docs/benchmarks/results.json этой версии, который записывает рецепт бенчмарков. Методология объясняет, как их сняли, а Числа - какие выводы они позволяют сделать.