速い!安い!うまい!(40GbE導入編)
わが家も予算1万円で40Gネットワークを導入できる時代に
中古市場やフリマを覗くと、1500円〜で投げ売りされている謎のNICがある。
それが今回の主役:
Mellanox ConnectX-3 CX354A
本来はデータセンター向けのInfiniBand対応HCA(高性能ホストアダプタ)だが、
家庭環境ではちょっとしたROM書き換えと設定変更で、40GbE Ethernet NICとして再生可能になる(ことがある)。
そしてこの構成、驚くほど安い。
| 品目 | 価格 |
|---|---|
| Mellanox CX354A × 2 | 3,000円〜 |
| QSFP+ 40G AOCケーブル | 〜4,000円 |
| 送料他 | 実費 |
| ソフトウェア(MFT) | 無料 |
| 合計 | 約1万円以内 |
実測(40G)
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 45.6 GBytes 39.2 Gbits/sec receiver
PCIeスロットの電気的レーン数がボトルネックになる場合がある(後述)。
x8以上のスロットに刺さっていれば理論値に近い40Gbpsが期待できる。
できること
この構成が完成すると、家庭内でこんなことが起きる:
- 2台のPC間で40GbE光通信が常時可能(DACケーブルも可)
- 大容量データ転送(VM / ISO / iSCSI / バックアップ / 映像編集)が一気に高速化
- NASやProxmoxノード間通信が"異次元の体感"になる
- 「待ち時間」がほぼ消える
購入するもの
NIC(必須)
Mellanox ConnectX-3 CX354A × 2枚
- 中古価格:1,500〜3,000円程度
- QSFP+ポート搭載デュアルポートNIC(シングルポート品もあるが、価格差がほとんどない)
- ラベルに "InfiniBand + 10GigE" と書いてあっても購入自体は問題ない(後述の注意点を読んだうえで)
- 各社OEMあるため、探してみてね
ケーブル(重要)
QSFP+ 40G AOCケーブル
または QSFP+ 40G DACケーブル
- 価格目安:3,000〜5,000円程度
- 必ず40G対応品を選ぶこと(10G品では10Gにしかならない)
SFP+とは別物。"QSFP+"で選んでください。
ケーブルのラベルに 40G QSFP+ と明記されているものを選ぶ。
なお光ケーブルでAmazonで4,000円が目安。
ソフトウェア
Mellanox Firmware Tools(MFT)
Windows版(設定変更用・推奨):WinMFT_x64_4_22_1_526.exe
最新版ではなく、4.22系を選ぶこと。
ダウンロード:https://www.mellanox.com/downloads/MFT/WinMFT_x64_4_22_1_526.exe
ダウンロードページ:https://network.nvidia.com/products/adapter-software/firmware-tools/
Linux版(参考):mft-4.22.1-526-x86_64-deb.tgz
ダウンロード:https://www.mellanox.com/downloads/MFT/mft-4.22.1-526-x86_64-deb.tgz
ダウンロードページ:https://network.nvidia.com/products/adapter-software/firmware-tools/
MFTはWindowsで作業することを強く推奨する。
ConnectX-3はMFT 4.36系では非対応のため、旧バージョン WinMFT_x64_4_22_1_526.exe を使うこと。
Linux(特にProxmox VE 9 / Debian 13 trixie)では、MFT 4.36系のツールがsegfaultを起こすことが確認されている。
Secure Bootを無効にしても mst start でデバイスが見つからないケースがある。
設定変更はWindowsマシンにカードを一時的に移して行うのが確実。
NICファームウェア
ConnectX-3用ファームウェア(ETHモード有効化に必要)
fw-ConnectX3-rel-2_42_5000-MCX354A-TCB_Ax-FlexBoot-3.4.752.bin.zip
ダウンロード:https://www.mellanox.com/downloads/firmware/fw-ConnectX3-rel-2_42_5000-MCX354A-TCB_Ax-FlexBoot-3.4.752.bin.zip
ダウンロードページ:https://network.nvidia.com/support/firmware/firmware-downloads/
下記は実際に自宅環境で40GbEの動作確認が取れているTCB系ファームウェアを基準に記載している。
FCB系(最上位グレード)でも理屈上は動くはずだが、筆者環境ではTCBでの実績のみで、FCBでの動作は未検証。
"InfiniBand + 10GigE"表記のカードでも40Gは出るのか?
出ることがある。ただしPSIDの見た目だけでは判断できない。
中古で流通しているCX354Aの多くは、各社向けのOEM品で、ラベルに
"ConnectX-3 QDR InfiniBand + 10GigE" と書かれている。低スペック品(QCBT系)に見えても、
実態はMellanox純正のMCX354A-TCBTやMCX354A-FCBT(どちらも40GbE対応の上位グレード)と
同等のハードウェアである個体も混ざっている。
ConnectX-3(CX354A)には性能順に QCBT < TCBT < FCBT の3グレードが存在する。
QCBTはQDR IB(40Gb/s)+10GbEのみ、TCBTはFDR10 IB+40GbE、FCBTはFDR IB(56Gb/s)+40/56GbEに対応する。
つまりTCBTの時点で40GbE自体はすでにサポート範囲内であり、必ずしも最上位のFCBTまで
クロスフラッシュする必要はない。
ここで多くの解説記事が「PSIDを見ればFCB系かQCBT系か分かる」と説明するが、これは半分正解で半分不正解。
Mellanox純正の型番だけで見ると、確かにこういう対応がある:
MCX354A-QCBT(QDR 40Gb/s + 10GbE、低スペック) → PSID: MT_1090110018
MCX354A-FCBT(FDR 56Gb/s + 40GbE、高スペック) → PSID: MT_1090120019
一見、6桁目が 1 ならQCBT系(低スペック)、2 ならFCB系(高スペック)と読めてしまう。
しかし、これはMellanox純正品の中だけのローカルルール。
OEM各社(IBM/Dell/HPなど)は独自のPSID採番をしており、この桁パターンをそのまま当てはめられない。
実際、IBMのOEM資料には以下のような記載がある:
ConnectX-3 VPI Dual-port QSFP FDR14/40GbE HCA (PN: 00W0042) → PSID: IBM1090110019
ConnectX-3 VPI Dual-port QSFP FDR14/40GbE HCA (PN: 00D9551) → PSID: IBM1090111019
どちらも公式にFDR14/40GbE対応と明記されているにもかかわらず、PSIDの数字部分は
Mellanox純正のQCBT(1090110018)にかなり近い並びをしている。つまり、
「110」という桁パターンを持っていても、実際は40GbE対応の上位ハードウェアという例が現に存在する。
PSIDの数字が「FCBっぽいか」「QCBTっぽいか」は、Mellanox純正品以外では判断材料にならない。
OEM品は独自採番のため、見た目が似ているから同等、似ていないから別物、という推測はどちらも成立しない。
「事前に記録したPSID」と「クロスフラッシュ後の実測速度」の両方を見て初めて、そのカードの素性が分かる。
実例:筆者環境のカード
クロスフラッシュ前に取得していたROMバックアップを確認したところ、オリジナルのPSIDは以下だった:
ISL1090110018
数字部分(1090110018)はMellanox純正QCBT(MT_1090110018)と完全一致。先頭のISLは
EMC/Isilon向けOEM品を示す独自プレフィックスと思われる。つまりこのカードは正真正銘、QCBTグレード(QDR IB + 10GbEのみ)のハードウェアだったことになる。
それでもTCB用ファームウェアへクロスフラッシュした結果、iperf3実測で39.2Gbps(記事冒頭の実測値)を達成している。
つまり、PSIDがQCBT相当でも、TCBへのクロスフラッシュで40GbEが実際に出るケースがある、という一次情報が得られたことになる。もちろんこれは1個体の実績に過ぎず、他のQCBT個体で同じ結果になる保証はない。
つまり結論としては:
ファームウェアをTCB系(または、より上位のFCB系)用にクロスフラッシュし、ポートモードをETHに
切り替えれば、40Gイーサネットとして動く可能性がある。だが動くかどうかはPSIDの見た目ではなく、> フラッシュ前の記録+フラッシュ後の実測でしか確認できない。
やること(全体フロー)
作業はWindowsで行う。 カードをWindowsマシンに移してから設定する。
① MFT(Windows版)をインストールして起動確認
# インストール後、管理者PowerShellで
mst status
期待値:
MST devices:
------------
mt4099_pci_cr0
mt4099_pciconf0
デバイスが見えればOK。
② フラッシュ前の状態を必ず記録する(超重要)
ここがこの記事で一番大事な工程。 クロスフラッシュしてしまうと、
そのカードが元々どんな個体だったかは二度と分からなくなる。
必ず何も変更する前に現在の状態を控える。
flint -d mt4099_pci_cr0 q
以下を必ずメモ(写真でもログ保存でも可):
-
PSID(例:
MT_1090110019など) - FW Version(現在のファームウェアバージョン)
- Part Number / Description(QDRなのかFDRなのか等の記載)
PSIDは基板に焼き込まれた不変の識別子ではなく、ファームウェアイメージの中に書かれている単なる文字列。
--allow_psid_change オプションで焼けば、その通りに書き換わる。
つまりクロスフラッシュ後に見えるPSIDは「今書いたファームウェアの値」でしかなく、そのカードが元々どんなハードウェアだったかの証明には一切ならない。
検証の意味があるのは、あくまでフラッシュ前のPSIDだけ。
前段で触れた通り、この時点のPSIDが MT_1090120019 に近いか MT_1090110018 に近いかを見ても、OEM品である以上は確実な判断材料にはならない。あくまで「参考情報として記録しておく」に留める。
③ クロスフラッシュ実施
先にダウンロードしておいたTCB用ファームウェア
fw-ConnectX3-rel-2_42_5000-MCX354A-TCB_Ax-FlexBoot-3.4.752.bin.zip
を展開し、.bin ファイルを取り出す。
# PSIDが異なる場合は -allow_psid_change が必要
flint -d mt4099_pci_cr0 -i "C:\path\to\fw-ConnectX3-rel-2_42_5000-MCX354A-TCB_Ax-FlexBoot-3.4.752.bin" -allow_psid_change -y burn
確認プロンプトが出たら y を入力(-y を付けていれば自動で進む)。書き込み完了後、必ず一度電源を完全に切って再投入する(再起動では不十分)。
書き込み後のPSIDを確認:
flint -d mt4099_pci_cr0 q | findstr PSID
TCB用ファームウェアのPSIDに変わっていれば、書き込み自体は成功。
なお、より上位のFCB用ファームウェア(PSID: MT_1090120019)を試す場合も手順は同様だが、
筆者環境での動作実績はTCB側のみで、FCBでの動作は未検証。
いずれにせよ前述の通り、PSIDが変わったこと自体は「ハードウェアが40GbEに対応した」ことの証明ではない。次のステップに進む。
クロスフラッシュは元のファームウェアを上書きする作業。②で控えたPSIDやFW Versionが唯一の切り戻し手がかりになる。
異なるPSID間の書き込みには -allow_psid_change オプションが必須(付けないとエラーで弾かれる)。
④ 現在の設定確認
mlxconfig -d mt4099_pci_cr0 q
LINK_TYPE_P1 / LINK_TYPE_P2 が VPI(3) や IB(1) になっていたら次のステップへ。
⑤ ETHモード固定
mlxconfig -d mt4099_pci_cr0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2
確認プロンプトが出たら y を入力。
⑥ 電源OFF→ON(リブートではなく完全シャットダウン)
PCIeの変更を反映させるため、再起動ではなく電源を切って入れ直す。
⑦ 設定確認
mlxconfig -d mt4099_pci_cr0 q | findstr LINK_TYPE
期待値:
LINK_TYPE_P1 ETH(2)
LINK_TYPE_P2 ETH(2)
Linux側での確認(=本当に40Gが出るかの最終判定)
カードをLinuxマシンに戻してから確認する。ここが実質的な合否判定ライン。
ethtool <インターフェース名> | grep -A 10 "Supported link modes"
期待値(40G対応確認):
Supported link modes: 10000baseKX4/Full
40000baseCR4/Full
40000baseSR4/Full
56000baseCR4/Full
56000baseSR4/Full
リンク速度確認:
cat /sys/class/net/<インターフェース名>/speed
# 40000 が返れば成功
さらに実効スループットをiperf3で確認する:
iperf3 -c <相手ホスト> -i 1
ethtoolで40000baseが「対応」と表示されても、実際にiperf3で40Gbps近い数値が出るとは限らない。
海外のフォーラムには、QCBT相当のカードをFCB用ファームウェアにクロスフラッシュした結果、
リンクアップはするものの実効速度がQDR相当(30Gbps強)に留まったという報告もある。
「クロスフラッシュが成功した」=「40Gが出る」ではないので、必ず実測してから判断すること。
Proxmox VE(Linux)でMFTを使いたい場合
WindowsマシンがなくどうしてもLinuxでやりたい場合の手順。
Secure Bootを必ず無効にすること(未無効だとカーネルモジュールが拒否される)。
# Proxmox VE 9 (Debian 13 trixie) の場合
# 1. Proxmoxリポジトリを追加
echo "deb http://download.proxmox.com/debian/pve trixie pve-no-subscription" \
> /etc/apt/sources.list.d/pve-install-repo.list
apt update
# 2. カーネルヘッダーとdkmsをインストール
apt install -y proxmox-headers-$(uname -r) dkms
# 3. MFTをダウンロード・インストール
wget https://www.mellanox.com/downloads/MFT/mft-4.36.0-147-x86_64-deb.tgz
tar xzf mft-4.36.0-147-x86_64-deb.tgz
cd mft-4.36.0-147-x86_64-deb
./install.sh
# 4. モジュールを手動でロード(mst startだけでは不十分な場合がある)
modprobe mst_pci
# 5. 設定変更
mstconfig -d 02:00.0 q
mstconfig -d 02:00.0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2
MFT 4.36系はDebian 13環境で mstconfig / mstflint がsegfaultを起こすことが確認されている。
この場合はWindowsで作業すること。
PCIeスロットのレーン数に注意
40GbEはPCIe帯域を大量に消費する。
| PCIe構成 | 帯域(PCIe 3.0) | 40G対応 |
|---|---|---|
| x16 | 〜126 Gbps | ◎ |
| x8 | 〜63 Gbps | ◎ |
| x4 | 〜32 Gbps | △(ギリギリ) |
| x2 | 〜16 Gbps | ✗(ボトルネック) |
物理的にx16スロットでも、電気的配線がx4しかないマザーボードがある。
コンパクトデスクトップ(SFFなど)は特に注意。
dmesg | grep mlx4 で以下のような表示が出たら実質x4:
mlx4_core: 15.752 Gb/s available PCIe bandwidth, limited by 16.0 GT/s PCIe x4 link
この場合、40G接続でも実効帯域は28〜30Gbps程度に留まる。
接続方式の比較
| 接続方式 | 安定性 | 備考 |
|---|---|---|
| QSFP+ 40G AOC(光) | ◎ | 長距離・見た目も◎ |
| QSFP+ 40G DAC(銅線) | ◎ | 最安・短距離向け |
| RJ45変換モジュール | △ | 発熱・相性・消費電力で地雷率高め |
CX354AではRJ45変換は特に安定しにくいので、家庭用途は基本AOC or DACで。
まとめ
この構成の本質はこれ:
- ジャンクNIC(1,500円〜)
- ツール(無料)
- フラッシュ前の記録+クロスフラッシュ+実測検証(合わせて数十分)
PSIDの見た目に一喜一憂するのではなく、
「フラッシュ前に記録」「フラッシュ後は必ずiperf3で実測」の2点さえ守れば、
家庭LANが40GbEの**"圧送ライン"**に変わる確率はぐっと上がる。
ネットワークが「待ち時間の世界」から「流速の世界」に変わる瞬間。
そして気づく。
あ、もう1GbEには戻れないやつだこれ。