次の方法で共有


Azure で仮想マシンの最大転送単位 (MTU) を構成する

最大転送単位 (MTU) は、ネットワーク デバイスまたはインターフェイスによって送信されるイーサネット フレーム (パケット) の最大サイズを表す測定値です。 パケットがデバイスで許容される最大サイズを超えた場合、パケットは複数の小さなパケットに断片化され、後で送信先において再構築されます。

断片化と再構築により、パフォーマンスと順序の問題が発生し、エクスペリエンスが最適でなくなる可能性があります。 ソリューション用に MTU を最適化すると、データセットの送信に必要なパケットの総数が減るため、ネットワーク帯域幅のパフォーマンスに関して利点があります。 MTU サイズをより大きく構成すると、データセットの送信に必要なパケット数とヘッダー オーバーヘッドが減り、ネットワーク スループットが向上する可能性があります。

MTU は、仮想マシンのオペレーティング システムで構成可能な設定です。 Azure での MTU の設定の既定値は 1,500 バイトです。

Azure の VM は、仮想ネットワーク内に留まるトラフィックに対してのみ、既定値の 1,500 バイトよりも大きな MTU をサポートすることができます。

次の表は、Azure で使用できる Azure ネットワーク インターフェイスでサポートされている最大 MTU サイズを示しています。

オペレーティング システム ネットワーク インターフェイス 仮想ネットワーク内トラフィックの最大 MTU
Windows Server Mellanox Cx-3、Cx-4、Cx-5 3900
Set-NetAdapterAdvancedProperty で MTU の値を設定するとき、値 4088 を使います。 再起動しても維持されるようにするには、Test-Connection によって返された値を Set-NetIPInterface で設定する必要もあります。
Windows Server (プレビュー) Microsoft Azure ネットワーク アダプター MANA 9000
Set-NetAdapterAdvancedProperty で MTU の値を設定するとき、値 9014 を使います。再起動しても維持されるようにするには、Test-Connection によって返された値を Set-NetIPInterface で設定する必要もあります。
Linux Mellanox Cx-3、Cx-4、Cx-5 3900
Linux (プレビュー) Microsoft Azure ネットワーク アダプター 9000

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます

  • Azure の同じ仮想ネットワーク内の 2 つの Linux 仮想マシン。 Linux 仮想マシンの作成について詳しくは、「Azure portal で Linux 仮想マシンを作成する」をご覧ください。 この記事のとおりにするには、仮想マシンへのリモート アクセスが必要です。 Azure Virtual Machines への安全な接続について詳しくは、「Azure Bastion とは」をご覧ください。

    • この記事では、仮想マシンの名前を vm-1vm-2 としています。 これらの値は、実際の値に置き換えてください。

リソースの例

この記事では、次のリソースを例として使用します。 これらの値は、実際の値に置き換えてください。

リソース Name IP アドレス
仮想マシン 1 vm-1 10.0.0.4
仮想マシン 2 vm-2 10.0.0.5

注意事項

  • Azure の仮想マシンは、仮想ネットワーク内に留まるトラフィックに対してのみ、既定値の 1,500 バイトよりも大きな MTU をサポートすることができます。 より大きな MTU は、仮想ネットワーク内の VM 間トラフィック以外のシナリオではサポートされていません。 ゲートウェイ、ピアリング、またはインターネットを経由するトラフィックはサポートされない場合があります。 大きい MTU を構成すると、断片化が発生し、パフォーマンスが低下する可能性があります。 これらのシナリオを利用するトラフィックの場合は、既定の 1,500 バイトの MTU を使ってテストし、ネットワーク パス全体で大きい MTU がサポートされることを確認してください。

  • 最適な MTU は、オペレーティング システム、ネットワーク、アプリケーションによって異なります。 サポートされる最大 MTU が、ユース ケースによっては最適ではない可能性があります。

  • MTU の設定を変更したら、広範にまたは重要な環境に適用する前に、必ず最初に重要ではない環境でテストしてください。

パス MTU 検出

アプリケーションまたはマシンで使うネットワーク パス全体でサポートされる MTU を理解することが重要です。 パス MTU 検出は、送信元と送信先アドレスの間でサポートされている最大 MTU を調べる手段です。 送信元と送信先アドレスの間でサポートされているものより大きい MTU を使用すると、断片化が発生し、パフォーマンスに悪影響が生じる可能性があります。

