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