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

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

Бенчмарки

Во что ruststream-amqp обходится на каждом сообщении: пропускная способность против сырого клиента fe2o3-amqp, инструкции и выделения памяти его кода.

Против сырого клиента​

Первый график прогоняет один сценарий тремя способами на настоящем брокере AMQP 1.0, ActiveMQ Artemis. «Сырой клиент» напрямую работает с получателем fe2o3-amqp. «Крейт брокера» читает подписку этого крейта собственным циклом, без рантайма. «RustStream» - сервис, который пишет пользователь: обработчик #[subscriber] в приложении. Первая разность показывает, сколько этот крейт стоит поверх клиента, которого он оборачивает, а вторая - сколько сверху добавляет рантайм.

Каждый цикл изображён полосой от лучшего круга до самого медленного: точка отмечает лучший круг, засечка - медиану. Ноль оси - лучший круг сырого клиента, и точка правее нуля значит, что цикл медленнее. Пустая точка отмечает цикл, у которого разница с сырым клиентом меньше разброса кругов. Таблица под графиком печатает лучший круг, а в скобках медиану.

Точка левее нуля, если она появляется, отмечает цикл быстрее сырого клиента. Сырой цикл держит по одной доставке, и пока он декодирует и урегулирует её, сокет никто не читает. Подписка этого крейта читает вперёд, в канал глубиной в кредит связи, поэтому следующая доставка уже на месте, когда цикл её запрашивает.

Стоимость кода​

Второй график считает, во что обходится одно сообщение на потоке сервиса: инструкции под callgrind и выделения памяти под DHAT, в установившемся режиме. Каждый сценарий - сервис на AmqpBroker против того же брокера. В счёт входят диспетчеризация фреймворка, код этого крейта, а также разбор кадров и декодирование клиента fe2o3-amqp: они выполняются на этом потоке как задачи соединения. Брокер - отдельный процесс, и его работа в счёт не входит. «Холодный старт» - разовая стоимость подключения сервиса, присоединения его подписки и получения первой доставки.

Результаты​

Против сырого клиентаНасколько каждый цикл отстаёт от лучшего круга сырого клиента
  • Сырой клиент
  • Крейт брокера
  • RustStream
  • круги, от лучшего до самого медленного
  • лучший круг
  • медианный круг
  • разброс кругов
  • неразличимо

ruststream-amqp 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.10-x64v3-xanmod1-1, apache/activemq-artemis:latest-alpine in Docker on localhost, измерено 2026-10-18. Как сняты числа

queue, 512 B JSON, accept each
  • +2.5%
  • неразличимо
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
queue, 512 B JSON, accept each182 362 msg/s (182 123)177 811 msg/s (175 870) (+2.5% к клиенту)178 312 msg/s (176 666)неразличимо
Стоимость кода

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-amqp default (none), ruststream macros,json. ruststream-amqp 0.7.0, ruststream 0.7.0, измерено 2026-10-18.

Инструкции
Выделения
queue, JSON decode into a small struct, accept each
28 063,9
17,1
reply through this crate's publisher, accepted by the broker
60 353,8
46,1
queue in batches of 64, assembled on the client
28 743,1
17,4
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
queue, JSON decode into a small struct, accept each28 063,917,1222 777 / 228
reply through this crate's publisher, accepted by the broker60 353,846,1238 499 / 260
queue in batches of 64, assembled on the client28 743,117,4230 614 / 232

Машина​

Процессор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
Брокерapache/activemq-artemis:latest-alpine in Docker on localhost
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-amqp default (none), ruststream macros,json
RUSTFLAGSnone (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU)
Круговая задержка52 us (median of 20000 sends waiting for their disposition)
Valgrind3.25.1

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