AMD EPYC Processor で2U本格水冷サーバを組んでみた。

事の発端

巷で話題になっていた Rosetta@Home の方を自宅ラック内の設備の一部を使用して動かしておりましたが、当然CPUを使い切るわけですから、それなりに電力を消費することになります。
Haswell世代のXeon E5 プロセッサを始めとして、100スレッド超えの計算能力を突っ込んでいました。
(一時期、Rosetta@Homeにおいて国内2位の計算能力を提供していました。)
しかしながら、それだけ電力使用量も増えるもので、Haswell世代のXeon E5 プロセッサを2基(計24コア48スレッド)積んだマシンを動かすと、それだけで400W近い電力を消費していました。
それ以外にも多くのマシンを動かしていましたから、1.5KWh近い電力を消費していたように思います。
(流石にここまで来ると、部屋が暑くなります。まだ4月でしたので、窓を開けてちょうどいい感じでした。)
自宅ラック勢の中では、比較的新しいマシンが多い弊宅(当社調べ)ですが、それでも計算能力に対して電力効率が、決していいとは言えないことが気になってきます。
ここまで来ると、より良いものが欲しくなるのが人の性。
AMD EPYC プロセッサ、中でもZen2アーキテクチャを採用したRomeに目をつけました。

構成を考える

まず、筐体(ケース)ですが、弊宅の36Uサイズの19インチサーバーラックへインストールするため、2Uサイズのラックケースを選択しました。
そうすると、高さが80mm程度を低いため、市販品のCPUクーラーは入らなくなります。
当然、サーバー向けプロセッサですから、2Uサイズの空冷CPUクーラーも存在します。
しかしながら、TDPが150Wを超えるようなプロセッサを2Uサイズに収まるような小さな空冷CPUクーラーで冷却したところで、冷却能力を高めるためにファンが高速回転しうるさくなるか、ファンの回転数を落としたために冷却不足になるなど、冷却や音の問題が出てきます。
弊宅はワンルームですから寝室を兼ねていますし、極力音は小さくしたいものです。
そこで、思い切って水冷にしてみることにしました。
クーラントによって熱を移動させ、2Uサイズの空冷クーラーよりは大きな断面積を確保したラジエータによって冷却するのです。
本格水冷自体始めてで、どの程度冷却できるか、静音性等は未知数でしたが、チャレンジしてみることとしました。

懸念事項

水冷にするということは、当然液体を用いますから、空冷CPUクーラーに比べて、より頻度の高い定期的なメンテナンスが必要となります。
今回は、そのリスクを頭の片隅に置いた上で、本格水冷を採用することとしました。

パーツ

詳細
CPU AMD EPYC 7452 32Core Processor
M/B Supermicro H11SSL-i (要Rev2.0)
Memory DDR4 ECC Registered 16GB x8 計128GB
PSU 80PLUS GOLD 定格500W ATX電源
Radiator Alphacool NexXxoS XT45 Full Copper 80mm (240mm length)
WaterBlock TR40用ブロック

M/B(マザーボード)については、Supermicro製のものを選択しました。
しかしながら、Rome世代のEPYC 7002シリーズには、rev2.0以降のものでないと対応しないとのことだったので、rev2.0以降のものを入手しています。
(どうもフラッシュチップの容量の関係みたいです)
Memoryについては、別マシンで使用予定で入手したものの使わなくなったものがあったので、それを利用することとしました。
ラジエータについても、2Uサイズに収まるものを選択しています。
また、EPYC プロセッサのソケットはSP3ですが、形状はTR4と同様です。(ピン互換性はありません)

組んでみた

まずはCPU、やはり大きいですね。

そして、組み込んだ図。

クーラントの色は、なんとなく赤にしてあります。
(リークテストの際に、漏れた場合ティッシュが着色されてわかりやすいかなぁと)

全体像は以下のようになりました。

下の方に転がっているWDのSSDはテスト用の物です。
また、ファンなども仮設置のものが多くて、全体的に散らかっていますがご容赦を。
特に漏れることもなく、組むことができています。

また、動作にも問題ありませんでした。

