「6 万円で 1L サイズ 6 コア 10G x2 サーバを組む方法」の版間の差分

提供: hkatou_Lab
ナビゲーションに移動 検索に移動
22行目: 22行目:
 
* EVE-NG と実機を接続して検証
 
* EVE-NG と実機を接続して検証
  
====== ソフトウェアルータをインストールすることで、CLI を持つ 10G 対応ルータを安価に作る ======
+
====== ソフトウェアルータをインストールすることで、CLI を持つ 10G 対応ルータを安価・静音に作る ======
  
 
* スループットを検証したい候補を、雑にリストアップ
 
* スループットを検証したい候補を、雑にリストアップ
157行目: 157行目:
  
 
== Trex テスト結果 ==
 
== Trex テスト結果 ==
ESXi7 に CentOS 7 VM を構築して 10G NIC を PCI パススルー、Trex v2.87 をインストールして、
+
ESXi7 に CentOS 7 VM を構築して 10G NIC を PCI パススルー、Trex v2.87 をインストールし、DPDK にバインドした 40G / 10G ポート直結でトラフィックを印加してみました。
  
10G ポート直結でトラフィックを印加してみました。
+
Trex は DPDK を使用すると、NIC のポートに CPU コアを専有で割り当てることができ、Linux カーネルを介した通信よりも遥かに速い速度でトラフィックをジェネレートすることが可能です。
  
 
=== Trex 考慮事項 ===
 
=== Trex 考慮事項 ===
IXIA などのように高精度のクロックジェネレータは無く、校正もできないため、
+
IXIA などのように高精度のクロックジェネレータは無く、校正もできないため、Trex では厳密な間隔でイーサネット フレームを送信することができません。
  
Trex では厳密な間隔でイーサネット フレームを送信することができません。
 
  
  
203行目: 202行目:
 
==== 01 1500Bytes 単方向 40G ====
 
==== 01 1500Bytes 単方向 40G ====
 
[[ファイル:20220313 Trex 40G 01 Unidirectional.png|なし|サムネイル|800x800ピクセル|Trex 40G 単方向 印加]]
 
[[ファイル:20220313 Trex 40G 01 Unidirectional.png|なし|サムネイル|800x800ピクセル|Trex 40G 単方向 印加]]
MTU 1500Bytes 単方向だと 25Gbps 出た。実際には Rx 25Gbps もあるため、
+
MTU 1500Bytes 単方向だと 25Gbps 出ました。実際には Rx 25Gbps もあるため、
  
 
受信を含めた PCIe の帯域幅は合計 50Gbps となりました。
 
受信を含めた PCIe の帯域幅は合計 50Gbps となりました。
209行目: 208行目:
  
 
[[ファイル:20220313 Trex 40G 02 9000 bidirectional.png|なし|サムネイル|800x800ピクセル|Trex 40G 9000 Bytes 双方向 印加]]
 
[[ファイル:20220313 Trex 40G 02 9000 bidirectional.png|なし|サムネイル|800x800ピクセル|Trex 40G 9000 Bytes 双方向 印加]]
MTU 9000 で 2Mpps -> 380Kpps に落としていますが、13.7Gbps 双方向 x2 で 54.8Gbps とあまり変わっておらず、
+
MTU 9000 で 2Mpps -> 380Kpps に落としていますが、13.7Gbps 双方向 x2 で 54.8Gbps とあまり変わっておらず、pps よりも帯域幅によって限界スループットになる模様。
  
pps よりも帯域幅によって限界スループットになる模様。
+
CPU 使用率は 100% になっていない + PCIe x8 はおおよそ双方向 128Gbps , 単方向 64Gbps <ref>転送速度<nowiki/>https://ja.wikipedia.org/wiki/PCI_Express#%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6</ref>のため、128 / 2 / 2 = 32Gbps 双方向 x2 が限界スループットの理論値になるはずですが・・・
  
CPU 使用率は 100% になっていない + PCIe x8 はおおよそ双方向 128Gbps , 単方向 64Gbps <ref>転送速度<nowiki/>https://ja.wikipedia.org/wiki/PCI_Express#%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6</ref>のため、
 
 
128 / 2 / 2 = 32Gbps 双方向 x2 が限界スループットの理論値になるはずだが・・・
 
  
  
