Настройка максимальной единицы передачи (MTU) для виртуальных машин в Azure
Максимальная единица передачи (MTU) — это измерение, представляющее самый большой размер кадра Ethernet (пакет), передаваемый сетевым устройством или интерфейсом. Если пакет превышает самый большой размер, принятый устройством, пакет фрагментируется на несколько небольших пакетов, а затем повторно собирается в месте назначения.
Фрагментация и повторная сборка могут привести к проблемам производительности и упорядочивания, что приводит к неоптимальному интерфейсу. Оптимизация MTU для решения может обеспечить преимущества производительности пропускной способности сети, уменьшая общее количество пакетов, необходимых для отправки набора данных. Настройка более крупных размеров MTU может повысить пропускную способность сети, так как она уменьшает количество пакетов и затрат заголовков, необходимых для отправки набора данных.
MTU — это настраиваемый параметр в операционной системе виртуальной машины. Значение MTU по умолчанию в Azure равно 1500 байтам.
Виртуальные машины в Azure могут поддерживать более крупный MTU, чем 1500-байтовый по умолчанию только для трафика, который остается в виртуальной сети.
В следующей таблице показан самый большой размер MTU, поддерживаемый в сетевых интерфейсах Azure, доступных в Azure:
Операционная система | Сетевой интерфейс | Самый большой MTU для трафика между виртуальными сетями |
---|---|---|
Windows Server | Mellanox Cx-3, Cx-4, Cx-5 | 3900 При задании значения MTU используйте Set-NetAdapterAdvancedProperty значение 4088 .. Чтобы сохранить перезагрузки, необходимо также задать значение, возвращаемое Test-Connection с Set-NetIPInterface помощью . |
Windows Server | (предварительная версия) Microsoft Azure Network Adapter MANA | 9000 При задании значения MTU используйте Set-NetAdapterAdvancedProperty значение. 9014 Чтобы сохранить перезагрузки, необходимо также задать значение, возвращаемое Test-Connection с Set-NetIPInterface помощью . |
Linux | Mellanox Cx-3, Cx-4, Cx-5 | 3900 |
Linux | (предварительная версия) Сетевой адаптер Microsoft Azure | 9000 |
Необходимые компоненты
Учетная запись Azure с активной подпиской. Создайте ее бесплатно.
Две виртуальные машины Linux в одной виртуальной сети в Azure. Дополнительные сведения о создании виртуальной машины Linux см. в статье "Создание виртуальной машины Linux" в портал Azure. Для завершения статьи требуется удаленный доступ к виртуальным машинам. Дополнительные сведения о безопасном подключении к Azure Виртуальные машины см. в статье "Что такое Бастион Azure?"
- В целях этой статьи виртуальные машины называются vm-1 и vm-2. Замените эти значения вашими значениями.
Примеры ресурсов
Следующие ресурсы используются в качестве примеров в этой статье. Замените эти значения вашими значениями.
Ресурс | Имя. | IP-адрес |
---|---|---|
Виртуальная машина 1 | vm-1 | 10.0.0.4 |
Виртуальная машина 2 | vm-2 | 10.0.0.5 |
Профилактика
Виртуальные машины в Azure могут поддерживать более крупный MTU, чем 1500-байтовый по умолчанию только для трафика, который остается в виртуальной сети. Более крупный MTU не поддерживается для сценариев за пределами трафика виртуальной машины между виртуальными машинами и виртуальной машиной. Трафик, проходящий через шлюзы, пиринг или Интернет, может не поддерживаться. Конфигурация большего MTU может привести к фрагментации и снижению производительности. Для трафика, используюющего эти сценарии, используйте 1500 байтов байтов MTU по умолчанию для тестирования, чтобы обеспечить поддержку большего MTU во всем сетевом пути.
Оптимальным MTU является операционная система, сеть и приложение. Максимальный поддерживаемый MTU может быть неоптимальным для вашего варианта использования.
Всегда тестировать изменения параметров MTU в некритической среде, прежде чем применять широко или критически важные среды.
Обнаружение MTU пути
Важно понимать, что MTU поддерживается в сетевом пути, который использует приложение или компьютеры. Обнаружение MTU пути — это средство для обнаружения крупнейшего MTU, поддерживаемого между исходным и целевым адресом. Использование большего MTU, чем поддерживается между исходным и целевым адресом, приводит к фрагментации, что может негативно повлиять на производительность.
В этой статье показано, как проверить путь MTU между двумя виртуальными машинами. Последующие тесты можно выполнять из виртуальной машины в любое маршрутизируемое место назначения.
Чтобы задать размер MTU на исходной и целевой виртуальной машине, выполните следующие действия. Проверьте путь MTU с помощью скрипта оболочки для Linux или PowerShell для Windows. Если более крупный MTU не поддерживается, результаты, отображаемые в тесте обнаружения MTU пути, отличаются от параметров, настроенных в интерфейсе исходной или целевой виртуальной машины.
Скрипт оболочки доступен в коллекции примеров Azure. Скачайте скрипт для Linux со следующей ссылки и сохраните его в vm-1 и vm-2.
Чтобы изменить размер MTU на виртуальной машине Linux, выполните следующие действия.
Вход в vm-1
ip
Используйте команду, чтобы отобразить текущие сетевые интерфейсы и их параметры MTU, запишите IP-адрес для последующих шагов. В этом примере IP-адрес равен 10.0.0.4 , а интерфейс ethernet — eth0.ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
Задайте значение MTU на виртуальной машине-1 самым высоким значением, поддерживаемым сетевым интерфейсом. В этом примере имя сетевого интерфейса — eth0. Замените это значение значением.
- Для адаптера Mellanox используйте следующий пример, чтобы задать значение MTU равным 3900:
echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
- Для сетевого адаптера Microsoft Azure используйте следующий пример, чтобы задать значение MTU равным 9000:
echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Внимание
Изменения MTU, внесенные в предыдущие шаги, не сохраняются во время перезагрузки. Чтобы внести изменения, ознакомьтесь с соответствующей документацией по дистрибутиву Linux.
ip
Используйте команду, чтобы убедиться, что параметры MTU применяются к сетевому интерфейсу:ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
Войдите в vm-2 , чтобы повторить предыдущие шаги, чтобы задать значение MTU самым высоким значением, поддерживаемым сетевым интерфейсом.
Войдите в vm-1.
Используйте следующий пример, чтобы выполнить скрипт оболочки Linux, чтобы проверить самый большой размер MTU, который можно использовать для определенного сетевого пути. Замените значение узла назначения IP-адресом виртуальной машины-2.
./GetPathMtu.sh 10.0.0.5
Результат будет похож на следующий пример. Если выходные данные скрипта не отображают параметр в сетевом интерфейсе, он указывает, что размер MTU не задан правильно. Кроме того, это может означать, что сетевое устройство вдоль пути поддерживает только размер MTU, возвращаемый скриптом GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5 destination: 10.0.0.5 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Проверьте размер MTU в сетевом интерфейсе с помощью
PING
. Для Linux используйте флаги -M, -s и -c. Параметр -M указывает ping to NOT fragment, -s задает размер пакета и -c задает количество ping для отправки. Чтобы определить размер пакета, вычитает 28 из параметра MTU 3900.ping 10.0.0.5 -c 10 -M do -s 3872
azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872 PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data. 3880 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=3.70 ms 3880 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=1.08 ms 3880 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=1.51 ms 3880 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=1.25 ms 3880 bytes from 10.0.0.5: icmp_seq=5 ttl=64 time=1.29 ms 3880 bytes from 10.0.0.5: icmp_seq=6 ttl=64 time=1.05 ms 3880 bytes from 10.0.0.5: icmp_seq=7 ttl=64 time=5.67 ms 3880 bytes from 10.0.0.5: icmp_seq=8 ttl=64 time=1.92 ms 3880 bytes from 10.0.0.5: icmp_seq=9 ttl=64 time=2.72 ms 3880 bytes from 10.0.0.5: icmp_seq=10 ttl=64 time=1.20 ms --- 10.0.0.5 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9014ms rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
Признак несоответствия параметров между источником и назначением отображается в виде сообщения об ошибке в выходных данных. В этом случае MTU не задан в исходном сетевом интерфейсе.
azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872 PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data. ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 --- 10.0.0.5 ping statistics --- 10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
Войдите в vm-2.
Используйте следующий пример для запуска скрипта оболочки Linux для тестирования наибольшего размера MTU, который можно использовать для определенного сетевого пути:
./GetPathMtu.sh 10.0.0.4
Результат будет похож на следующий пример. Если выходные данные скрипта не отображают параметр в сетевом интерфейсе, он указывает, что размер MTU не задан правильно. Кроме того, это может означать, что сетевое устройство вдоль пути поддерживает только размер MTU, возвращаемый скриптом GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4 destination: 10.0.0.4 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Проверьте размер MTU в сетевом интерфейсе с помощью
PING
. Для Linux используйте флаги -M, -s и -c. Параметр -M указывает ping to NOT fragment, -s задает размер пакета и -c задает количество ping для отправки. Чтобы определить размер пакета, вычитает 28 из параметра MTU 3900.ping 10.0.0.4 -c 10 -M do -s 3872
azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872 PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data. 3880 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=3.70 ms 3880 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.08 ms 3880 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=1.51 ms 3880 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.25 ms 3880 bytes from 10.0.0.4: icmp_seq=5 ttl=64 time=1.29 ms 3880 bytes from 10.0.0.4: icmp_seq=6 ttl=64 time=1.05 ms 3880 bytes from 10.0.0.4: icmp_seq=7 ttl=64 time=5.67 ms 3880 bytes from 10.0.0.4: icmp_seq=8 ttl=64 time=1.92 ms 3880 bytes from 10.0.0.4: icmp_seq=9 ttl=64 time=2.72 ms 3880 bytes from 10.0.0.4: icmp_seq=10 ttl=64 time=1.20 ms --- 10.0.0.4 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9014ms rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
Признак несоответствия параметров между источником и назначением отображается в виде сообщения об ошибке в выходных данных. В этом случае MTU не задан в исходном сетевом интерфейсе.
azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872 PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data. ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 --- 10.0.0.4 ping statistics --- 10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
Отменить изменения
Чтобы вернуть изменения, внесенные в эту статью, выполните следующие действия.
Войдите в vm-1.
Используйте следующий пример, чтобы задать значение MTU значением по умолчанию 1500:
echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Внимание
Изменения MTU, внесенные в предыдущие шаги, не сохраняются во время перезагрузки. Чтобы внести изменения, ознакомьтесь с соответствующей документацией по дистрибутиву Linux.
ip
Используйте команду, чтобы убедиться, что параметры MTU применяются к сетевому интерфейсу:ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
Войдите в vm-2 , чтобы повторить предыдущие шаги, чтобы задать значение MTU значением по умолчанию 1500.
Связанный контент
- Обзор сетевого адаптера Microsoft Azure (MANA).