Правильный способ измерения производительности оверлейной сети

В настоящее время я изучаю производительность (особенно пропускную способность UDP) различных оверлейных сетей Docker. Я делаю это путем создания двухточечных соединений между двумя хостами, которые связаны с оверлейной сетью Docker, а затем запускаю iperf внутри контейнеров Docker для проверки пропускной способности. Я заметил, что каждый раз, когда я запускаю iperf в качестве клиента для отправки данных в другой контейнер, который запускает iperf в качестве сервера, загрузка ЦП клиентского хоста достигает 100%. Я получил этот результат, выполнив следующую команду, которую нашел в здесь :

top -bn1 | grep "Cpu(s)" | \
       sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
       awk '{print 100 - $1"%"}'

Итак, мне кажется, что ограничивающим фактором моих тестов пропускной способности является мощность ЦП моего хоста, поскольку он работает на 100 % и не может генерировать дополнительный трафик для насыщения сетевого подключения. Мне интересно, связана ли это с iperf , поэтому я хотел провести те же тесты с другим инструментом, но не уверен , какая альтернатива будет лучше . Хосты работают под управлением Ubuntu. Например, я нашел qperf , uperf и netpipe .

Кроме того, в более общем плане я начал задаваться вопросом, что обычно является узким местом для производительности. Разве Всегда ли это либо мощность CPU , либо пропускная способность канала? Эти факторы не имеют прямого отношения к оверлейным сетям.

Означает ли это, что пропускная способность приложения (или оверлейной сети) просто зависит от того, сколько циклов ЦП ему нужно для передачи определенного количества данных и как оно сжимает он должен проходить через сеть (если это будет узким местом).

7
задан 23 May 2017 в 15:41
1 ответ

UDP ограничивает как процессор, так и полосу пропускания . Он отправляет пакеты, не гарантируя, что они отправлены, переданы или получены.

  • Если ЦП отправителя слишком занят, пакет никогда не отправляется.
  • Если пропускная способность не справляется, пакеты отбрасываются в пути.

    • 12242] Если ЦП приемника слишком занят или не готов обрабатывать входящие сетевые данные, он теряется.
    • Если приложение не извлекает пакеты из ОС (и не обрабатывает их) достаточно быстро, они теряются.

    Вообще говоря, производительность UDP бессмысленна. Ничто не мешает попробовать отправить 1 миллиард пакетов в секунду. Это загружает ЦП отправителя и сеть, в то время как получатель может ничего не получить.

    Если вы действительно хотите протестировать UDP, это довольно длинная тема, достойная отдельной книги. Для начала вам необходимо отслеживать частоту ошибок и то, какие данные фактически отправляются / принимаются.

    Вы должны протестировать TCP, чтобы измерить доступную пропускную способность между хостами. iperf должен уметь это делать нормально.

1
ответ дан 2 December 2019 в 23:51

Теги

Похожие вопросы