パフォーマンスは?水冷の効果は?

各ベンチマークや、水冷の効果の考察については、後日投稿する別記事にて記したいと思います。

BIOSでは認識しているがディスクの管理に表示されないSeagete製HDDがあるらしい

知り合いが、増設したHDDを認識しない現象に見舞われ、トラブルシューティングしたのでそのログです。
軽く調査を行ったところ、Seagate製のHDDにおいて稀に発生するようです。
原因調査中、思ったように情報にたどり着けなかったので、記しておきます。

予め申しておきますが、本記事はSeageteさんに対する批判等ではございません。

(解決方法が知りたい人は、この記事の下部へ)

  • 当該HDD
    • Seagete ST2000DM008

Windows10PCにHDDを増設するも認識しない!?

BIOS上には増設したHDDが表示され、Windows10上のデバイスマネージャー上でも、増設したHDDは認識されていました。
しかしながら、増設したHDDを使用するにはMBRないしはGPTのパーティションテーブルを作成する必要があります。
通常、Windows10ではこれらの操作はディスクの管理から行うこととなります。
しかし、肝心のディスクの管理には当該HDDは表示されていませんでした。

ちなみに、CrystalDiskInfoでは認識し、S.M.A.R.T.情報を読み取ることができる状態でした。
これは、接続ケーブルの不良やマザーボードの故障ではないことを意味します。

新品なのにHDD上になんか残っている…?

調べてゆくと、Windows10上で記憶域プールとして認識されたものは、ディスクの管理に表示されないことがわかります。
今回の症状に合致します。(そのような設定を行ったかどうかは別として…)

解決方法…?

そこで、Windows10上から記憶域プールの設定を確認します。
(設定へのたどり着き方は各自調べてください。 設定 から行く方法と、コントロールパネルから行く方法があります。)
本件の場合、他人のPCだったのでスクリーンショットがありませんがディスクの管理に表示されないディスクが、記憶域プールとして使用されていました。
すでに記憶域プールを利用している方は、操作を行うディスクを間違えないように注意しながら、この記憶域プールを削除します。

本件においては、以上の操作を行うことで、ディスクの管理上に表示されるようになりました。

*当該操作等を行ったことによるデータの喪失その他について、当記事の筆者は何ら責任を負いません。

原因は?

本症状は稀に発生することが多いようで、大抵の場合返品交換をしてもらうことで解決しているようです。
また、その殆どがSeagate製のHDDにおいて発生していました。
Seageteさんが製造時あるいは検品等を行う際に何らかの問題が発生することがまれにあるのでしょう。
今回のトラブルは、ある意味不良品であり、返品交換をしてもらうか、自身で操作を行うことによって回避できる問題と言えるでしょう。

ちなみにLinux系だと…

Win10等で認識しない場合、Linux系のOS(ubuntuなど)をUSBメモリからtryでブートして、fdisk等を利用して当該HDDのパーティションテーブルを初期化することでも解決することができるように思います。

CRS326-24S+2Q+RMでの40GbEのスループットをテストしてみた!

さて

およそ半年前、MikroTik社のCRS326-24S+2Q+RMを購入した記事を書きましたが、40GbEのテストは後でやると書きました。

ようやくそのテストを実施する(気になる)ことができたので、その結果を記していきたいと思います。

環境

本当はLinux機でテストしたかったのですが、ぱっと使えるマシンがWindowsしかなかったので、諦めてそちらでテストを行いました。

  • マシン1 (Desktop)
    • Windows10 Pro
    • Mellanox ConnectX-3 Pro EN
    • 6C12T
    • 16GB RAM
  • マシン2 (HPE DL380 Gen9)
    • Windows10 Pro
    • Mellanox ConnectX-3 Pro EN
    • 24C48T
    • 128GB RAM

なお、Desktop機においてはNICが冷却できずに燃えそうだったので、サーキュレータの風をぶち当てて強制冷却することにしました。

PC1 — CRS326-24S+2Q+RM — PC2

こんな構成でテストを行いました。
なお、IPアドレスについては別途DHCPサーバからの配布としました。

