В настоящее время я изучаю производительность (особенно пропускную способность 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 , либо пропускная способность канала? Эти факторы не имеют прямого отношения к оверлейным сетям.
Означает ли это, что пропускная способность приложения (или оверлейной сети) просто зависит от того, сколько циклов ЦП ему нужно для передачи определенного количества данных и как оно сжимает он должен проходить через сеть (если это будет узким местом).
UDP ограничивает как процессор, так и полосу пропускания . Он отправляет пакеты, не гарантируя, что они отправлены, переданы или получены.
Вообще говоря, производительность UDP бессмысленна. Ничто не мешает попробовать отправить 1 миллиард пакетов в секунду. Это загружает ЦП отправителя и сеть, в то время как получатель может ничего не получить.
Если вы действительно хотите протестировать UDP, это довольно длинная тема, достойная отдельной книги. Для начала вам необходимо отслеживать частоту ошибок и то, какие данные фактически отправляются / принимаются.
Вы должны протестировать TCP, чтобы измерить доступную пропускную способность между хостами. iperf
должен уметь это делать нормально.