NIC 上のトランシーバー互換性:ドライバーのホワイトリスト
スイッチではモジュールポリシーはネットワーク OS の設定1行で決まりますが、サーバーでは NIC のドライバーとファームウェアが決定し、ベンダー、OS、ドライバーバージョンごとに異なります。リストにないモジュールを拒否するのは Intel のアダプターで、それ以外の大半はパースできるものなら何でも受け入れます。このページでは、ベンダーと OS 別の挙動、公式に文書化されたオーバーライド、DAC と光学部品がリンクするかどうかを左右する FEC/オートネゴシエーションの規則、そしてサーバー側でコーディングされた識別情報が満たすべき条件を扱います。
ベンダー別の挙動
| ベンダー/ドライバー | 確認内容 | 失敗時 | オーバーライド | 備考 |
|---|---|---|---|---|
| Intel ixgbe(X520、X540、X550 SFP+) | Intel 認定 SFP+ のベンダー OUI/PN リスト | failed to load because an unsupported SFP+ or QSFP module type was detected、ポートダウン | モジュールパラメーター allow_unsupported_sfp=1(Linux);ドライバーの再読み込み | DAC は概ね受け入れられる;1G SFP は制限あり |
| Intel i40e(X710、XXV710、XL710) | ファームウェアレベルでのモジュール認定 | dmesg に unsupported module、リンクダウン、または ethtool に「module not qualified」 | 新しい i40e では allow_unsupported_sfp=1;古いビルドにはなし | XXV710 の 25G モジュールは厳格に検査される |
| Intel ice(E810) | NVM/ファームウェアによる認定 | Possible mis-configuration of the Ethernet port detected /未認定モジュール | NVM とドライバーのリリースに依存する。unsupported-SFP 設定を尊重するビルドもあれば拒否するビルドもあるため、Intel のリリースノートを確認する | 最近の NVM では Intel 製品の中でもっとも寛容 |
| Intel(Windows)(PROSet ドライバー) | 同じリスト | デバイスが「Network cable unplugged」と表示、イベントログに警告 | 文書化されたオーバーライドなし | Intel のリストに載るか Intel コーディングされたモジュールを使う |
| Intel(VMware ESXi)(ixgben、i40en、icen) | 同じリスト | リンクダウン、vmkernel.log に「unsupported module」 | ドライバーが allow_unsupported_sfp を公開している場合は esxcli system module parameters set 経由のモジュールパラメーター;全バージョンにあるわけではない | 本番環境では認定モジュールを推奨 |
| Nvidia / Mellanox mlx5(ConnectX) | EEPROM をパースするのみ;Ethernet:リストなし | リンクアップ;mlxlink がモジュール情報を表示 | 不要 | InfiniBand モードではファブリックマネージャーがケーブル/モジュールの識別情報を検証し、警告やダウングレードを行うことがある(IB ケーブル) |
| Broadcom bnxt_en(NetXtreme-E) | パースのみ;大半の SKU にリストなし | アップ | — | OEM ブランド(Dell、HPE)のファームウェアが検査を追加することがある |
| Marvell / QLogic qede | パースのみ | アップ | — | — |
| AMD Solarflare sfc | パースのみ | アップ | — | — |
| Chelsio cxgb4 | パースのみ | アップ | — | — |
| Pensando ionic | パースのみ | アップ | — | — |
| サーバーベンダーの OEM NIC(Dell、HPE、Lenovo、Cisco UCS VIC) | 独自のリストを追加することがある(特に Cisco VIC) | CIMC/UCSM に「unsupported transceiver」 | 公式にはなし | UCS VIC は Cisco コーディングされたモジュールを受け入れる |
挙動はドライバーとファームウェア(NVM)のバージョンによって変わるため、実際の組み合わせで確認してください(互換性マトリクスとファームウェア)。
Intel のオーバーライドを適用する(Linux)
# temporary (until reload)
modprobe -r ixgbe && modprobe ixgbe allow_unsupported_sfp=1
# persistent
echo "options ixgbe allow_unsupported_sfp=1" > /etc/modprobe.d/ixgbe.conf
echo "options i40e allow_unsupported_sfp=1" > /etc/modprobe.d/i40e.conf
dracut -f # or update-initramfs -u
# verify
cat /sys/module/ixgbe/parameters/allow_unsupported_sfp
dmesg | grep -iE 'sfp|module|unsupported'
ethtool -m eth0
マルチポートカードでは、一部のドライバーでこのパラメーターがカンマ区切りのリスト(ポートごとに1つの値)を受け付けます。この設定は Intel によって本番環境向けにはサポートされておらず、チェックを外すだけで電気的な要件までは外れません。
NIC における FEC とオートネゴシエーション
| リンク種別 | AN | FEC | 備考 |
|---|---|---|---|
| 25G DAC | 両端でオン(Clause 73) | ネゴシエートされる(ケーブルクラスに応じて RS または BASE-R) | 「DAC でリンクしない」事例の大半は、片端で AN がオフになっている |
| 25G SR/LR 光学部品 | オフ;25000 に固定 | SR は RS-FEC(必須)、LR は RS またはなし。スイッチ側と一致させる必要がある | ethtool --set-fec eth0 encoding rs |
| 100G DAC | オン | RS-FEC | — |
| 100G SR4 / CWDM4 / DR | オフ | RS-FEC 必須 | — |
| 100G LR4 | オフ | なし(一部のプラットフォームでは RS) | スイッチ側と一致させる(FEC と AN) |
| 200G / 400G | 光学部品ではオフ | 常に RS(544) KP4 | — |
| 10G | オフ | なし | — |
OS ごとのコマンド:NIC ツールと診断。スイッチ側:ポート設定レシピ。
NIC 向けにコーディングされたモジュールが満たすべき条件
| 対象 | 最低条件 |
|---|---|
| Intel ixgbe/i40e(オーバーライドなし) | Intel の認定リストにあるベンダー名と PN(Intel ブランドの E10GSFPSR/E10GSFPLR/E25GSFP28SR、またはそれらが再販する OEM 品)、整合の取れたコンプライアンスコードとチェックサム |
| Intel(オーバーライドあり)、寛容な全ベンダー | 有効なチェックサムとコンプライアンスコード。OEM コーディングは不要 |
| Cisco UCS VIC | Cisco のスイッチと同様の Cisco 形式の識別情報(各 NOS がモジュールを検証する方法) |
| InfiniBand HCA | IBTA とファブリックベンダーのリストに沿った正しいケーブル/モジュールの識別情報 |
コーディングの指針:ベンダーロックとコーディング、 型番の構成。
NIC 側で見られる典型的な症状
| 症状 | 考えられる原因 | 確認方法 |
|---|---|---|
| ポートが存在しない、または dmesg に「unsupported module」 | ドライバーのホワイトリスト | dmesg、ethtool -m、オーバーライドまたはコーディング済みモジュール |
| リンクダウン、モジュールは認識、レベルは正常 | FEC/AN の不一致、速度の固定設定が誤っている | ethtool eth0、ethtool --show-fec eth0(速度とレート) |
| 誤った速度でリンクアップ | デュアルレートモジュールで自動的に 10G が選ばれた | 速度を固定する |
| リンクアップするがスループットが低い | PCIe のレーン幅/速度 | lspci -vv(ポートと PCIe) |
| モジュールが高温、温度アラーム | カードが排気側の気流にある | ethtool -m 経由の DDM;カードを移動するか気流を改善する |
| Linux では動くが Windows/ESXi では動かない | ドライバーのポリシーが異なる | その OS 向けの認定モジュールを使う |
| InfiniBand リンクの幅/速度が低下 | ケーブルがリストにない、または長すぎる | ibstat、mlxlink |
CodingBox では
サーバー側の拒否も、スイッチ側と同じバイトから診断します。ベンダー名、PN、OUI、コンプライアンスコード、チェックサムは Check transceiver で読み取ります。Intel のみで構成された環境では、code database にドライバーが受け入れる Intel の識別情報を保持しておけます。