Red Hat Training

A Red Hat training course is available for RHEL 8

34.4. 大量の連続したデータストリームのスループットの向上

IEEE 802.3 標準によれば、仮想ローカルエリアネットワーク (VLAN) タグのないデフォルトのイーサネットフレームの最大サイズは 1518 バイトです。これらの各フレームには 18 バイトのヘッダーが含まれて、ペイロード用に 1500 バイトが残されます。したがって、サーバーがネットワーク経由で送信するデータの 1500 バイトごとに、18 バイト (1.2%) のイーサネットフレームヘッダーがオーバーヘッドとなって送信されます。レイヤー 3 およびレイヤー 4 プロトコルのヘッダーにより、パケットあたりのオーバーヘッドがさらに増加します。

ネットワーク上のホストが、多数の連続したデータストリーム (バックアップサーバーや多数の巨大なファイルをホストするファイルサーバーなど) を頻繁に送信する場合は、オーバーヘッドを節約するためにジャンボフレームの採用を検討してください。ジャンボフレームは、標準のイーサネットペイロードサイズである 1500 バイトよりも大きな最大伝送単位 (MTU) を持つ非標準フレームです。たとえば、最大許容 MTU が 9000 バイトのペイロードでジャンボフレームを設定すると、各フレームのオーバーヘッドは 0.2% に減少します。

ネットワークとサービスによっては、クラスターのストレージバックエンドなど、ネットワークの特定の部分でのみジャンボフレームを有効にすることが有益な場合があります。これにより、パケットの断片化が回避されます。

34.4.1. ジャンボフレームを設定する前の考慮事項

ネットワーク内のハードウェア、アプリケーション、サービスに応じて、ジャンボフレームはさまざまな影響を与える可能性があります。ジャンボフレームを有効にすることがシナリオにメリットをもたらすかどうかを慎重に考慮して決定してください。

前提条件

伝送パス上のすべてのネットワークデバイスはジャンボフレームをサポートし、同じ最大伝送単位 (MTU) サイズを使用する必要があります。逆の場合は、次の問題に直面する可能性があります。

  • ドロップされたパケット
  • 断片化されたパケットが原因の遅延が大きい
  • 断片化によるパケットロスのリスクの増加。たとえば、ルーターが 1 つの 9000 バイトフレームを 6 つの 1500 バイトフレームに分割し、それらの 1500 バイトフレームのいずれかが失われた場合、フレーム全体は再設定できないため失われます。

次の図では、ネットワーク A のホストがネットワーク C のホストにパケットを送信する場合、3 つのサブネット内のすべてのホストが同じ MTU を使用する必要があります。

ネットワークダイアグラム MTU

ジャンボフレームの利点

  • より高いスループット: 各フレームにはより多くのユーザーデータが含まれますが、プロトコルオーバーヘッドは固定されています。
  • CPU 使用率の低下: ジャンボフレームにより発生する割り込みが少なくなるため、CPU サイクルが節約されます。

ジャンボフレームの欠点

  • 遅延が大きい: フレームが大きいと、後続のパケットが遅延します。
  • メモリーバッファーの使用量の増加: フレームが大きくなると、バッファーキューメモリーがより早くいっぱいになる可能性があります。

34.4.2. 既存の NetworkManager 接続プロファイルでの MTU の設定

ネットワークでデフォルトとは異なる最大伝送単位 (MTU) が必要な場合は、対応する NetworkManager 接続プロファイルでこの設定を設定できます。

ジャンボフレームは、1500 - 9000 バイトのペイロードを持つネットワークパケットです。同じブロードキャストドメイン内のすべてのデバイスは、これらのフレームをサポートする必要があります。

前提条件

  • ブロードキャストドメイン内のすべてのデバイスが同じ MTU を使用している。
  • ネットワークの MTU を把握している。
  • 不一致の MTU を使用するネットワークの接続プロファイルがすでに設定されている。

手順

  1. オプション: 現在の MTU を表示します。

    # ip link show
    ...
    3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:74:79:56 brd ff:ff:ff:ff:ff:ff
    ...
  2. オプション: NetworkManager 接続プロファイルを表示します。

    # nmcli connection show
    NAME     UUID                                  TYPE      DEVICE
    Example  f2f33f29-bb5c-3a07-9069-be72eaec3ecf  ethernet  enp1s0
    ...
  3. 不一致の MTU を使用してネットワークへの接続を管理するプロファイルに MTU を設定します。

    # nmcli connection modify Example mtu 9000
  4. 接続を再度アクティベートします。

    # nmcli connection up Example

検証

  1. MTU 設定を表示します。

    # ip link show
    ...
    3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:74:79:56 brd ff:ff:ff:ff:ff:ff
    ...
  2. 伝送パス上にパケットを断片化するホストがないことを確認します。

    • 受信側で、カーネルの IP 再構築統計を表示します。

      # nstat -az IpReasm*
      #kernel
      IpReasmTimeout 0 0.0
      IpReasmReqds 0 0.0
      IpReasmOKs 0 0.0
      IpReasmFails 0 0.0

      カウンターが 0 を返した場合、パケットは再構築されていません。

    • 送信者側で、prohibit-fragmentation-bit を指定して ICMP リクエストを送信します。

      # ping -c1 -Mdo -s 8972 destination_host

      コマンドが成功した場合、パケットは断片化されていません。

      -s パケットサイズオプションの値を次のように計算します。MTU サイズ - 8 バイト ICMP ヘッダー - 20 バイト IPv4 ヘッダー = パケットサイズ