iperf3 with MTU 1500

$ ./iperf3.exe -c 192.168.5.111
Connecting to host 192.168.5.111, port 5201
[ 4] local 192.168.5.110 port 51729 connected to 192.168.5.111 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 1.01 GBytes 8.71 Gbits/sec
[ 4] 1.00-2.00 sec 963 MBytes 8.07 Gbits/sec
[ 4] 2.00-3.00 sec 965 MBytes 8.09 Gbits/sec
[ 4] 3.00-4.00 sec 1.06 GBytes 9.07 Gbits/sec
[ 4] 4.00-5.00 sec 1.14 GBytes 9.76 Gbits/sec
[ 4] 5.00-6.00 sec 1.13 GBytes 9.74 Gbits/sec
[ 4] 6.00-7.00 sec 1.06 GBytes 9.10 Gbits/sec
[ 4] 7.00-8.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 4] 8.00-9.00 sec 1018 MBytes 8.54 Gbits/sec
[ 4] 9.00-10.00 sec 1.16 GBytes 9.99 Gbits/sec
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 10.5 GBytes 9.05 Gbits/sec sender
[ 4] 0.00-10.00 sec 10.5 GBytes 9.05 Gbits/sec receiver

iperf Done.

iperf3でテストを行ったのですが、10Gbps程度しか出ていませんね。
PCIe接続帯域を疑ったのですが、確認したところ双方PCIe3.0 x8で正しくリンクしているようです。

なお、調査したところ、iperf3では -P オプションをつけて並列で実行してもさほど効果がないようです。

ということで、iperf2で試してみることにしました。
なお、MTUを9000としました。

iperf2 with MTU 9000

$ ./iperf.exe -c 192.168.5.111
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Client connecting to 192.168.5.111, TCP port 5001
TCP window size: 208 KByte (default)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ 3] local 192.168.5.110 port 52802 connected with 192.168.5.111 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 23.5 GBytes 20.2 Gbits/sec

20Gbpsほど出ていますね。
この差は何なのでしょうか…

iperf2 -P 10 with MTU 9000

$ ./iperf.exe -c 192.168.5.111 -P 10
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Client connecting to 192.168.5.111, TCP port 5001
TCP window size: 208 KByte (default)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ 11] local 192.168.5.110 port 52816 connected with 192.168.5.111 port 5001
[ 12] local 192.168.5.110 port 52817 connected with 192.168.5.111 port 5001
[ 5] local 192.168.5.110 port 52810 connected with 192.168.5.111 port 5001
[ 10] local 192.168.5.110 port 52815 connected with 192.168.5.111 port 5001
[ 9] local 192.168.5.110 port 52814 connected with 192.168.5.111 port 5001
[ 3] local 192.168.5.110 port 52808 connected with 192.168.5.111 port 5001
[ 6] local 192.168.5.110 port 52811 connected with 192.168.5.111 port 5001
[ 4] local 192.168.5.110 port 52809 connected with 192.168.5.111 port 5001
[ 7] local 192.168.5.110 port 52812 connected with 192.168.5.111 port 5001
[ 8] local 192.168.5.110 port 52813 connected with 192.168.5.111 port 5001
[ ID] Interval Transfer Bandwidth
[ 11] 0.0-10.0 sec 3.97 GBytes 3.41 Gbits/sec
[ 12] 0.0-10.0 sec 2.63 GBytes 2.26 Gbits/sec
[ 5] 0.0-10.0 sec 5.29 GBytes 4.55 Gbits/sec
[ 9] 0.0-10.0 sec 6.19 GBytes 5.31 Gbits/sec
[ 3] 0.0-10.0 sec 3.43 GBytes 2.95 Gbits/sec
[ 6] 0.0-10.0 sec 6.10 GBytes 5.24 Gbits/sec
[ 4] 0.0-10.0 sec 3.74 GBytes 3.21 Gbits/sec
[ 7] 0.0-10.0 sec 5.74 GBytes 4.93 Gbits/sec
[ 8] 0.0-10.0 sec 5.33 GBytes 4.58 Gbits/sec
[ 10] 0.0-10.2 sec 2.62 GBytes 2.20 Gbits/sec
[SUM] 0.0-10.2 sec 45.0 GBytes 37.8 Gbits/sec

