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

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

Бенчмарки

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

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

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

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

Два сценария соответствуют двум уровням качества обслуживания, на которых читает сервис. При QoS 0 сервер отправляет каждое сообщение и ничего не завершает. При QoS 1 сервис подтверждает каждую доставку пакетом протокола PUBACK, как показывает страница Путь.

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

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

Результаты​

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

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

QoS 0 topic, 512 B JSON
  • неразличимо
  • неразличимо
QoS 1 topic, 512 B JSON, ack each
  • неразличимо
  • неразличимо (упирается в брокер)
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
QoS 0 topic, 512 B JSON154 259 msg/s (151 130)152 504 msg/s (137 593) (неразличимо к клиенту)153 188 msg/s (151 410)неразличимо
QoS 1 topic, 512 B JSON, ack each118 899 msg/s (118 745)117 722 msg/s (116 990) (неразличимо к клиенту)118 792 msg/s (116 403)неразличимо (упирается в брокер)
Стоимость кода

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

Инструкции
Выделения
QoS 1 topic, JSON decode into a small struct, ack each
8 769,5
1,2
QoS 1 topic, reply published through this crate's publisher
17 331,2
7,2
QoS 1 topic, batches of 64 assembled on the client
9 087,7
1,2
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
QoS 1 topic, JSON decode into a small struct, ack each8 769,51,23 820 572 / 67
QoS 1 topic, reply published through this crate's publisher17 331,27,23 828 301 / 74
QoS 1 topic, batches of 64 assembled on the client9 087,71,23 827 348 / 71

Машина​

Процессор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
Брокерeclipse-mosquitto:2 in Docker on localhost
Круговая задержка41.8 microseconds, measured as a QoS 1 publish whose PUBACK the client waits for, averaged over 20,000 exchanges on a connection of its own
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-rumqttc default (none), ruststream macros,json
RUSTFLAGSnone (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU)
Средняя загрузка9.15 / 10.95 / 9.58 over 1, 5 and 15 minutes when the run ended
Valgrind3.25.1

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