243行目: 239行目:
 
64 Bytes ショートパケットを双方向で印加。
 
64 Bytes ショートパケットを双方向で印加。
  
L1 でヘッダも含めて 10G , L2 でヘッダオーバーヘッドを排除したペイロードで 7.63Gbps
+
L1 でヘッダも含めて 10G , L2 でヘッダオーバーヘッドを排除したペイロードで 7.63Gbps.
  
 
14.88Mpps の 10G ワイヤレートを双方向で確認できました。
 
14.88Mpps の 10G ワイヤレートを双方向で確認できました。
250行目: 246行目:
 
VyOS 1.4 を VM としてインストール、10G ポートを接続し、
 
VyOS 1.4 を VM としてインストール、10G ポートを接続し、
  
'''別のサーバの Trex から'''トラフィックを印加してスループットを測定してみました。
+
'''別のサーバの Trex から'''トラフィックを印加して、VyOS のスループットを測定してみました。
  
 
=== vSwitch 経由 ===
 
=== vSwitch 経由 ===
297行目: 293行目:
 
[[ファイル:20220313 VyOS 02 5Gbps 1500Bytes 4Core.png|なし|サムネイル|800x800ピクセル|VyOS_02_10Gbps_1500Bytes_4Core]]
 
[[ファイル:20220313 VyOS 02 5Gbps 1500Bytes 4Core.png|なし|サムネイル|800x800ピクセル|VyOS_02_10Gbps_1500Bytes_4Core]]
 
1500Bytes 10G 双方向印加。7.3Gbps 双方向出てます。
 
1500Bytes 10G 双方向印加。7.3Gbps 双方向出てます。
 +
 +
これなら 2Core の割当で十分かも。
  
 
==== 03 1500Bytes 10G 双方向 6Core ====
 
==== 03 1500Bytes 10G 双方向 6Core ====
370行目: 368行目:
 
前段の試験で帯域幅が最大となったので、pps の限界値を探るべく 1500 -> 512 Bytes に変更。
 
前段の試験で帯域幅が最大となったので、pps の限界値を探るべく 1500 -> 512 Bytes に変更。
  
まだワイヤレートが出ています。
+
3.2 -> 9.3 Mpps に上昇しましたが、帯域幅はまだワイヤレートが出ています。
  
 
==== 04 256Bytes 10G 双方向 6Core XDP ====
 
==== 04 256Bytes 10G 双方向 6Core XDP ====
377行目: 375行目:
  
 
9.3 -> 14.4Mpps となり、ここが pps の限界値と思われます。
 
9.3 -> 14.4Mpps となり、ここが pps の限界値と思われます。
 +
 +
== 参考サイト ==
 +
[https://forums.servethehome.com/index.php?threads/lenovo-thinkcentre-tiny-project-tinyminimicro-reference-thread.34925/ Lenovo Thinkcentre Tiny (Project TinyMiniMicro) Reference Thread]
 +
 +
[https://norbertas.com/blog/lenovo-m720q-router/ Using Lenovo M720q tiny PC as a router]
 +
 +
* Lenovo パーツの購入はここが参考になりました
 +
 +
[https://www.ragemax.com/ 外資系ブランド・超小型PC比較編 その3(Lenovo ThinkStation P330 Tiny)]
  
 
== 引用 ==
 
== 引用 ==

2022年3月13日 (日) 15:39時点における版

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 のグレードを下げると、もっとお安くなります。

BOM
メーカー 型式 内容 入手先 価格 数量 備考
本体 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

組み立て

筐体全面・背面

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

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

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

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

M720q 内部

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

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

M720q 10G NIC 搭載

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

ブラケットは NIC のまま。

M720q PCIe i350-T4 用ブラケット

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

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 [1]のため、128 / 2 / 2 = 32Gbps 双方向 x2 が限界スループットの理論値になるはずですが・・・


発熱も 10G NIC と比べて大きいと考えられるため、40G NIC の搭載は諦めました。

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)

引用