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

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

Числа

Что измеряют числа бенчмарков ruststream-rumqttc и каких выводов они сделать не позволяют.

Сравнение с сырым клиентом​

Три цикла одной строки сравнимы между собой: они шли в одном процессе, чередуясь, на одном сервере. Со строкой, которую публикует другой крейт брокера, строка не сравнима: транспорты выполняют на сообщение разную работу.

Сервер работает на той же машине, в контейнере, через loopback. Без сетевой задержки та же стоимость сообщения составляет большую долю времени, чем с сервером за сетью. Читайте процент как верхнюю границу того, во что это обходится развёрнутому сервису.

Строка «неразличимо» - та, где циклы различаются меньше, чем разброс между их кругами. Число ниже этого шума выглядело бы точностью, которую никто не измерял, поэтому оно не публикуется.

Строка «упирается в брокер» - та, где потребитель большую часть прогона ждал сервер. Работа крейта и рантайма тогда укладывается в это ожидание, и разница выходит около нуля. Это нижняя граница стоимости, а не её измерение. Доставка с QoS 1 стоит одну круговую задержку, а доставка с QoS 0 - ни одной, поэтому такую пометку может получить только строка QoS 1.

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

Счёт инструкций включает код этого крейта, рантайм над ним и работу rumqttc на потоке сервиса: чтение в цикле событий, декодирование пакета протокола, диспетчеризацию и PUBACK. Он немного меняется от прогона к прогону, потому что сервер настоящий. Тот же счёт стоит больше времени там, где код промахивается мимо кэша, поэтому счёт инструкций - не время.

Каждое число - установившийся режим, разность между прогоном на 500 доставок и прогоном на 1000. Подключение, подписка и первые выделения памяти за ними - холодный старт, который оплачивается один раз.

Чего они не значат​

Строка - это одна подписка, которая читает одну тему, небольшое тело и один сервер. Она измеряет, сколько стоит доставка внутри этого крейта, а не сколько способен пропустить MQTT.

Группа совместной подписки, пересекающиеся фильтры, пул партиций воркеров и QoS 2 отвечают каждый на свой вопрос, и сравнение не измеряет ни один из них. График кода считает обработчик пакетов и ответ на том же стенде.

Числа - снимок одной машины в один день, а рядом с ними записана сборка. Их перемеряют вручную, когда на машине не идёт другой замер, и рядом записывают среднюю загрузку. Нагруженная машина расширяет разброс между раундами, а строка внутри этого разброса считается indistinguishable.