Konfigurowanie maksymalnej jednostki transmisji (MTU) dla maszyn wirtualnych na platformie Azure
Maksymalna jednostka transmisji (MTU) to pomiar reprezentujący największą ramkę ethernet (pakiet) przesyłaną przez urządzenie sieciowe lub interfejs. Jeśli pakiet przekroczy największy rozmiar zaakceptowany przez urządzenie, pakiet zostanie podzielony na wiele mniejszych pakietów, a następnie ponownie zmontowany w miejscu docelowym.
Fragmentacja i ponowne zbieranie mogą powodować problemy z wydajnością i kolejnością, co skutkuje nieoptymalnym środowiskiem. Optymalizacja jednostki MTU dla rozwiązania może zapewnić korzyści z wydajności przepustowości sieci, zmniejszając całkowitą liczbę pakietów wymaganych do wysłania zestawu danych. Konfiguracja większych rozmiarów jednostek MTU może potencjalnie zwiększyć przepływność sieci, ponieważ zmniejsza liczbę pakietów i obciążenie nagłówka wymagane do wysłania zestawu danych.
MtU to konfigurowalne ustawienie w systemie operacyjnym maszyny wirtualnej. Domyślne ustawienie jednostki MTU na platformie Azure to 1500 bajtów.
Maszyny wirtualne na platformie Azure mogą obsługiwać większą jednostki MTU niż 1500 bajtów tylko dla ruchu, który pozostaje w sieci wirtualnej.
W poniższej tabeli przedstawiono największy rozmiar jednostki MTU obsługiwany w interfejsach sieciowych platformy Azure dostępnych na platformie Azure:
System operacyjny | Interfejs sieciowy | Największa liczba jednostek MTU dla ruchu między sieciami wirtualnymi |
---|---|---|
Windows Server | Mellanox Cx-3, Cx-4, Cx-5 | 3900 Podczas ustawiania wartości jednostki MTU na Set-NetAdapterAdvancedProperty wartość użyj wartości 4088 .. Aby utrwalać ponowne rozruchy, wartość zwracana przez Test-Connection program musi być również ustawiona za pomocą polecenia Set-NetIPInterface . |
Windows Server | (Wersja zapoznawcza) Microsoft Azure Network Adapter MANA | 9000 Podczas ustawiania wartości jednostki MTU na Set-NetAdapterAdvancedProperty wartość użyj wartości .9014 Aby utrwalać ponowne rozruchy, wartość zwracana przez Test-Connection program musi być również ustawiona za pomocą polecenia Set-NetIPInterface . |
Linux | Mellanox Cx-3, Cx-4, Cx-5 | 3900 |
Linux | (Wersja zapoznawcza) Karta sieciowa platformy Microsoft Azure | 9000 |
Wymagania wstępne
Konto platformy Azure z aktywną subskrypcją. Utwórz je bezpłatnie.
Dwie maszyny wirtualne z systemem Linux w tej samej sieci wirtualnej na platformie Azure. Aby uzyskać więcej informacji na temat tworzenia maszyny wirtualnej z systemem Linux, zobacz Tworzenie maszyny wirtualnej z systemem Linux w witrynie Azure Portal. Do ukończenia artykułu wymagany jest zdalny dostęp do maszyn wirtualnych. Aby uzyskać więcej informacji na temat bezpiecznego nawiązywania połączenia z usługą Azure Virtual Machines, zobacz Co to jest usługa Azure Bastion?
- Na potrzeby tego artykułu maszyny wirtualne mają nazwy vm-1 i vm-2. Zastąp te wartości swoimi wartościami.
Przykłady zasobów
Poniższe zasoby są używane jako przykłady w tym artykule. Zastąp te wartości swoimi wartościami.
Zasób | Nazwisko | Adres IP |
---|---|---|
Maszyna wirtualna 1 | vm-1 | 10.0.0.4 |
Maszyna wirtualna 2 | vm-2 | 10.0.0.5 |
Środki ostrożności
Maszyny wirtualne na platformie Azure mogą obsługiwać większą jednostki MTU niż 1500 bajtów tylko dla ruchu, który pozostaje w sieci wirtualnej. Większa funkcja MTU nie jest obsługiwana w scenariuszach poza ruchem maszyn wirtualnych między sieciami wirtualnymi. Ruch przechodzący przez bramy, komunikację równorzędną lub do Internetu może nie być obsługiwany. Konfiguracja większej jednostki MTU może spowodować fragmentację i zmniejszenie wydajności. W przypadku ruchu korzystającego z tych scenariuszy użyj domyślnej 1500 bajtowej jednostki MTU do testowania, aby zapewnić obsługę większej jednostki MTU w całej ścieżce sieciowej.
Optymalne jednostki MTU to system operacyjny, sieć i aplikacja specyficzna. Maksymalna obsługiwana funkcja MTU może nie być optymalna dla twojego przypadku użycia.
Zawsze przetestuj zmiany ustawień jednostki MTU w środowisku niekrytycznym przed zastosowaniem szeroko lub do środowisk krytycznych.
Odnajdywanie ścieżki jednostki MTU
Ważne jest, aby zrozumieć jednostki MTU obsługiwane przez ścieżkę sieci używaną przez aplikację lub maszyny. Odnajdywanie jednostki MTU ścieżki to metoda, która umożliwia znalezienie największej obsługiwanej jednostki MTU między adresem źródłowym i docelowym. Użycie większej jednostki MTU niż jest obsługiwane między adresem źródłowym i docelowym powoduje fragmentację, co może negatywnie wpłynąć na wydajność.
W tym artykule przedstawiono przykłady używane do testowania ścieżki jednostki MTU między dwiema maszynami wirtualnymi. Kolejne testy można wykonać z maszyny wirtualnej do dowolnego miejsca docelowego routingu.
Wykonaj poniższe kroki, aby ustawić większy rozmiar jednostki MTU na źródłowej i docelowej maszynie wirtualnej. Sprawdź ścieżkę MTU za pomocą skryptu powłoki dla systemu Linux lub programu PowerShell dla systemu Windows. Jeśli większe jednostki MTU nie są obsługiwane, wyniki wyświetlane w teście odnajdywania ścieżki jednostki MTU różnią się od ustawień skonfigurowanych w źródłowym lub docelowym interfejsie maszyny wirtualnej.
Skrypt powłoki jest dostępny w galerii przykładów platformy Azure. Pobierz skrypt dla systemu Linux z następującego linku i zapisz go w maszynach vm-1 i vm-2.
Aby zmienić rozmiar jednostki MTU na maszynie wirtualnej z systemem Linux, wykonaj następujące kroki:
Logowanie do maszyny wirtualnej VM-1
ip
Użyj polecenia , aby wyświetlić bieżące interfejsy sieciowe i ich ustawienia jednostki MTU, Zapisz adres IP dla kolejnych kroków. W tym przykładzie adres IP to 10.0.0.4 , a interfejs Ethernet to 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
Ustaw wartość jednostki MTU na maszynie wirtualnej vm-1 na najwyższą wartość obsługiwaną przez interfejs sieciowy. W tym przykładzie nazwa interfejsu sieciowego to eth0. Zastąp tę wartość wartością.
- W przypadku adaptera Mellanox użyj następującego przykładu, aby ustawić wartość jednostki MTU na 3900:
echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
- W przypadku karty sieciowej platformy Microsoft Azure użyj następującego przykładu, aby ustawić wartość jednostki MTU na wartość 9000:
echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Ważne
Zmiany jednostki MTU wprowadzone w poprzednich krokach nie są utrwalane podczas ponownego uruchamiania. Aby wprowadzić zmiany na stałe, zapoznaj się z odpowiednią dokumentacją dystrybucji systemu Linux.
ip
Użyj polecenia , aby sprawdzić, czy ustawienia jednostki MTU są stosowane do interfejsu sieciowego: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
Zaloguj się do maszyny wirtualnej vm-2 , aby powtórzyć poprzednie kroki, aby ustawić wartość jednostki MTU na najwyższą wartość obsługiwaną przez interfejs sieciowy.
Zaloguj się do maszyny wirtualnej vm-1.
Użyj poniższego przykładu, aby wykonać skrypt powłoki systemu Linux w celu przetestowania największego rozmiaru jednostki MTU, który może być używany dla określonej ścieżki sieciowej. Zastąp wartość hosta docelowego adresem IP maszyny wirtualnej vm-2.
./GetPathMtu.sh 10.0.0.5
Dane wyjściowe będą podobne do poniższego przykładu. Jeśli dane wyjściowe skryptu nie wyświetlają ustawienia w interfejsie sieciowym, oznacza to, że rozmiar jednostki MTU nie jest poprawnie ustawiony. Alternatywnie może to oznaczać, że urządzenie sieciowe wzdłuż ścieżki obsługuje tylko rozmiar jednostki MTU zwrócony przez skrypt GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5 destination: 10.0.0.5 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Sprawdź rozmiar jednostki MTU w interfejsie sieciowym przy użyciu polecenia
PING
. W przypadku systemu Linux użyj flag -M, -s i -c. Opcja -M powoduje, że polecenie ping nie fragmentuje, -s ustawia rozmiar pakietu, a -c ustawia liczbę poleceń ping do wysłania. Aby określić rozmiar pakietu, odejmij 28 z ustawienia jednostki 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
Wskazanie niezgodności ustawień między źródłem a miejscem docelowym jest wyświetlane jako komunikat o błędzie w danych wyjściowych. W takim przypadku funkcja MTU nie jest ustawiona w źródłowym interfejsie sieciowym.
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
Zaloguj się do maszyny wirtualnej vm-2.
Użyj poniższego przykładu, aby uruchomić skrypt powłoki systemu Linux, aby przetestować największy rozmiar jednostki MTU, który może być używany dla określonej ścieżki sieciowej:
./GetPathMtu.sh 10.0.0.4
Dane wyjściowe będą podobne do poniższego przykładu. Jeśli dane wyjściowe skryptu nie wyświetlają ustawienia w interfejsie sieciowym, oznacza to, że rozmiar jednostki MTU nie jest poprawnie ustawiony. Alternatywnie może to oznaczać, że urządzenie sieciowe wzdłuż ścieżki obsługuje tylko rozmiar jednostki MTU zwrócony przez skrypt GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4 destination: 10.0.0.4 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
Sprawdź rozmiar jednostki MTU w interfejsie sieciowym przy użyciu polecenia
PING
. W przypadku systemu Linux użyj flag -M, -s i -c. Opcja -M powoduje, że polecenie ping nie fragmentuje, -s ustawia rozmiar pakietu, a -c ustawia liczbę poleceń ping do wysłania. Aby określić rozmiar pakietu, odejmij 28 z ustawienia jednostki 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
Wskazanie niezgodności ustawień między źródłem a miejscem docelowym jest wyświetlane jako komunikat o błędzie w danych wyjściowych. W takim przypadku funkcja MTU nie jest ustawiona w źródłowym interfejsie sieciowym.
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
Cofnij zmiany
Aby przywrócić zmiany wprowadzone w tym artykule, wykonaj następujące czynności:
Zaloguj się do maszyny wirtualnej vm-1.
Użyj następującego przykładu, aby ustawić wartość jednostki MTU na wartość domyślną 1500:
echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
Ważne
Zmiany jednostki MTU wprowadzone w poprzednich krokach nie są utrwalane podczas ponownego uruchamiania. Aby wprowadzić zmiany na stałe, zapoznaj się z odpowiednią dokumentacją dystrybucji systemu Linux.
ip
Użyj polecenia , aby sprawdzić, czy ustawienia jednostki MTU są stosowane do interfejsu sieciowego: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
Zaloguj się do maszyny wirtualnej vm-2 , aby powtórzyć poprzednie kroki, aby ustawić wartość jednostki MTU na wartość domyślną 1500.
Powiązana zawartość
- Omówienie karty sieciowej platformy Microsoft Azure (MANA).