6 万円で 1L サイズ 6 コア 10G x2 サーバを組む方法

提供:hkatou_Lab
2022年3月13日 (日) 16:19時点におけるHkatou (トーク | 投稿記録)による版 (→‎Intel X520-DA2)
ナビゲーションに移動 検索に移動

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]が参考になります。

BOM
メーカー 型式 内容 入手先 価格 数量 備考
本体 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 シリーズがおすすめ

オプション 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

組み立て

筐体前面

M720q 前面パネル

D x H x W = 18.29 x 3.45 x 17.9cm

1.32 kg しかありません。

筐体背面

M720q 背面パネル (デフォルト)

右上のアナログ RGB コネクタの部分を PCIe に変更できます。

下部スロット

M720q 下部 M.2・メモリスロット

この世代から背面に M.2 とメモリスロットが移動したので、交換がやりやすいです。

これはまだメモリ交換しておらず、M.2 NVMe も積んでいない状態。

内部

M720q 内部

左に CPU ファン、右に 2.5 HDD ベイがあり、HDD ベイを PCIe に変更します。

小さい部品が PCIe ライザーカード。一番右のカードはテストで使った Mellanox 40G NIC.

NIC 搭載

M720q 10G NIC 搭載

PCIe ライザーカードを使って、Intel X520-DA2 10G NIC を搭載したところ。

ブラケットは NIC のまま。

NIC 用ブラケット

M720q PCIe i350-T4 用ブラケット

NIC の LP ブラケットを、こいつに変更。

NIC 用ブラケット搭載時

M720q PCIe i350-T4 用ブラケット搭載後

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 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

Trex 40G 単方向 印加

MTU 1500Bytes 単方向だと 25Gbps 出ました。実際には Rx 25Gbps もあるため、

受信を含めた PCIe の帯域幅は合計 50Gbps となりました。


Trex 40G 9000 Bytes 双方向 印加

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 結果概要
Intel 10G NIC Gbps
実効合計帯域幅 Port1 Tx Port1 Rx Port2 Tx Port2 Rx
01 64Bytes 双方向 10G 40 10 10 10 10
Trex 10G 64 Bytes 双方向

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

VyOS_01_5G_1500Bytes_1Core

手始めに 5Gbps 1500Bytes で双方向に印加。

1Core しか割り当てていないですが、4.3Gbps 双方向と結構速い。

02 1500Bytes 10G 双方向 4Core

VyOS_02_10Gbps_1500Bytes_4Core

1500Bytes 10G 双方向印加。7.3Gbps 双方向出てます。

これなら 2Core の割当で十分かも。

03 1500Bytes 10G 双方向 6Core

VyOS_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

VyOS_1500Bytes_10G_6C_PCI_pass

02 1500Bytes 10Gbps 双方向 6Core XDP

VyOS_1500Bytes_10G_6C_PCI_pass_XDP

VyOS 1.2 から Xpress Data Path (XDP) に対応したので、有効してみました。

さらにスループットが高くなっています。

03 512Bytes 10G 双方向 6Core XDP

VyOS_512Bytes_10G_6C_PCI_pass_XDP

前段の試験で帯域幅が最大となったので、pps の限界値を探るべく 1500 -> 512 Bytes に変更。

3.2 -> 9.3 Mpps に上昇しましたが、帯域幅はまだワイヤレートが出ています。

04 256Bytes 10G 双方向 6Core XDP

VyOS_256Bytes_10G_6C_PCI_pass_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)

引用

  1. 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/
  2. 転送速度https://ja.wikipedia.org/wiki/PCI_Express#%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6