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

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

Бенчмарки

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

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

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

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

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

В строке воспроизведения RustStream выходит быстрее сырого клиента, а собственный цикл крейта идёт с ним вровень. Подписка крейта читает с опережением в собственной задаче, поэтому следующее сообщение уже прочитано из файла, пока обрабатывается текущее. Написанный вручную сырой цикл читает и обрабатывает в одной задаче.

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

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

Результаты​

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

ruststream-sea-file 0.7.0 on ruststream 0.7.0, AMD Ryzen 9 7900X 12-Core Processor, Linux 7.2.11-x64v3-xanmod1-1, none: the transport is a stream file on this machine's filesystem, измерено 2026-10-18. Как сняты числа

replay of a recorded stream file, 512 B JSON
  • неразличимо
  • -41.4%
live tail of a file being appended to, 512 B JSON
  • неразличимо
  • +3.3% (упирается в хранилище)
Показать числа таблицей
СценарийСырой клиентКрейт брокераRustStreamОверхед
replay of a recorded stream file, 512 B JSON226 428 msg/s (206 683)227 695 msg/s (225 547) (неразличимо к клиенту)320 151 msg/s (313 104)-41.4%
live tail of a file being appended to, 512 B JSON68 880 msg/s (68 702)68 090 msg/s (67 417) (неразличимо к клиенту)66 630 msg/s (65 933)+3.3% (упирается в хранилище)
Стоимость кода

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

Инструкции
Выделения
consume, JSON decode into a small struct
52 957
32,5
reply, appended to the same file by this crate's publisher
81 033,3
73,3
consume in batches of 64, assembled on the client
52 971,1
32,5
Показать числа таблицей
СценарийИнструкцииВыделенияХолодный старт
consume, JSON decode into a small struct52 95732,5194 100 / 236
reply, appended to the same file by this crate's publisher81 033,373,3196 968 / 245
consume in batches of 64, assembled on the client52 971,132,5221 502 / 247

Машина​

Процессор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
Брокерnone: the transport is a stream file on this machine's filesystem
Файловая системаbtrfs on /dev/nvme2n1p1
Размер файла потока0.71 GiB per run at its largest
Страничный кэшwarm: every run writes its stream file immediately before reading it back, so the figures are the filesystem's rather than the device's
Одна дозапись18.0 us per flushed append
Компилятор1.99.0
Профиль сборкиbench, inheriting release (opt-level = 3, lto = fat, codegen-units = 16, debug = line-tables-only)
Фичиruststream-sea-file 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 этой версии, который записывает рецепт бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они позволяют сделать, - страница Числа.