Aracılığıyla paylaş


Azure'da sanal makineler için Maksimum İletim Birimi 'ni (MTU) yapılandırma

Maksimum İletim Birimi (MTU), bir ağ cihazı veya arabirimi tarafından iletilen en büyük boyutlu Ethernet çerçevesini (paket) temsil eden bir ölçümdür. Paket, cihaz tarafından kabul edilen en büyük boyutu aşarsa, paket birden çok küçük paket halinde parçalanır ve daha sonra hedefte yeniden birleştirilir.

Parçalanma ve yeniden birleştirme, performans ve sıralama sorunlarına yol açarak optimal olmayan bir deneyim ile sonuçlanabilir. Çözümünüz için MTU'nun iyileştirilmesi, veri kümesi göndermek için gereken toplam paket sayısını azaltarak ağ bant genişliği performansı avantajları sağlayabilir. Daha büyük MTU boyutlarının yapılandırılması, veri kümesi göndermek için gereken paket sayısını ve üst bilgi ek yükünü azalttığı için ağ aktarım hızını geliştirebilir.

MTU, sanal makinenin işletim sisteminde yapılandırılabilir bir ayardır. Azure'da varsayılan değer MTU ayarı 1500 bayttır.

Azure'daki VM'ler yalnızca sanal ağ içinde kalan trafik için varsayılan olarak 1.500 bayttan daha büyük MTU'ları destekleyebilir.

Aşağıdaki tabloda, Azure'da kullanılabilen Azure Ağ Arabirimlerinde desteklenen en büyük MTU boyutu gösterilmektedir:

İşletim Sistemi Ağ Arabirimi Sanal ağlar arası trafik için maksimum MTU
Windows Server Mellanox Cx-3, Cx-4, Cx-5 3900
Set-NetAdapterAdvancedProperty ile MTU değerini ayarlarken 4088 değerini kullanın. Yeniden başlatmaları kalıcı hale getirmek için Test-Connection ile döndürülen değerin, Set-NetIPInterface ile ayarlanması gerekir.
Windows Server (Önizleme) Microsoft Azure Ağ Bağdaştırıcısı MANA 9000
MTU değerini ayarlarken Set-NetAdapterAdvancedProperty ile 9014 değerini kullanın.Yeniden başlatmaların ardından ayarların devam etmesi için, Test-Connection tarafından döndürülen değer de Set-NetIPInterface ile ayarlanmalıdır.
Linux işletim sistemi Mellanox Cx-3, Cx-4, Cx-5 3900
Linux işletim sistemi (Önizleme) Microsoft Azure Ağ Bağdaştırıcısı 9.000

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir tane oluşturun.

  • Azure'da aynı sanal ağda bulunan iki Linux sanal makinesi. Linux sanal makinesi oluşturma hakkında daha fazla bilgi için bkz . Azure portalında Linux sanal makinesi oluşturma. Makalenin tamamlanması için sanal makinelere uzaktan erişim gereklidir. Azure Sanal Makineler güvenli bir şekilde bağlanma hakkında daha fazla bilgi için bkz. Azure Bastion nedir?

    • Bu makalenin amaçları doğrultusunda, sanal makineler vm-1 ve vm-2 olarak adlandırılır. Bu değerleri değerlerinizle değiştirin.

Kaynak örnekleri

Bu makalede örnek olarak aşağıdaki kaynaklar kullanılmıştır. Bu değerleri değerlerinizle değiştirin.

Kaynak İsim IP Adresi
Sanal Makine 1 vm-1 10.0.0.4
Sanal Makine 2 vm-2 10.0.0.5

Önlem

  • Azure'daki sanal makineler, varsayılan olarak 1.500 bayttan daha büyük bir MTU'yi yalnızca sanal ağ içinde kalan ve aynı bölgedeki doğrudan eşlenmiş sanal ağlar için destekleyebilir. Ağ geçitleri, küresel eşleştirmeler veya internet aracılığıyla yapılan trafik desteklenmez. Daha büyük bir MTU'nun yapılandırılması parçalanma ve performansın azalmasına neden olabilir. Bu senaryoları kullanan trafik için, ağ yolunun tamamında daha büyük bir MTU'nın desteklendiğinden emin olmak için test için varsayılan 1.500 bayt MTU kullanın.

  • En uygun MTU işletim sistemine, ağa ve uygulamaya özgüdür. Desteklenen en üst düzey MTU, kullanım örneğiniz için en uygun olmayabilir.

  • Geniş kapsamlı veya kritik ortamlara uygulamadan önce her zaman kritik olmayan bir ortamda MTU ayarları değişikliklerini test edin.

Yol MTU Bulma

Uygulamanızın veya makinelerinizin kullandığı ağ yolunda desteklenen MTU'nun anlaşılması önemlidir. Yol MTU keşfi, bir kaynak ve hedef adres arasında desteklenen en büyük MTU'yu bulmanın bir yoludur. Kaynak ve hedef adres arasında desteklenenden daha büyük bir MTU kullanılması parçalanmayla sonuçlanır ve bu da performansı olumsuz etkileyebilir.

Bu makalede, kullanılan örnekler iki sanal makine arasındaki MTU yolunu test eder. Sonraki testler bir sanal makineden herhangi bir yönlendirilebilir hedefe gerçekleştirilebilir.

Kaynak ve hedef sanal makinede daha büyük bir MTU boyutu ayarlamak için aşağıdaki adımları kullanın. Linux için bir kabuk betiği veya Windows için PowerShell ile MTU yolunu doğrulayın. Daha büyük MTU desteklenmiyorsa, MTU bulma testinde gösterilen sonuçlar kaynak veya hedef sanal makine arabiriminde yapılandırılan ayarlardan farklıdır.

