shimauma YOROZU memo

学んだこと、やったこと、感じたことのメモ

Proxmox VE 8 での 2.5Gbps / MTU 9000 化

背景・環境

背景

Proxmox VE 上に VM を立てて使っている中で、 NAS との転送速度や待ちがネックになってきて(いると感じて)いました。
それを少しでも軽減するため、以下の対応を実施しました。

  • 有線 LAN 環境の 2.5Gbps 化
  • Jumbo Frame ( MTU 9000 ) 化

環境

自宅の環境は ノートPC を Proxmox VE で仮想化しています。
ノートPC はすべて 1Gbps ポートしかないため、 追加で 2.5Gbps Ethernet Adapter を購入しました。 USB-Type A 接続ですが、 USB 2.0 では理論値で 480Mbps までしかでないため、USB 3.0 ポート ( 理論値 5 Gbps ) を利用しています。 NAS, NW スイッチは以前購入済みのものを利用しています。

2.5Gbps 化

Proxmox VE で利用している IP アドレスを 1Gbps ポートから 2.5Gbps ポートに移動させる方式で対応しました。 NW 切断時間が発生するため、あらかじめ Proxmox VE 上で稼働する VM は 別 HW 上に Migration して実施しています。

作業ステップは以下の通りです

  1. VM の Migration
  2. 1Gbps ケーブル抜線
  3. 2.5Gbps アダプター・ケーブル接続
  4. Proxmox VE 上での 2.5Gbps 利用設定

2.5 Gbps 利用設定

