TrueNAS CoreからSCALE 24.10へ移行後、X520-DA2の1ポートがiperf3で1 Gbit/sしか出なくなった
ストレージ機はCore 13.0-U6.7からSCALE 24.04、その後24.10へと移行した。それ以来、1つのポートが這うように遅く、同じカードのもう片方は絶好調だ。25Gのカードも同じ挙動を示していて、それで自分の目を疑っている。
- Intel multimode SFP+光モジュールを挿したIntel X520-DA2、スイッチまで10G
- Intel SFP28光モジュールを挿したIntel XXV710-DA2、同じスイッチまで25G
- NAS側はTrueNAS SCALE 24.10(以前はCore 13.0-U6.7、その後24.04)
- 物差し役としてNASとクライアント間でiperf3
遅いポートのリンク状態は見た目には完全に正常だ。
$ ethtool enp1s0f0 | grep -E 'Speed|Duplex|Link detected'
Speed: 10000Mb/s
Duplex: Full
Link detected: yes
$ iperf3 -c 192.168.3.2
# parks itself around 1 Gbit/s for the whole run
# the second port of the same card does line rate against its own client
すでに試したこと:
- カードの2ポート間で光モジュールを入れ替えた。遅いポートは遅いまま、速いポートは速いままだった
- 両端でsysctl net.ipv4.tcp_congestion_controlを比較したが、同じ値だった
- 両端を挿し直してフェルールを清掃した
リンク層で測定できるものはすべて10Gと25Gのフルデュプレックスを示しているのに、ペイロードはおおよそギガビットに張り付いたままだ。モジュールが劣化しているのか、NICが壊れかけているのか、それとも見ている層が間違っているのか。
Comments 3
光モジュールはもう自分で容疑から外している。ポート間で入れ替えても遅さはポートに残った。だからモジュールはそのままにして、リンク層の事実とスループットの数字を切り分けること。両者は違う質問に答えている。
同じカードの速いポートと遅いポートでは、普通2つのことが違っている。両方まとめて見てほしい。
片方がMTU 1500でもう片方が9014になっていて、しかも別のVLANに属しているなら、あなたの遅いテストはNICから出て戻ってくるのではなく、ホストのルーティング経路を通っていることになる。遅いポートと同じVLAN、同じサブネットにクライアントを置いて、そこに向けてiperf3 -cを実行してみること。経路上にルーターもなく、MTUの不一致もなく、議論の余地がなくなる。
単一VLANのテストでライン速度が出るなら、ポートとトランシーバーは問題なく、実際に測っていたのはホスト上のVLAN間ルーティング性能ということになる。CoreからSCALEへの移行のかなりの部分がここに行き着く。VLAN間の転送がCoreの頃より目に見えて悪化しているのだ。
これは診断であって、本当の意味での治療ではない。重いフローを1つのVLAN内に収めるか、ルーティングをNASではなくスイッチに任せることで、性能のほとんどは取り戻せる。少なくとも、まったく問題のないSFP+モジュールを2枚返品する事態は避けられる。
誰かが光モジュールを引っこ抜き始める前に、その2つのポートについてスイッチは何と言っているか。ネゴシエートされた速度、デュプレックス、両方のエラーカウンタを確認すること。それと、遅いテストではどちらの端でiperf3サーバーを動かしているのか、向きを逆にして反対側から流してもその上限は変わらないのか。
その上で、遅いポートと速いポートのMTUとVLANを並べて貼ってほしい。10Gでネゴシエートしているのにペイロードが1ギガビットしか動かないポートは、ほぼ必ずフォワーディングか経路の問題であって、光の問題ではない。2つのポートが同じVLANに属していないなら、iperf3が採点しているのはリンクではなくルーターのほうだ。
ハードウェアは違うが形は同じだ。X520-DAカード同士をSFP+ DACで直結した2台で、片方はHyper-V Server Core 2012 R2、もう片方はNAS4Free 9.1のストレージ機だった。素の状態ではそのペアは読み書きとも8-9 Gbit/s出ていた。ポートをHyper-Vの仮想スイッチに紐づけた瞬間、500 Mbit/s程度まで落ち、Windows Server 2012 R2とWindows 8.1でカードを再テストしても何も変わらなかった。
これは最後まで証明されなかった。もらった唯一の返信は、両端の背後にどんなディスクとRAIDレベルがあるのかと尋ねるもので、それは妥当な質問だった。10Gの経路よりずっと手前でストレージが上限になることがあるからだ。そこから身についた習慣は、余分なレイヤーを付けた状態と外した状態の両方で同じリンクを測り、できるならRAMディスク相手にも測ることだ。あのケースでもケーブルとカードは問題ではなかった。