ジャンボフレーム
Wikipedia より:
- コンピュータネットワークにおいて、ジャンボフレームとは 1,500 バイト以上の通信量 (MTU) を持つ Ethernet フレームのことを指す。基本、ジャンボフレームは 9,000 バイトまでの通信を運ぶことができるが、決まった数値はないため注意が必要である。大抵の Gigabit Ethernet スイッチや Gigabit Ethernet ネットワークインターフェイスカードはジャンボフレームに対応しているが、全てではない。また Fast Ethernet スイッチや Fast Ethernet ネットワークインターフェイスカードは通常容量のフレームしかサポートしていない。
MTU の値を大きくする (ジャンボフレーム) ことでネットワークの転送速度は跳ね上がります。
注意事項
標準にない MTU 容量を使用した場合、e1000e など、特定のカーネルドライバーでは CPU が C3 の C ステートに入れないようになります。詳しくは開発者のコメントを参照: bugzilla #77361。
要件
- GigLAN のバックボーン (1000baseT)
- ローカル PC のローカル NIC がジャンボフレーム (JF) に対応していること
- スイッチが JF に対応していること
設定
以下のように mtu パラメータを付けて ip
を実行してください:
# ip link set ethx mtu <size>
ethx
は使用するイーサネットアダプタ (eth0, eth1 など) に、<size>
は使用したいフレームのサイズ (1500, 4000, 9000) に置き換えてください。
設定が適用されたことは ip link show | grep mtu
で確認できます。
例:
$ ip link show | grep mtu
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 4000 qdisc pfifo_fast state UP qlen 1000 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
Systemd ユニット
設定を永続するには、systemd ユニットを作成します:
/etc/systemd/system/setmtu@.service
[Unit] Description=Set mtu on device Before=network.target [Service] Type=oneshot EnvironmentFile=/etc/conf.d/setmtu ExecStart=/usr/bin/ip link set dev %i up mtu ${%i} [Install] WantedBy=multi-user.target
次に設定を作成します。必要に応じて調整してください。一行ごとに一つのデバイスを設定します:
/etc/conf.d/setmtu
eth0=4000
上記の設定で eth0
の mtu が 4000 になります。
サービスと設定を作成したらデバイス名を指定してサービスを有効化してください (上記の例なら、サービス名は setmtu@eth0.service
となります)。
Netctl
netctl でアダプタを設定している場合、ネットワークプロファイルで ExecUpPost
変数を使って mtu を永続的に設定することもできます:
ExecUpPost='/usr/bin/ip link set eth0 mtu 4000'
サンプル
最適な設定を確認するために、実際にファイル転送を行なってみて様々なフレームサイズをテストすることは重要です。ジャンボフレームにおいて万能のサイズはありません。事実、以下で示しているように、ハードウェアによっては、フレームサイズを大きくしすぎるとネットワークのスループットが落ちてしまうこともあります。
以下では複数の異なる状況 (巨大なファイルが単体の場合と小さなファイルが多数の場合) で3つの異なるフレームサイズ (標準の 1500, ジャンボの 4000, ジャンボの 9000) をテストしています。テストしたハードウェアでは、フレームサイズは 4000 にするのが一番良い結果が得られました。どのハードウェアでもこうなるというわけではありません。自分で実際にフレームサイズを様々に変更し、ファイルを転送してみて効果を評価してください。
マシン A とマシン B は2004年以前に製造された EIDE ハードドライブを使っています。新しい SATA II HDD や MB ではもっと高いスループットが出るはずです。また、両方のマシンでは D-Link 530T NIC (PCI バス) を使用しており、表に示したフレームサイズ (1500, 4000, 9000) を使うように設定されています。
テスト 1 - Samba で単体の巨大なファイルを転送 (1,048,522 kb)
経過時間やスループットは3回実行した結果の平均です。
mtu=1500 | t (秒) | Kb/秒 | mtu=4000 | t (秒) | Kb/秒 | mtu=9000 | t (秒) | Kb/秒 | ||
A から B | 48 | 21,844 | A から B | 44 | 23,830 | A から B | 49 | 21,398 | ||
B から A | 81 | 12,945 | B から A | 41 | 25,574 | B から A | 41 | 25,574 |
テスト 1 のまとめ
4k vs. 1.5k | % 変化 | 9k vs. 1.5k | % 変化 | |
A から B | +9 % | A から B | -2 % | |
B から A | +98 % | B から A | +98 % |
テスト 2 - Samba で複数の小さなファイルを転送 (合計で 1,283,439 kb)
経過時間やスループットは3回実行した結果の平均です。
mtu=1500 | t (秒) | Kb/秒 | mtu=4000 | t (秒) | Kb/秒 | mtu=9000 | t (秒) | Kb/秒 | ||
A から B | 59 | 21,753 | A から B | 51 | 25,165 | A から B | 57 | 22,516 | ||
B から A | 94 | 13,654 | B から A | 46 | 27,901 | B から A | 49 | 26,193 |
テスト 2 のまとめ
4k vs. 1.5k | % 変化 | 9k vs. 1.5k | % 変化 | |
A から B | +16 % | A から B | +4 % | |
B から A | +4% | B から A | +92 % |
長時間の転送速度
4k ジャンボフレームを使用した 30 GB 以上のファイル転送の平均速度は 26.6 MB/s でした。リンクの一番低速なドライブは Western Digital WD3200JB - 2004年製造, EIDE 320 GB (ATA100/7200 RPM/8 MB キャッシュ) でした。ネットワークのバースト速度 (300-400 MB ファイル) はドライブ間のバースト速度の約 80% になりました。悪くない値です (ネットワーク速度が 30 MB/s でドライブの速度が 38 MB/s)。
ジャンボフレームを使用する LAN 構成
PC1 (JF 有効) PC2 (JF 有効) <----> Gigabit Ethernet スイッチ (JF 有効) <----> ルーター (JF 無効) <----> ケーブルモデム (JF 無効) PC3 (JF 有効)
上記の例では、PC の NIC は全て JF を使うように設定され、同じく JF を使用する Gigabit Ethernet スイッチに接続されています。スイッチは更にアップリンクポートでルーターに接続されていますが、ルーターではジャンボフレームを使うことはできず、さらにルーターが接続するケーブルモデムもジャンボフレームを使用しません。
一部のウェブサイトが何を言っていようと、上記の構成は 100% 問題なく動作します。ネットワーク内の JF が有効になった転送 (スイッチ間) は非常に高速です。PC から WAN (インターネット) への転送速度は JF が無効になっている場合と変わりません。