Proxmox VE 上のコンソールから、 ip a コマンドを実行し、 2.5Gbps のアダプター名を確認しました。( 今回は enxc84d4435a2a7
次に /etc/network/interfaces ファイルに以下を追記しました。

  • iface enxc84d4435a2a7 inet manual
  • bridge-ports enxc84d4435a2a7
auto lo
iface lo inet loopback

iface enp0s31f6 inet manual
iface enxc84d4435a2a7 inet manual            ### 追記

auto vmbr0
iface vmbr0 inet static
        address 192.168.x.1/24
        gateway 192.168.x.254
        bridge-ports enxc84d4435a2a7           ### 修正 ( enp0s31f6 -> enxc84d4435a2a7 )
        bridge-stp off
        bridge-fd 0

iface wlp3s0 inet manual

設定後、 再起動を実施し、疎通できることを確認しました。 (再起動ではなく、 ifreload -a でも変更できると思います。)

なお、 ethtool でインターフェースを確認してみると以下の通りとなっており、 2.5Gbps でリンクしていることが確認できました。 (下記コマンド結果 Speed: 2500Mb/s 部分 )

# ethtool enxc84d4435a2a7
Settings for enxc84d4435a2a7:
        Supported ports: [ TP    MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
                                2500baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
                                2500baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Full
                                             2500baseT/Full
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 2500Mb/s
        Duplex: Full
        Auto-negotiation: on
        Port: MII
        PHYAD: 32
        Transceiver: internal
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00007fff (32767)
                               drv probe link timer ifdown ifup rx_err tx_err tx_queued intr tx_done rx_status pktdata hw wol
        Link detected: yes

ブリッジインターフェースも 2.5Gbps となっています。

# ethtool vmbr0
Settings for vmbr0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 2500Mb/s
        Duplex: Unknown! (255)
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
        Link detected: yes

MTU 9000 化 ( Jumbo Frame )

NAS に対しては、比較的大容量のデータのやり取りを行うことが多いため、 同じ機会に Jumbo Frame (MTU 9000) 対応も実施しました。

Jumbo Frame 対応のためには、 NW 経路上の各機器が同じ MTU に対応している必要があります。
今回は下表のとおり、上限は異なるものの Jumbo Frame 対応しているため、全て共通で指定できる 9000 を設定します。

種別 機器 MTU上限 参考情報
NAS Terramaster F2-223 9000 FAQ
NWスイッチ ETQG-ESH08 12288 仕様
Ethernet Adapter 2.5G Ethernet Adapter 16384 RTL8156B General Description
Hypervisor Proxmox VE (v8) 65520 Proxmox VE - QEMU/KVM Virtual Machines
Linux Fedora 40 65535 ip -d link show コマンドの maxmtu

まず、 NAS に関しては NAS の OS 上で MTU を 9000 に変更 (下図は MTU 9000 に変更後) こちらは NAS によって手順が異なるため具体的な手順は割愛します。
( Terramaster では、 コントロールパネル > ネットワーク > インターフェイス 画面から指定可能)

NAS-interface

Proxmox VE 側設定

Proxmox VE 側では、 2.5Gbps 化と同じファイル ( /etc/network/interfaces ) で指定します。
以下の2行を追記

  • pre-up ip link set enxc84d4435a2a7 mtu 9000 (※ 物理NIC の MTU 設定を 9000 に設定)
  • mtu 9000  (※ ブリッジ vmbr0 の MTU を 9000 に設定)
auto lo
iface lo inet loopback

iface enp0s31f6 inet manual
iface enxc84d4435a2a7 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.199.1/24
        gateway 192.168.199.254
        bridge-ports enxc84d4435a2a7
        bridge-stp off
        bridge-fd 0
        pre-up ip link set enxc84d4435a2a7 mtu 9000        ## 追記
        mtu 9000                                           ## 追記

iface wlp3s0 inet manual

設定後、再起動で反映します。(もしくは ifreload -a

VM 側の MTU 設定変更

当環境では、Fedora Linux が多く稼働しているため、 以下は Fedora Linux の例です。
Fedora Linux では、NetworkManager の設定変更で MTU を設定します。

まず事前確認。 ens18 の NIC の MTU が 1500 に設定されています。

[root@sumire ~]# ip a
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

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether de:5c:d1:a4:31:d4 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.x.5/24 brd 192.168.x.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever

それを nmcli コマンドで修正します。
nmcli con mod <IP名> 802-3-ethernet.mtu 9000 で修正可能です。
まず、事前確認です。

# nmcli con show
NAME   UUID                                  TYPE      DEVICE
ens18  fc89c9d6-cf53-3740-aa68-313e61d06cd1  ethernet  ens18
lo     1691b843-dd55-40e7-8745-1b044215ed27  loopback  lo

# nmcli con show ens18 | grep mtu
802-3-ethernet.mtu:                     自動
ipv6.mtu:                               自動

MTU を修正します。

# nmcli con mod ens18 802-3-ethernet.mtu 9000

# nmcli con show ens18 | grep mtu
802-3-ethernet.mtu:                     9000
ipv6.mtu:                               自動

再起動後、 MTU が 9000 になっていることが確認できました。( mtu 9000 部分 )

# ip a
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

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP group default qlen 1000
    link/ether de:5c:d1:a4:31:d4 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.x.5/24 brd 192.168.x.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever

MTU 確認

MTU の確認は、 ping を用いて実施します。

ping では、 ICMP ヘッダー ( 8 byte ) と IP ヘッダー ( 20 byte ) が付加されるため
指定サイズとしては、 8972 byte までフラグメント無しで送信可能です。
まず 8972 byte 指定で ping 実施します。
( -s がサイズ、 -M do がフラグメント禁止)

# ping -c 5 -s 8972 -M do 192.168.x.248
PING 192.168.x.248 (192.168.x.248) 8972(9000) bytes of data.
8980 bytes from 192.168.x.248: icmp_seq=1 ttl=64 time=0.832 ms
8980 bytes from 192.168.x.248: icmp_seq=2 ttl=64 time=0.956 ms
8980 bytes from 192.168.x.248: icmp_seq=3 ttl=64 time=0.843 ms
8980 bytes from 192.168.x.248: icmp_seq=4 ttl=64 time=0.973 ms
8980 bytes from 192.168.x.248: icmp_seq=5 ttl=64 time=1.09 ms

--- 192.168.x.248 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4082ms
rtt min/avg/max/mdev = 0.832/0.939/1.094/0.096 ms

次に、 8973 byte 指定で ping 実施したところ、 メッセージが長すぎる (MTU=9000) というエラーとなり 想定通りの動作となりました。

# ping -c 5 -s 8973 -M do 192.168.x.248
PING 192.168.x.248 (192.168.x..248) 8973(9001) bytes of data.
ping: local error: message too long, mtu=9000
ping: local error: message too long, mtu=9000
ping: local error: message too long, mtu=9000
ping: local error: message too long, mtu=9000
ping: local error: message too long, mtu=9000

--- 192.168.x.248 ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4106ms

終わりに

できる範囲でパフォーマンス向上を目指しましたが、やっているうちに NAS の CPU 負荷が気にになってきました。 CPU (Intel® Celeron® N4505) はそんなにすごい CPU というわけでもないようなので、新しい NAS が欲しいような欲しいような欲しいです。