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

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

Бенчмарки

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

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

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

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

Оба сценария построены на PUSH/PULL, поверх двух транспортов, на которых работает этот крейт: tcp:// на loopback и ipc://. Они различаются путём сообщения через ядро ОС и ничем больше, поэтому пара показывает, какая доля стоимости приходится на сокет.

Второй конец каждого цикла - сокет в том же процессе, потому что узлы ZeroMQ общаются напрямую, как объясняет страница Методология.

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

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

Результаты​

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

ruststream-zeromq 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.10-x64v3-xanmod1-1, none: ZeroMQ has no broker, so the peer is a PUSH socket in the same process, over tcp:// on the loopback and over ipc://, with default socket options (the zeromq crate exposes no high-water mark), измерено 2026-10-18. Как сняты числа

PUSH/PULL over tcp:// on the loopback, 512 B JSON
  • неразличимо
  • неразличимо
PUSH/PULL over ipc://, 512 B JSON
  • неразличимо
  • +3.4%
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
PUSH/PULL over tcp:// on the loopback, 512 B JSON241 721 msg/s (237 164)238 327 msg/s (237 795) (неразличимо к клиенту)241 545 msg/s (231 957)неразличимо
PUSH/PULL over ipc://, 512 B JSON972 020 msg/s (955 055)952 265 msg/s (934 673) (неразличимо к клиенту)939 038 msg/s (936 838)+3.4%
Стоимость кода

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

Инструкции
Выделения
PUSH/PULL on the loopback, JSON decode into a small struct, ack each
5 036,1
5
DEALER/ROUTER on the loopback, answered to the requesting peer
13 686
18
PUSH/PULL on the loopback, in batches of 64 assembled on the client
5 017,1
5
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
PUSH/PULL on the loopback, JSON decode into a small struct, ack each5 036,151 075 776 / 614
DEALER/ROUTER on the loopback, answered to the requesting peer13 686181 090 494 / 632
PUSH/PULL on the loopback, in batches of 64 assembled on the client5 017,151 082 736 / 618

Машина​

Процессор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
Транспортnone: ZeroMQ has no broker, so the peer is a PUSH socket in the same process, over tcp:// on the loopback and over ipc://, with default socket options (the zeromq crate exposes no high-water mark)
Круговая задержкаtcp:// 15.8 us, ipc:// 11.1 us (20000 REQ/REP exchanges on the same transport, outside every loop)
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-zeromq 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 этой версии, который записывает рецепт бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они позволяют сделать, - страница Числа.