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

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

Бенчмарки

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

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

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

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

Два сценария различаются типом подписки. Для каждого сообщения подписки Shared сервер ведёт счётчик повторных доставок, а для подписки Exclusive не ведёт. Оба сценария используют один консьюмер, поэтому их разделяет именно этот учёт, а не стоимость совместного чтения.

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

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

Результаты​

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

ruststream-pulsar 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.11-x64v3-xanmod1-1, apachepulsar/pulsar:4.1.2 in Docker on localhost, измерено 2026-10-18. Как сняты числа

Exclusive subscription, 128 B JSON, ack each
  • неразличимо
  • неразличимо (упирается в брокер)
Shared subscription, 128 B JSON, ack each
  • неразличимо
  • неразличимо (упирается в брокер)
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
Exclusive subscription, 128 B JSON, ack each27 594 msg/s (27 518)27 656 msg/s (27 554) (неразличимо к клиенту)27 652 msg/s (27 586)неразличимо (упирается в брокер)
Shared subscription, 128 B JSON, ack each27 720 msg/s (27 716)27 662 msg/s (27 548) (неразличимо к клиенту)27 710 msg/s (27 408)неразличимо (упирается в брокер)
Стоимость кода

AMD Ryzen 9 7900X 12-Core Processor, x86_64, 427-5912 MHz, 12 physical, 24 logical, 62.4 GiB, unknown, Linux 7.2.11-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-pulsar default (none), ruststream macros,json. ruststream-pulsar 0.7.0, ruststream 0.7.0, измерено 2026-10-18.

Инструкции
Выделения
shared subscription, JSON decode into a small struct, ack each
58 724,1
18,9
reply through this crate's publisher, broker receipt awaited
120 058,1
38
shared subscription in batches of 64, assembled on the client
59 643,5
18,2
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
shared subscription, JSON decode into a small struct, ack each58 724,118,9603 714 / 277
reply through this crate's publisher, broker receipt awaited120 058,138622 642 / 293
shared subscription in batches of 64, assembled on the client59 643,518,2614 552 / 281

Машина​

ПроцессорAMD Ryzen 9 7900X 12-Core Processor
Архитектураx86_64
Частота427-5912 MHz
Ядра12 physical, 24 logical
Память62.4 GiB
Скорость памятиunknown
Операционная системаLinux 7.2.11-x64v3-xanmod1-1
Брокерapachepulsar/pulsar:4.1.2 in Docker on localhost
Круговая задержка0.047 ms round trip
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-pulsar 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 этой версии, который записывает рецепт бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они позволяют сделать, - страница Числа.