6 万円で 1L サイズ 6 コア 10G x2 サーバを組む方法
10G NIC は未だ PC に標準搭載となっておらず、比較的大きいシャーシに PCIe NIC を積む必要がありました。
FTTH で 10G が家庭用に出てきている現在、これでは検証ができません。
これをコンパクトかつ低コストに組み、ついでに 10G x2 のトラフィックジェネレータをインストールします。
目的とできること
10G NIC で高速な通信が可能
- Synology NAS に ESXi VM のバックアップを高速に取得
ESXi をインストールして多用途に使えるようにする
- EVE-NG で NW OS の検証
- Cisco Trex を VM としてインストールし、10G x2 のトラフィックジェネレータを構築
コンパクトな PC に構築することで、ハンドキャリーできるサーバを作る
- トラフィックジェネレータで 10G 速度測定
- EVE-NG と実機を接続して検証
ソフトウェアルータをインストールすることで、CLI を持つ 10G 対応ルータを安価・静音に作る
- スループットを検証したい候補を、雑にリストアップ
- SEIL/x86
- VyOS
ハードウェア構成
以下は実際の購入品。メモリと NVMe のグレードを下げると、もっとお安くなります。
メーカー | 型式 | 内容 | 入手先 | 価格 | 数量 | 備考 | |
---|---|---|---|---|---|---|---|
本体 | Lenovo | M720q Tiny | Core i5-8400T 6C6T
8GB メモリ HDD なし AC アダプタなし |
ヤフオク | \22,660 | 1 | Trex を使いたい場合は、VT-d 対応を選ぶこと
M720q , M920q 以降に PCIe が存在する |
オプション | Lenovo | 01AJ940 | PCIe x16 ライザーカード | eBay | \6,109 | 1 | Superbuy のほうが安かった
2.5 HDD スペースは犠牲になる 他に PCIe x8 のものが存在する (M720q 側は x8 なので、どちらでも良い) |
オプション | Lenovo | 5M10U50350 | PCIe LP パネル | Superbuy | \2,000 | 1 | i350-T4 用
なくても OK , あると色が揃う |
メモリ | Crucial | CT16G4SFS8266 | DDR4 16GB | Amazon | \7,980 | 2 | トラフィックジェネレータ用途は 8GB でも問題ないはず |
NVMe | Solidigm
(Intel) |
SSDPEKNW010T8X1 | 1TB | Amazon | \13,863 | 1 | WD だと ESXi7 が対応しない
Intel が鉄板らしい |
NIC | Intel | X520-DA2 | 10G x2 SFP+
PCIe LP |
ヤフオク | \7,980 | 1 | Fujitsu の互換カードが安かった
SFP+ のカードを買っておくと、 10G-T SFP+ でファイバとメタル両対応にできる |
合計 | \68,572 |
ソフトウェア構成
VMware vSphere 7 (ESXi7)
- CentOS7
- Cisco Trex v2.87
組み立て
筐体全面・背面
右上の RGB コネクタの部分を PCIe に変更できます。
この世代から背面に M.2 とメモリスロットが移動したので、交換がやりやすいです。
左に CPU ファン、右に 2.5 HDD ベイがあり、HDD ベイを PCIe に変更します。
小さい部品が PCIe ライザーカード。一番右のカードはテストで使った Mellanox 40G NIC.
PCIe ライザーカードを使って、Intel X520-DA2 10G NIC を搭載したところ。
ブラケットは NIC のまま。
NIC の LP ブラケットを、こいつに変更。
i350-T4 用のため完全には合わない (隙間がある) けど、やらないよりは良い感じに。
Trex テスト結果
ESXi7 に CentOS 7 VM を構築して 10G NIC を PCI パススルー、Trex v2.87 をインストールし、DPDK にバインドした 40G / 10G ポート直結でトラフィックを印加してみました。
Trex は DPDK を使用すると、NIC のポートに CPU コアを専有で割り当てることができ、Linux カーネルを介した通信よりも遥かに速い速度でトラフィックをジェネレートすることが可能です。
Trex 考慮事項
IXIA などのように高精度のクロックジェネレータは無く、校正もできないため、Trex では厳密な間隔でイーサネット フレームを送信することができません。
厳密なパケットドロップ数を計測する用途には向かないですが、以下の用途に使用できます。
- QoS を確認する際の、非優先トラフィックの印加
- 10G スループット測定
- 10G pps 測定
Mellanox-X4 40G NIC
Mellanox-X4 40G NIC | Gbps | ||||
---|---|---|---|---|---|
実効合計帯域幅 | Port1 Tx | Port1 Rx | Port2 Tx | Port2 Rx | |
01 1500Bytes 単方向 40G | 50.8 | 25.4 | 0 | 0 | 25.4 |
02 9000Bytes 双方向 40G | 55.0 | 13.7 | 13.7 | 13.8 | 13.8 |
01 1500Bytes 単方向 40G
MTU 1500Bytes 単方向だと 25Gbps 出ました。実際には Rx 25Gbps もあるため、
受信を含めた PCIe の帯域幅は合計 50Gbps となりました。
MTU 9000 で 2Mpps -> 380Kpps に落としていますが、13.7Gbps 双方向 x2 で 54.8Gbps とあまり変わっておらず、pps よりも帯域幅によって限界スループットになる模様。
CPU 使用率は 100% になっていない + PCIe x8 はおおよそ双方向 128Gbps , 単方向 64Gbps [1]のため、128 / 2 / 2 = 32Gbps 双方向 x2 が限界スループットの理論値になるはずですが・・・
発熱も 10G NIC と比べて大きいと考えられるため、40G NIC の搭載は諦めました。
Intel X520-DA2
Intel 10G NIC | Gbps | ||||
---|---|---|---|---|---|
実効合計帯域幅 | Port1 Tx | Port1 Rx | Port2 Tx | Port2 Rx | |
01 64Bytes 双方向 10G | 40 | 10 | 10 | 10 | 10 |
64 Bytes ショートパケットを双方向で印加。
L1 でヘッダも含めて 10G , L2 でヘッダオーバーヘッドを排除したペイロードで 7.63Gbps.
14.88Mpps の 10G ワイヤレートを双方向で確認できました。
VyOS スループットテスト
VyOS 1.4 を VM としてインストール、10G ポートを接続し、
別のサーバの Trex からトラフィックを印加して、VyOS のスループットを測定してみました。
vSwitch 経由
VyOS /w vSwitch | Gbps | ||||
---|---|---|---|---|---|
実効合計帯域幅 | Port1 Tx | Port1 Rx | Port2 Tx | Port2 Rx | |
01 1500Bytes 5Gbps 双方向 1Core | 17.2 | 4.9 | 4.3 | 4.9 | 4.3 |
02 1500Bytes 10G 双方向 4Core | 29.6 | 9.8 | 7.4 | 9.8 | 7.4 |
03 1500Bytes 10G 双方向 6Core | 29.6 | 9.9 | 7.7 | 9.9 | 7.1 |
01 1500Bytes 5Gbps 双方向 1Core
手始めに 5Gbps 1500Bytes で双方向に印加。
1Core しか割り当てていないですが、4.3Gbps 双方向と結構速い。
02 1500Bytes 10G 双方向 4Core
1500Bytes 10G 双方向印加。7.3Gbps 双方向出てます。
これなら 2Core の割当で十分かも。
03 1500Bytes 10G 双方向 6Core
1500Bytes 10G 双方向印加。7.0 - 7.7Gbps 平均 7.37Gbps 双方向出ましたが、
スループット面で 4 -> 6 にコア数を増やす意味はないです。
PCI パススルー経由
ESXi から 10G NIC を PCI パススルーして、VyOS に直結した場合について測定しました。
VyOS /w PCI パススルー | Gbps | pps | ||||
---|---|---|---|---|---|---|
実効合計帯域幅 | Port1 Tx | Port1 Rx | Port2 Tx | Port2 Rx | 実効pps | |
01 1500Bytes 10Gbps 双方向 6Core | 33.2 | 9.5 | 8.3 | 9.7 | 8.3 | 2.7Mpps |
02 1500Bytes 10Gbps 双方向 6Core XDP | 40 | 10.0 | 10.0 | 10.0 | 10.0 | 2.7Mpps |
03 512Bytes 10G 双方向 6Core XDP | 39.6 | 9.9 | 9.9 | 9.9 | 9.9 | 9.3Mpps |
04 256Bytes 10G 双方向 6Core XDP | 31.8 | 9.9 | 7.9 | 9.9 | 8.0 | 14.4Mpps |
総じて PCI パススルーのほうがスループットは良いですが、vSwitch を経由しないため、
ESXi のサーバから VyOS にルーティングさせるには、外部経由となる制約があります。
01 1500Bytes 10Gbps 双方向 6Core
02 1500Bytes 10Gbps 双方向 6Core XDP
VyOS 1.2 から Xpress Data Path (XDP) に対応したので、有効してみました。
さらにスループットが高くなっています。
03 512Bytes 10G 双方向 6Core XDP
前段の試験で帯域幅が最大となったので、pps の限界値を探るべく 1500 -> 512 Bytes に変更。
3.2 -> 9.3 Mpps に上昇しましたが、帯域幅はまだワイヤレートが出ています。
04 256Bytes 10G 双方向 6Core XDP
512 -> 256 Bytes に変更し、パケットドロップありに。
9.3 -> 14.4Mpps となり、ここが pps の限界値と思われます。
参考サイト
Lenovo Thinkcentre Tiny (Project TinyMiniMicro) Reference Thread
Using Lenovo M720q tiny PC as a router
- Lenovo パーツの購入はここが参考になりました
外資系ブランド・超小型PC比較編 その3(Lenovo ThinkStation P330 Tiny)