-Pオプションを使用して10並列で実行した結果です。
最後の行、各並列での実行結果の合計が示されていますが、 37.8Gbits/sec となっています。
40GbEにおけるほぼ理論値が出ていることが確認できます。
はやい…

そして、NTTtcpというMicrosoftが公開しているツールがあるとのことだったので、そちらでもテストしてみることにしました。

NTTtcp with MTU 9000

送信側

$ ./NTttcp.exe -s -m 24,*,192.168.5.111 -t 30
Copyright Version 5.33
Network activity progressing…

Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
   0  30.016    152017.058   65536.000
   1  30.008    172660.091   65536.000
   2  30.000    195206.400   65536.000
   3  29.881    140094.910   65536.000
   4  29.680    164485.175   65536.000
   5  30.000    187421.867   65536.000
   6  30.000    206696.533   65536.000
   7  30.274    220114.422   65536.000
   8  30.000    143276.800   65536.000
   9  30.063    226766.457   65536.000
  10  30.004    176714.571   65536.000
  11  30.000    186645.333   65536.000
  12  30.008    168695.281   65536.000
  13  30.000    207208.533   65536.000
  14  30.000    211219.200   65536.000
  15  30.002    243292.580   65536.000
  16  29.759    247294.331   65536.000
  17  30.077    151723.643   65536.000
  18  29.992    194283.276   65536.000
  19  30.022    206172.007   65536.000
  20  30.000    127082.667   65536.000
  21  29.975    190990.092   65536.000
  22  29.987    196200.220   65536.000
  23  29.760    181253.763   65536.000

#### Totals: ####

Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
  131681.000000  30.001   8194.436   4389.220

Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
     70227.526     2.130   2106896.000

DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
  100731.942   1.033  179893.237   0.578

Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
  16850158    3120561     64737   0    24.066

受信側

$ ./NTttcp.exe -r -m 24,*,192.168.5.111 -t 30
Copyright Version 5.33
Network activity progressing…

Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
   0 30.029    152115.281    60831.268
   1 30.013    172750.741    54972.069
   2 30.294    193288.704    57800.761
   3 30.185    138724.267    60691.135
   4 29.717    164140.316    57431.574
   5 30.013    187752.241    57852.899
   6 29.716    208883.323    57616.087
   7 30.263    220325.619    56724.817
   8 30.013    143334.155    56863.175
   9 30.044    226828.918    55499.565
  10 30.013    176832.173    55274.441
  11 30.013    186647.653    58564.156
  12 30.013    168679.824    56173.564
  13 30.013    207253.124    56957.149
  14 30.013    211270.951    58245.179
  15 30.294    240877.798    55655.737
  16 29.779    247252.896    57050.740
  17 29.763    153271.757    57865.536
  18 30.013    194315.796    57041.578
  19 30.013    206154.933    56982.983
  20 30.013    126995.635    57870.181
  21 29.998    191005.726    57402.725
  22 30.013    196121.947    58497.045
  23 29.779    181292.857    57231.037

#### Totals: ####

Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
 131738.545221   30.017    25233.644    4388.798

Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
    70220.766     3.854    2107816.724

DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
  91530.266    1.993     182212.080    1.001

Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
  3121124     5474353      0     0    14.800

およそ 4388MB/s となっています。
これはおよそ 40Gbps となりますので、かなりの速度が出ていることがわかります。

まとめ

MiktoTik製のCRS326-24S+2Q+RMの40GbEポートのスループットテストを簡易的に行いました。
これにより、L2レベルでは40GbEにおける理論値に近いスループットが出ることがわかりました。
L2に関して、スループットの低下等を気にする必要はなさそうです。
10GbEについても同様に理論値に近い速度が出ています。

L3以上の処理(VLAN等)を行うとCPU処理となるため、速度が低下すると考えられます。
これについては、気が向いたらテストしたいと思います。

参考

40GbEスイッチ MikroTik CRS326-24S+2Q+RM がやってきた!