6 万円で 1L サイズ 6 コア 10G x2 サーバを組む方法
10G NIC は未だ PC に標準搭載となっておらず、比較的大きいシャーシに PCIe NIC を積む必要がありました。
FTTH で 10G が家庭用の WAN 回線にすらに出てきている現在、これでは検証ができません。
これをコンパクトかつ低コストに組み、ついでに 10G x2 のトラフィックジェネレータをインストールします。
目的やできること
コンパクト・静音・低消費電力なサーバを作る
- 申し訳ないがでかくてうるさくて電力消費の多いサーバは NG.
10G NIC で高速な通信が可能
- Synology NAS で ESXi VM のバックアップを高速に取得
- Cisco Trex を入れてトラフィックジェネレータに
ESXi をインストールして、多用途に使えるようにする
- Intel NIC 搭載機で、ESXi がドライバを持っている機種を選定
- VM として EVE-NG や CML をインストールして、NW OS の検証
- Cisco Trex を VM としてインストールし、10G x2 のトラフィックジェネレータを構築
コンパクトな PC に構築することで、ハンドキャリーできるサーバを作る
- トラフィックジェネレータで 10G 速度測定
- EVE-NG と実機を接続して検証
ソフトウェア ルータをインストールすることで、CLI を持つ 10G 対応ルータを安価に作る
- スループットを検証したい候補を、雑にリストアップ
- VyOS
- SEIL/x86
ハードウェア構成
以下は実際の購入品。メモリと NVMe のグレードを下げると、タイトル通り 6 万円以内で組めるでしょう。
スペックを変更したい場合は、ここ[1]が参考になります。
メーカー | 型式 | 内容 | 入手先 | 価格 | 数量 | 備考 | |
---|---|---|---|---|---|---|---|
本体 | Lenovo | M720q Tiny (中古) | Core i5-8400T 6C6T
8GB メモリ HDD なし AC アダプタなし |
ヤフオク | \22,660 | 1 | Trex を使いたい場合は、PCI パススルーできる VT-d 対応 CPU 搭載機を選ぶこと
M720q , M920q 以降の一部機種[1]に PCIe が存在する 遠隔で KVM を触りたい場合は、vPro 対応の M8xx / M9xxシリーズがおすすめ |
オプション | Lenovo | 0B47030 | AC アダプタ | Amazon | \1,500 | 1 | 45W |
オプション | 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 でも問題ないはず
デフォルトの 8GB は外して、16 x 2 = 32GB とした。 メーカーの保証する最大は 16 x2 = 32GB , 実際には 32 x 2 = 64GB を認識[1]する模様 |
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+ でファイバとメタル両対応にできる |
合計 | \70,072 |
ソフトウェア構成
VMware vSphere 7 (ESXi7)
- CentOS7
- Cisco Trex v2.87
組み立て
筐体前面
![](/images/thumb/3/39/M720q-01.jpg/600px-M720q-01.jpg)
D x H x W = 18.29 x 3.45 x 17.9cm
1.32 kg しかありません。
筐体背面
![](/images/thumb/6/6e/M720q-02.jpg/600px-M720q-02.jpg)
右上のアナログ RGB コネクタの部分を PCIe に変更できます。
下部スロット
![](/images/thumb/4/4f/M720q-03.jpg/600px-M720q-03.jpg)
この世代から背面に M.2 とメモリスロットが移動したので、交換がやりやすいです。
これはまだメモリ交換しておらず、M.2 NVMe も積んでいない状態。
内部
![](/images/thumb/6/6a/M720q-04.jpg/600px-M720q-04.jpg)
左に CPU ファン、右に 2.5 HDD ベイがあり、HDD ベイを PCIe に変更します。
小さい部品が PCIe ライザーカード。一番右のカードはテストで使った Mellanox 40G NIC.
NIC 搭載
![](/images/thumb/a/aa/M720q-05.jpg/600px-M720q-05.jpg)
PCIe ライザーカードを使って、Intel X520-DA2 10G NIC を搭載したところ。
ブラケットは NIC のまま。
NIC 用ブラケット
![](/images/thumb/b/be/M720q-06.jpg/600px-M720q-06.jpg)
NIC の LP ブラケットを、こいつに変更。
NIC 用ブラケット搭載時
![](/images/thumb/b/b8/M720q-07.jpg/600px-M720q-07.jpg)
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
![](/images/thumb/6/6e/20220313_Trex_40G_01_Unidirectional.png/800px-20220313_Trex_40G_01_Unidirectional.png)
MTU 1500Bytes 単方向だと 25Gbps 出ました。実際には Rx 25Gbps もあるため、
受信を含めた PCIe の帯域幅は合計 50Gbps となりました。
![](/images/thumb/c/cf/20220313_Trex_40G_02_9000_bidirectional.png/800px-20220313_Trex_40G_02_9000_bidirectional.png)
MTU 9000 で 2Mpps -> 380Kpps に落としていますが、13.7Gbps 双方向 x2 で 54.8Gbps とあまり変わっておらず、pps よりも帯域幅によって限界スループットになる模様。
CPU 使用率は 100% になっていない + PCIe x8 はおおよそ双方向 128Gbps , 単方向 64Gbps [2]のため、128 / 2 / 2 = 32Gbps 双方向 x2 が限界スループットの理論値になるはずですが・・・
発熱も 10G NIC と比べて大きいと考えられるため、40G NIC の搭載は諦めました。
本当は 40G x2 ポートから 10G x4 x2 ポートで 80G ワイヤレート印加をやりたかったです。
Intel X520-DA2
Intel 10G NIC | Gbps | ||||
---|---|---|---|---|---|
実効合計帯域幅 | Port1 Tx | Port1 Rx | Port2 Tx | Port2 Rx | |
01 64Bytes 双方向 10G | 40 | 10 | 10 | 10 | 10 |
![](/images/thumb/4/48/20220313_Trex_10G_01_64Bytes_bidirectional.png/800px-20220313_Trex_10G_01_64Bytes_bidirectional.png)
64 Bytes ショートパケットを双方向で印加。
L1 でヘッダも含めて 10G , L2 でヘッダオーバーヘッドを排除したペイロードで 7.63Gbps.
14.88Mpps の 10G ワイヤレートを双方向で確認できました。
VyOS スループットテスト
VyOS 1.4 を VM としてインストール、10G ポートを接続し、
別のサーバの Trex からトラフィックを印加して、VyOS のスループットを測定してみました。
VyOS は ARP 応答がないと Static ARP であってもエントリを削除してしまいトラフィックが流れないため、印加トラフィックに ARP reply を 1pps 追加しています。
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
![](/images/thumb/7/70/20220313_VyOS_01_5G_1500Bytes_1Core.png/800px-20220313_VyOS_01_5G_1500Bytes_1Core.png)
手始めに 5Gbps 1500Bytes で双方向に印加。
1Core しか割り当てていないですが、4.3Gbps 双方向と結構速い。
02 1500Bytes 10G 双方向 4Core
![](/images/thumb/f/f7/20220313_VyOS_02_5Gbps_1500Bytes_4Core.png/800px-20220313_VyOS_02_5Gbps_1500Bytes_4Core.png)
1500Bytes 10G 双方向印加。7.3Gbps 双方向出てます。
これなら 2Core の割当で十分かも。
03 1500Bytes 10G 双方向 6Core
![](/images/thumb/a/ae/20220313_VyOS_03_1500Bytes_10G_6Core.png/800px-20220313_VyOS_03_1500Bytes_10G_6Core.png)
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
![](/images/thumb/2/28/20220313_VyOS_1500Bytes_10G_6C_PCI_pass.png/800px-20220313_VyOS_1500Bytes_10G_6C_PCI_pass.png)
02 1500Bytes 10Gbps 双方向 6Core XDP
![](/images/thumb/9/9e/20220313_VyOS_1500Bytes_10G_6C_PCI_pass_XDP.png/800px-20220313_VyOS_1500Bytes_10G_6C_PCI_pass_XDP.png)
VyOS 1.2 から Xpress Data Path (XDP) に対応したので、有効してみました。
さらにスループットが高くなっています。
03 512Bytes 10G 双方向 6Core XDP
![](/images/thumb/1/16/20220313_VyOS_512Bytes_10G_6C_PCI_pass_XDP.png/800px-20220313_VyOS_512Bytes_10G_6C_PCI_pass_XDP.png)
前段の試験で帯域幅が最大となったので、pps の限界値を探るべく 1500 -> 512 Bytes に変更。
3.2 -> 9.3 Mpps に上昇しましたが、帯域幅はまだワイヤレートが出ています。
04 256Bytes 10G 双方向 6Core XDP
![](/images/thumb/6/6f/20220313_VyOS_256Bytes_10G_6C_PCI_pass_XDP.png/800px-20220313_VyOS_256Bytes_10G_6C_PCI_pass_XDP.png)
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)
引用
- ↑ 1.0 1.1 1.2 Lenovo Thinkcentre Tiny (Project TinyMiniMicro) Reference Thread https://forums.servethehome.com/index.php?threads/lenovo-thinkcentre-tiny-project-tinyminimicro-reference-thread.34925/
- ↑ 転送速度https://ja.wikipedia.org/wiki/PCI_Express#%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6