この記事で使用する例では、2 つの仮想マシン間の MTU パスをテストしています。 以降のテストは、仮想マシンからルーティング可能な任意の送信先に対して実行できます。

次の手順に従って、送信元と送信先の仮想マシンで大きい MTU サイズを設定します。 Linux の場合はシェル スクリプト、Windows の場合は PowerShell を使って、パス MTU を確認します。 大きい MTU がサポートされていない場合、パス MTU 検出テストの結果には、送信元または送信先の仮想マシンのインターフェイスで構成されている設定とは異なるものが表示されます。

シェル スクリプトは、Azure サンプル ギャラリーで入手できます。 次のリンクから Linux 用のスクリプトをダウンロードし、vm-1vm-2 に保存します。

次の手順に従って、Linux 仮想マシンで MTU サイズを変更します。

  1. vm-1 にサインインします。

  2. ip コマンドを使って、現在のネットワーク インターフェイスとその MTU 設定を表示し、後の手順のために IP アドレスを記録しておきます。 この例では、IP アドレスは 10.0.0.4 で、イーサネット インターフェイスは 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
    
  3. vm-1 の MTU 値を、ネットワーク インターフェイスでサポートされている最大値に設定します。 この例では、ネットワーク インターフェイスの名前は 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 ディストリビューションに応じて適切なドキュメントを参照してください。

  4. 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
    
  5. vm-2 にサインインし、前の手順を繰り返して、MTU 値をネットワーク インターフェイスでサポートされている最大値に設定します。

  6. vm-1 にサインインします。

  7. 次の例に従って Linux シェル スクリプトを実行し、特定のネットワーク パスに使用できる最大 MTU サイズをテストします。 送信先ホストの値を、vm-2 の IP アドレスに置き換えます。

    ./GetPathMtu.sh 10.0.0.5
    
  8. 出力は次の例のようになります。 スクリプトの出力にネットワーク インターフェイスの設定が表示されない場合は、MTU のサイズが正しく設定されていないことを意味します。 または、パス上のネットワーク デバイスが、GetPathMTU スクリプトによって返される MTU サイズしかサポートしていないことを意味する場合があります。

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5
    destination: 10.0.0.5
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  9. PING を使って、ネットワーク インターフェイスの MTU サイズを確認します。 Linux の場合は、-M、-s、-c フラグを使います。 -M オプションは ping を断片化しないように指示し、-s はパケット サイズを設定し、-c は送信する ping の数を設定します。 パケット サイズを決定するには、MTU の設定の 3900 から 28 を引きます。

    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
    
  10. vm-2 にサインインします。

  11. 次の例に従って Linux シェル スクリプトを実行し、特定のネットワーク パスに使用できる最大 MTU サイズをテストします。

    ./GetPathMtu.sh 10.0.0.4
    
  12. 出力は次の例のようになります。 スクリプトの出力にネットワーク インターフェイスの設定が表示されない場合は、MTU のサイズが正しく設定されていないことを意味します。 または、パス上のネットワーク デバイスが、GetPathMTU スクリプトによって返される MTU サイズしかサポートしていないことを意味する場合があります。

    azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4
    destination: 10.0.0.4
    startSendBufferSize: 1200
    interfaceName: Default interface
    Test started ....................................................................................................................................................................................................
    3900
    
  13. PING を使って、ネットワーク インターフェイスの MTU サイズを確認します。 Linux の場合は、-M、-s、-c フラグを使います。 -M オプションは ping を断片化しないように指示し、-s はパケット サイズを設定し、-c は送信する ping の数を設定します。 パケット サイズを決定するには、MTU の設定の 3900 から 28 を引きます。

    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
    

変更を元に戻す

この記事で行った変更を元に戻すには、次の手順に従います。

  1. vm-1 にサインインします。

  2. 次の例に従って、MTU の値を既定値の 1500 に設定します。

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

    重要

    前の手順で行った MTU の変更は、再起動すると維持されません。 変更を永続的なものにするには、Linux ディストリビューションに応じて適切なドキュメントを参照してください。

  3. 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
    
  4. vm-2 にサインインし、前の手順を繰り返して、MTU 値を既定値の 1500 に設定します。