Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Бенчмарки
Во что 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. Как сняты числа
- неразличимо
- -41.4%
- неразличимо
- +3.3% (упирается в хранилище)
Показать числа таблицей
| Сценарий | Сырой клиент | Крейт брокера | RustStream | Оверхед |
|---|---|---|---|---|
| replay of a recorded stream file, 512 B JSON | 226 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 JSON | 68 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 | 194 100 / 236 |
| reply, appended to the same file by this crate's publisher | 81 033,3 | 73,3 | 196 968 / 245 |
| consume in batches of 64, assembled on the client | 52 971,1 | 32,5 | 221 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 |
| RUSTFLAGS | none (the recipe clears RUSTFLAGS, so the numbers are not tied to this CPU) |
| Valgrind | 3.25.1 |
Транспорт здесь - файл, поэтому место сервера брокера занимает файловая система, и числа принадлежат ей в той же мере, что и этому крейту. «Одна дозапись» - время одной дозаписи, сброшенной в файл, измеренное отдельно.
Числа берутся из файла docs/benchmarks/results.json этой версии, который записывает рецепт
бенчмарков. Как они сняты, объясняет страница Методология, а какие выводы они
позволяют сделать, - страница Числа.