Kabuk komut dosyası Azure örnek galerisi içinde mevcuttur. Aşağıdaki bağlantıdan Linux betiğini indirin ve vm-1 ve vm-2'ye kaydedin.

Linux sanal makinesinde MTU boyutunu değiştirmek için aşağıdaki adımları kullanın:

  1. vm-1'de oturum açma

  2. ip Geçerli ağ arabirimlerini ve bunların MTU ayarlarını göstermek için komutunu kullanın. Sonraki adımlar için IP adresini kaydedin. Bu örnekte IP adresi 10.0.0.4, Ethernet arabirimi ise eth0 şeklindedir.

    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
    
  3. vm-1 üzerindeki MTU değerini ağ arabirimi tarafından desteklenen en yüksek değere ayarlayın. Bu örnekte ağ arabiriminin adı eth0'dır. Bu değeri değerinizle değiştirin.

    • Mellanox bağdaştırıcısı için aşağıdaki örneği kullanarak MTU değerini 3900 olarak ayarlayın:
    echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    
    • Microsoft Azure Ağ Bağdaştırıcısı için aşağıdaki örneği kullanarak MTU değerini 9000 olarak ayarlayın:
    echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Önemli

    Önceki adımlarda yapılan MTU değişiklikleri yeniden başlatma sırasında kalıcı olmaz. Değişiklikleri kalıcı hale getirmek için Linux dağıtımınız için uygun belgelere başvurun.

  4. MTU ayarlarının ip ağ arabirimine uygulandığını doğrulamak için komutunu kullanın:

    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
    
  5. Önceki adımları tekrarlayarak MTU değerini ağ arabirimi tarafından desteklenen en yüksek değere ayarlamak için vm-2'de oturum açın.

  6. vm-1'de oturum açın.

  7. Belirli bir ağ yolu için kullanılabilecek en büyük MTU boyutunu test etmek üzere Linux kabuk betiğini yürütmek için aşağıdaki örneği kullanın. Hedef konağın değerini vm-2 IP adresiyle değiştirin.

    ./GetPathMtu.sh 10.0.0.5
    
  8. Çıktı aşağıdaki örneğe benzerdir. Betiğin çıktısı ayarı ağ arabiriminde görüntülemiyorsa, MTU boyutunun doğru ayarlanmadığını gösterir. Alternatif olarak, yol boyunca uzanan bir ağ cihazının yalnızca GetPathMTU betiği tarafından döndürülen MTU boyutunu desteklediği anlamına gelebilir.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. Ağ arabiriminde MTU boyutunu doğrulamak için PING kullanın. Linux için -M, -s ve -c bayraklarını kullanın. -M seçeneği ping'i PARÇALANMADI olarak belirtir, -s paket boyutunu ayarlar ve -c gönderilecek ping sayısını ayarlar. Paket boyutunu belirlemek için 3900 MTU ayarından 28 çıkarın.

    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
    

    Kaynak ve hedef arasındaki ayarlarda uyuşmazlık olduğunu belirten bir gösterge, çıkışta hata iletisi olarak görüntülenir. Bu durumda, MTU kaynak ağ arabiriminde ayarlanmadı.

    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
    
  10. vm-2'de oturum açın.

  11. Belirli bir ağ yolu için kullanılabilecek en büyük MTU boyutunu test etmek üzere Linux kabuk betiğini çalıştırmak için aşağıdaki örneği kullanın:

    ./GetPathMtu.sh 10.0.0.4
    
  12. Çıktı aşağıdaki örneğe benzerdir. Betiğin çıktısı ayarı ağ arabiriminde görüntülemiyorsa, MTU boyutunun doğru ayarlanmadığını gösterir. Alternatif olarak, yol boyunca uzanan bir ağ cihazının yalnızca GetPathMTU betiği tarafından döndürülen MTU boyutunu desteklediği anlamına gelebilir.

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. Ağ arabiriminde MTU boyutunu doğrulamak için PING kullanın. Linux için -M, -s ve -c bayraklarını kullanın. -M seçeneği ping'i PARÇALANMADI olarak belirtir, -s paket boyutunu ayarlar ve -c gönderilecek ping sayısını ayarlar. Paket boyutunu belirlemek için 3900 MTU ayarından 28 çıkarın.

    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
    

    Kaynak ve hedef arasındaki ayarlarda uyuşmazlık olduğunu belirten bir gösterge, çıkışta hata iletisi olarak görüntülenir. Bu durumda, MTU kaynak ağ arabiriminde ayarlanmadı.

    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
    

Değişiklikleri geri al

Bu makalede yapılan değişiklikleri geri almak için aşağıdaki adımları kullanın:

  1. vm-1'de oturum açın.

  2. MTU değerini varsayılan 1500 değerine ayarlamak için aşağıdaki örneği kullanın:

    echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
    

    Önemli

    Önceki adımlarda yapılan MTU değişiklikleri yeniden başlatma sırasında kalıcı olmaz. Değişiklikleri kalıcı hale getirmek için Linux dağıtımınız için uygun belgelere başvurun.

  3. MTU ayarlarının ip ağ arabirimine uygulandığını doğrulamak için komutunu kullanın:

    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
    
  4. MTU değerini varsayılan değer olan 1500 olarak ayarlamak üzere önceki adımları yinelemek için vm-2'de oturum açın.