【HW/NW】SAXA SS3000で遊ぶ 



  随分前にとある場所で「鉄(マテリアル)として廃棄する」というSAXA SS3000が大量にあり、試しに一つもらって遊んでみたところ、なかなか面白かったので鉄くずにするには惜しいと思い、更にいくつか買ってみました。(粗鉄として) ハードウェア的にも超今更感ありますが、用途によってはまあまあ使えるので情報をまとめてみます。
 なにげにかなり更新をサボっていたので久々の更新になりました。WFHが始まってから文字を打つことが多くて、Blogを書く気力がわかなかったです…。

ハードウェア構成について


 CPUにはAtom C2338 が搭載され、そこにSoCから3本のGbEとPCIEから2本のNICが生えているファンレス構成です。MBは「CASwell, Inc. COB-H500」とありますが、CASwellのページには該当するような箱は見つかりませんでした。この手の箱は大体ホワイトボックスを作ってるメーカーから似たようなものが見つかるのですが、今回は該当しなかったので、箱の削り出しとカスタマイズをしているのかもしれません。強いて言うならCAF-1020がどことなく似ていますが、構成は全く違います。箱の質感も結構お金かかってる感じがします。

 ACは12Vで、もとは大きめの4Aのものを使うようですが、消費電力的には2-3Aくらい流せれば十分だと思います。ACアダプタは抜けどめを気にしなければ外形5.5mmで内径3.3mmの汎用的なものが使えます。内径が2.2mmではないので注意が必要です。

 Linux上の認識は以下のようになります。

owner@SS3K-VPN:~$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       36 bits physical, 48 bits virtual
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               77
Model name:          Intel(R) Atom(TM) CPU  C2338  @ 1.74GHz
Stepping:            8
CPU MHz:             1750.071
BogoMIPS:            3500.14
Virtualization:      VT-x
L1d cache:           24K
L1i cache:           32K
L2 cache:            1024K
NUMA node0 CPU(s):   0,1
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch cpuid_fault epb pti tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm arat

owner@SS3K-VPN:~$ lspci
00:00.0 Host bridge: Intel Corporation Atom processor C2000 SoC Transaction Router (rev 02)
00:01.0 PCI bridge: Intel Corporation Atom processor C2000 PCIe Root Port 1 (rev 02)
00:02.0 PCI bridge: Intel Corporation Atom processor C2000 PCIe Root Port 2 (rev 02)
00:03.0 PCI bridge: Intel Corporation Atom processor C2000 PCIe Root Port 3 (rev 02)
00:04.0 PCI bridge: Intel Corporation Atom processor C2000 PCIe Root Port 4 (rev 02)
00:0e.0 Host bridge: Intel Corporation Atom processor C2000 RAS (rev 02)
00:0f.0 IOMMU: Intel Corporation Atom processor C2000 RCEC (rev 02)
00:13.0 System peripheral: Intel Corporation Atom processor C2000 SMBus 2.0 (rev 02)
00:14.0 Ethernet controller: Intel Corporation Ethernet Connection I354 (rev 03)
00:14.1 Ethernet controller: Intel Corporation Ethernet Connection I354 (rev 03)
00:14.2 Ethernet controller: Intel Corporation Ethernet Connection I354 (rev 03)
00:16.0 USB controller: Intel Corporation Atom processor C2000 USB Enhanced Host Controller (rev 02)
00:18.0 SATA controller: Intel Corporation Atom processor C2000 AHCI SATA3 Controller (rev 02)
00:1f.0 ISA bridge: Intel Corporation Atom processor C2000 PCU (rev 02)
00:1f.3 SMBus: Intel Corporation Atom processor C2000 PCU SMBus (rev 02)
01:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)
02:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)


 腑分けするとこんな感じです。







シリアルピンについて


 シリアルについては変態^H^H先駆者より情報をいただきました。このピンがシリアルピンです。白ポチより横にシリアルの1-5ピンに相当するので(3.3Vではない)通常のシリアルを適当なジャンプワイヤーなどでつなぐとOS上のttyS0にアクセスできます。




 ただし、uEFIへのアクセスはファームウェアにパスワードがハードコートされているため、通常はアクセスできません。




 先駆者がEEPROMをダンプしてパスワード解析をしていましたが、Boot方式をBIOS/MBRからEFIにできること、無効になってるTurboを有効化できる(300MHzあがる)こと、PXEなどを有効化できること以外は特にいじるところはない気がしました。まあ、TBも(排熱などの)理由があって無効化されているはずですし、有効化しても上がり幅が300MHzだと違いがほぼないので、uEFIに入る理由はほぼないです。。

 あとはSATAはコネクタを実装すれば使えるそうです。どれだけアンペアが引けるのか不明ですが、シリアルピンの並びにあるPROにちょうど5Vが来ているのでSSDの電源ソースにいい感じに使えそうです。SATAの横の未実装スルーホールは15Vと3Vだったので微妙にそのまま使えそうにはありませんでした。USBのピンヘッダもあるので、そっちから5Vを引けるかもしれません(こちらでは電圧を確認できませんでしたが…)




 それ以外にも色々ピンが生えているのですが、自分の知識では何がどれにつながっているのかまでは解析できませんでした。実はパスワードバイパスピンがあるのではないかといろいろテスタを当てながらショートさせてみたりしたのですが、結局謎でした。

各シリーズについて


 SS3kには無印/II/Proとそれぞれありますが、ハード的にはほぼ違いはなく、ProのみMiniPCIEより11nのWLANが生えているので、そのアンテナのためのSMA端子があります。また、搭載されているSSDにも何種類かあり、8GBモデルと16GBモデル、及びTranscend製MSM610シリーズとInnodisk製3ME2シリーズがあるようです。SSDの中身については完全に消去されてしまっていたため、OSの違いについては不明です。SSDについてはInnodiskのほうがデータシート上の耐久値は高いのですが、ddコマンドなどで連続書き込みすると途中でバッファ切れで失速するような動きをするので、Transcendのほうが動きは素直でした。まあ、どちらにしても期待するようなIOPSや帯域は出ませんが。ただ、後述のCPUエラッタがあるのでリカバリ観点からUSBからの起動を推奨します。

NIC周りについて


 かなりクソ^H^H混乱を招く構成になっています。ハードウェア的には、SoCから2本Marvellの88E6320に伸びており、それがそれぞれLAN2、LAN3となっています。88E6320をSoCのPHYを取り出すために使っていると予測しますが、その間が常に接続済みとなり、ケーブルを刺していなくてもLAN2とLAN3は常にUP扱いになります。そのため、ケーブルが抜けたことを検知できません。そして残りの1本が88E6176と接続されており、88E6176からハードウェアスイッチとしてLAN4-7があります。




 LAN4-7はNECのIXシリーズのように分割して扱うことはできず、Linuxであればenp0s20f1の下にぶら下がります。イメージとしてはBuffaloの小さいGbスイッチに繋がれている感じです。小さい構成だと時としてこの構成は使いやすいですが、VLANタグなどを一切使えないアクセスポートとして使う以上のことはできません。幸い、VLANを喋れる独立したポートが他にあるのでなんとかなりますが…。

 WANとLAN1についてはSoCとは別にPCIEにI211が生えている構成になります。注意しないといけないのはこのポートはバイパスポートになっており、SS3kの電源が切れるとリレーにより内部で結線されます。Softetherのtap/ブリッジのVPN専用ポートとして使うときなど、WANとLAN1を同じLANにつなぐようなことになるとループが発生するので注意してください。(1敗) また、そのような構成のため、pfsenseなどを入れるときにはWANとLAN1を使うと思わぬ接続になりかねないので、バイパスされないWANとLAN2以降を使うことをおすすめします。アイディア次第では色々できそうですが…。

 上記の構成をまず知らないと混乱しますが、一番の問題はOS上の認識順とポートの並び順がメチャクチャなことです。もともと他で使われることを想定していないので、勝手に蓋を開けられた上に想定外のOSをぶち込んでる外野にとやかく言われるのはいい迷惑だと認識した上でも、それにしてもどうしてこうなったのかという思いが強いです。特にLAN2-7は常にLink Up扱いのためそれに気がつくまで無駄にあれやこれやとやってしまいました。

 初期値を画像にするとこうなります。見事に何一つ順番に並んでいません。どうしてこうなった…どうしてもこのクソ構成が気になる人はudevなどをいじって合わせてください。




Mini PCIEについて


 ProであればWPEA-121N/WというAtheros AR9382を搭載した11nのチップが乗っていますが、それ以外は空いています。シリアルの存在に気が付かなかったときは、mPCIEをPCIE x1に変換するアダプタと何故か転がっていたPCIE x1のMatrox G200を組み合わせて画面出力をしてアレコレしていました。

 




 ハーフmPCIEな拡張カードなら搭載できるので、なにかに使えそうではあります。

WLANについて


 WLANもせめて11acに対応できれば面白いとmPCIEな11acに対応した物を探したのですが、そもそも11ac(VHT)で5GHz帯にSSIDを吹こうとするとIntel系のチップはno-IR (no initiate radiation) フラグがファームウェアに書き込まれているため電波を発信することができず、Broadcomの場合はhost-apdに対応したx86向けドライバがプロプライエタリとして配布されているためSTAにしかなれず、Realtekの場合もno-IRが入っているようです。

 唯一の希望がAtheros/QualcommのQCA95xx, QCA98xx, QCA6300系チップを使ったものらしく、海外のフォーラムによるとMikrotik のR11e-5HacDがOpenWRTなどで使えるらしいです。まあ、ハーフサイズではないのでSS3kには入りませんが…。QCA系でも書き込まれているファームによってはW52帯でしかAPになれないものもあるようなので、組み合わせを探すのがなかなかに大変そうです。また、海外にはno-IRフラグを無視したドライバをビルドして使う方法もあるようで、その場合はIntel系チップでもAPになれるらしいです。

 個人的にはopen/dd dwrtでお手軽に作れればいいなくらいにしか思ってなかったのであまり詳しくは追ってませんが、どうしても11acのAPをx86で作りたい人は追ってみてもいいのではないでしょうか。




性能について


 2コアの1.7GHzプロセッサなので、そこまで高くはありませんが、LANの検証環境でOpn/pf senseでNATしてPPPoE接続した限り、1Gbpsくらいはさばくことができました。ただ、ntop-ngを動かすとFlowが少なくても全体の70%くらいを持っていかれてしまったので、あまり凝ったことはできません。それをしたいなら(Atom C3558+6GB RAMを搭載した)Sophos XG135あたりが性能的に必要になってくると思います。

 DebianとSoftetherを組み合わせ、電源入れるとおうちのL2伸長する君をつくったときは、AES-NIが有効な状態でTLS_AES_256_GCM_SHA384アルゴリズムでレイテンシの低い環境なら大体400Mbpsくらいまでは出たので、ちょっとしたところで使う分には十分かなと思います。ファンレスなのでおうちのDS-Lite終端ルーターや、オークションでも安く出ていることがあるので複数買って雑にばらまくような使い方にはいいかと思います。

CPUのエラッタについて


 Atom C2000シリーズと言うと誰しも頭に浮かぶAVR54バグですが、SS3kもエラッタ持ちのCPUリビジョンが使われています。というか、エラッタ持ちのCPUは2013年から製造され、解消リビジョンは2017年からの供給になるので、一部の長期供給メーカー以外には出回ってないと思われます。その間にC3000シリーズも出てるので、多くの場合は2017年の段階でこちらにシフトしているのではないかと思います。また、調べた限りリビジョンを調べるにはCPUIDが同じため実際にヒートシンクを外して刻印を見る以外の方法がないようです。

 実際に問題が出るかというと、この時期まで生き残っている筐体についてはかなり淘汰されたあとなような気がします。実際に来た筐体に関してはサンプル数は数十ですがほとんど問題がなく、1台だけ起動するとLEDがアンバーになりシリアルコンソールに何も出力されない(しかしOSは起動している)という物がありましたが、それ以外は特に問題がありませんでした。しかし、実際に問題が起きている筐体もあるという報告もあるので、なんとも言えません。

 いつ死ぬかはわからないので、死んだら他の筐体に入れ替えて継続できるように、いま動かしているものについてはUSBメモリで起動するようにしています。遠隔地においてあるので、死んだらケーブルとUSBメモリを差し替えて使ってくれ、と現地にコールドスタンバイをおいて運用しています。


まとめ


 信頼性がない状態からスタートなので壊れたらすぐに交換できるような予備機が必要ですが、ネットワーク系のおもちゃとして遊ぶにはいい箱だと思います。それ以外の用途だと、ストレージの搭載が限られるので、使い所が難しい気がします。NICはたくさんあるのでNFSなどでNASなどに逃がせればいいですが、単体で使う場合はせめてUSB3.0くらいは欲しくなります。mPCIEからUSB3を引き出せればまだ可能性はありそうですが…。あとはメモリを少し多めに搭載してk8sのクラスタなどを作ってもいいかもしれません。CPUがCPUなので、KVMを動かすのは厳しいと思います。
 全く無いようで少しだけあるハードの拡張性とその制限を考えながら、何かを作るためのおもちゃとしては面白いので、安価に転がっていたら手を出してみるのはありかな、と思いました。以上。

[ コメントを書く ] ( 75 回表示 )   |  このエントリーのURL  |  $star_image$star_image$star_image$star_image$star_image ( 2.3 / 53 )  |  
【HW】メインマシンをC9Z390-PGWで組んでみた 


 メインマシンの調子が悪くなってきたので使っているM/Bを新しくしました。そのことについてあれこれ書いてみます

そもそもの経緯



 長いこと使っていたX9DAiですが、使っていて一つ問題がありました。それは再起動/コールドブートが一発で上がらないという点です。書くと長くなってしまうのでかいつまんで書きますが、どうやらオンボードに持っているRenesas uPD720200AがWindows10と相性が悪いようで、起動時にこれのドライバの読み込みでコケます。Windbgのシリアルケーブルデバッグで起動シーケンスを他のマシンから見たときに、止まるときはだいたいこのへん(USB絡みのドライバのロード)で死にます。



 一発で起動できないせいで、電源強制OFF→再度起動とやる必要があり、これを繰り返した結果OSが破損しました。



 OSが壊れた結果、VMRCが何もしていないのにクラッシュしていつの間にかすっと消えている、WindowsUpdateが確実に失敗する、その他不思議な不具合現象が起きるようになりました。ファイルシステム破損→ファイルシステムを直してもOSの不整合が発生してしまったときにどうすれば直せるのか、自分にはわかりませんでした…。

 この起動できない問題はすべてのUSB機器を外した上で様々なドライバを試しても解消せず、まっさらなWin10を入れようとしてもインストーラーが(おそらく上記問題で)コケて上がってこない、他のマシンでOSをセットアップしてディスクを差し替えて使っても解決しないという結果が出たので、uPD720200AがWindows10に対応しきれていない、もしくはチップがハードウェア的に壊れていると判断してマシンの置き換えを検討し始めました。起動してしまえば安定するんですがね…。

ハードウェア選定


 新しくしたいと思っても色々要件があり、以下の要件を満たすM/Bの選定に苦労しました。要件としては

・グラボをゲーム用+サブディスプレイ用の2本刺したいので、x16を1つ、x4程度のリンクを1つもっている
 →メインのグラボをx8のリンクに落としたくない、どうでもいい画面の表示はサブグラボに任せてメイングラボのVRAMを使いたくない
・10GのNICを刺したいのでx8がほしい
・U.2のドライブを使いたいので、変換するためのM.2スロットをもっている/もしくはx4スロットを持っている


 という要件があり、理想としてはフルx16を1本、x8を2-3本持っている、というのが理想だったのですが、今のAMD/Intelのコンシューマ向けCPUではそもそも生えているリンク数が足りないので、第一候補はXeon W-3235とSupermicroのX11SPA-Tが候補でした。

第一候補だったX11SPA


X11SPAのシステムブロック図を見てみましたが、なかなかに気持ち悪い構成でした。



 左側のPEX8747の部分がキモですが、PEX8747にはまずx16でリンクし、そこからIT8898にリンクしています。これがどういう動きをするのかと見てみると、Slot2が使われている場合はSlot2と3がx8リンクになり、Slot2が使われていないときはSlot3がx16接続になるようです。スロット4,5も同じ動きになるようで、最大リンク時にはSlot3とSlot5がx16接続、もしくはSlot2-5がx8接続、合計レーン数は32となりますが、アップリンクがx16なのですべてのスロットで同時に最大帯域を出すとサチュレーションが起きる、という構成のようです。
 その下にあるSlot6と7については、IT8898にリンクしているx8がSlot6が使われていない場合はスロット7に接続されるので、スロット7はx8+x8の合計16レーンで接続される、という動きのようです。

 この構成が気持ち悪すぎて惚れたのでM/Bだけでも先に買ってしまおうかと思ったのですが、残念ながらXeon W-3235が全く出回っておらず、そもそもトレイ品でしかまだ出ていないので海外でも国内でも発注していつ来るかわからないという状態でした。
 そんな状態だったので、W-3200シリーズが出回るまで耐え凌ごうかなと思っていたのですが、なんとなく秋葉原を歩いていたら変なマザボを見つけてしまいました。

変態構成なC9Z390-PGW


 これもなかなかの変態で、以下のような構成です。



 パッと見意味がわかりませんが、やはりPLX8747が肝で、X11SPAと同じようにまずスイッチにx16でリンクし、そこからSlot7にx8でリンクし、Slot5が使われていなければASM1480に使われているx8がSlot7に追加で接続されてx16でのリンクになり、Slot1,3も同じ動きになるので、16/0/16/0、16/0/8/8、8/8/16/0、8/8/8/8のいずれかの構成が可能になるようです。ただしアップリンクがx16に対しての32レーン分配なので最大帯域を使うとサチる、またスイッチングコストが発生するのでx16を1つしか使わなくても直結より1%程度パフォーマンスが落ちるようです。
 前回PCMでパフォーマンス監視をしたときに、ゲーム時にグラボが接続されているx16レーンは7-8GB/s程度の帯域を使用していたので、x8でリンクすると微妙に足りない(大体7.7GB/s)のですがx16もいらない(大体15.5GB/s)という感じだったので、グラボ+x8の何かを接続するには丁度いいような気がします。

 PCH側も変態構成で、そもそもなぜかオンボードでU2を持っていて、U2.2はx4でリンク、U2.1はM.2.2が使われていなければx4リンク、M.2.2も使う場合はx2とx2接続になり、M.2.1はSATA4/5を使わなければx4でリンク、SATA4/5も使う場合はx2リンク、となるようです。つまり、リンクが落ちるのを許容すればM.2もU.2も2本ずつ積めます。ただしアップリンクがDMIでのリンクなのでPCH全体で大体4GB/sの帯域を共有することになるので、すべてのインターフェースを同時に使うと足りなくなりますが…。

 このボードでマシンを構成すると

・Fモデルを買わなければCPUからDPを2ポート+HDMIを1つ独立で出せるので、追加のグラボが不要
 →今の構成はHP ZR2740w*3枚+Lenovo T2424Pという4枚構成なのですが、そのうちのZR2740wを2枚とT2424pの出力を賄おうとすると、大体のM/BはHDMI+DP構成になってしまうので、HP ZR2740wが持っているDP/もしくはDVI-Dリンクで接続しようとするとオンボードだけでは足りません。
 M/BによってはDVI端子を持っているんですがDVI-Iなので1920*1200が最大解像度になってしまって2560*1440(WQHD)を出せません
・U.2ドライブをそのまま接続できる ←つよい
・オンボードで10Gを持っているのでうまくすれば追加の10Gを削れる
・帯域を共有するものの16/0/8/8という構成が取れる
・OCできる


というメリットがあったため、まさに自分のためのボードでは????と運命を感じ購入しました。

 ちなみに、前の世代ではASRockのZ270 SuperCarrierがPCI構成で似たような構成をとっていたようですが、現行世代のチップセットではコスト面からか作っていないようです。どうでもいいですが他社だとコンシューマ向けM/Bではシステムブロックダイアグラムを載せていないので直感的に理解できなくて困りました。そのへん●はよくわかってんなと感心しました。一般消費者はそんなもの気にしないというのもありますが。

開封の儀


 全体画像は冒頭に貼ってしまったので省略しますが、特殊な構成をピックアップしてみます

スイッチングチップ


 この気持ち悪い構成を可能にしているPLXのPCI-Eスイッチングチップです。ヒートシンクが乗っているためチップ自体は直接見えません。




U.2コネクタ


 既存でいくつかU.2ドライブを持っているので、これを使うためにU.2コネクタが必要でした。



 U.2のnvme自体はPCI-E変換カードやM.2から変換できるのですが、その手間が省けるので直接持っているのはありがたいです。



 ただ、U.2ドライブを接続するとPOST時間が伸びます。接続しているドライブが古いせいかもしれませんが…

オンボードLED


 ゲーミングなんちゃらの例にもれずこのMBも光るのですが、はっきり言ってクソダサいです。



 なんというか光り方にセンスが無いと言うか、陰キャが無理してパリピを装おうとしたものの溢れ出すオタク臭がつらいというか…。即無効化しました。ユーティリティからパターンを変更できるようですが、そもそも光る意味がありません。このLEDを意味もなく光らせる文化死滅してくれ。(LEDが意味を持っている場合は別)

いつもの起動Beep音


 Supermicro特有の「pi,pipi……pi!」という起動Beepがあります。これはX8(X9?)シリーズくらいからの伝統で、サーバーボードで散々聞いてきた音です。2ソケットマザーでメモリスロットを24本も持っているような板だと、メモリそれぞれは問題なくてもスロットの場所によって何故か起動できなかったりします。そして総当たりでメモリを認識できるスロットを探すわけですが、起動する組み合わせをようやく見つけたときにこの起動音がするので、個人的にこの音を聞くととても安心と気分の高揚を覚える程度には毒されています。ジャンパーピンで無効化できますが、有効のままにしています。

何故か持っているシリアルポートとSATA-DOM用電源コネクタ


 何故かシリアルのピンヘッダーをもっているので、汎用のCOMブラケットを接続するとRS232-Cが使えます。ゲーミングなんちゃらを求める人のうちどれだけの人がCOMを求めるのでしょうか。ちなみにCOMを持っているとWindbgなどの診断時にとても役に立つのでありがたいです。SATA-DOM用電源コネクタについては、「これいる??」という感想です。NASやPCルーターを作るときには欲しくなりますが、普段はまずいらないと思います。ゲーミングなんちゃらと謳ってる割には特定方向の需要を満たし過ぎではないですかね…。方向性が迷子になっている感じがあります。(が一部の人(主に自分)にはありがたい構成です。)

何故か持っているPS/2コネクタとWindows7対応


 BIOS上になぜかWindows7のインストールに対応するための項目があります。内容としてはUSB3.0を2.0のまま使う(EHCIからxHCIのハンドオフを行わない)という内容です。PS/2コネクタもその絡みで持っているのだと思いますが、そもそもサポートマトリックスにはWin7はないので自己責任で試す際のアシスタントとして使う程度のものみたいです。今からWin7を最新ハードにクリーンインストールする人がゲーミングなんちゃらを求める層にどれだけいるのか不明ですが…。

セットアップ


 今回の構成は以下のようになりました

CPU


 今回はCPUに9600Kを使用しました。それ以上になると、デスクトップ用途ではそこまでコア数がいらないという経験則と、OCしたときにコア数が少ないほうが高クロックにしても発熱が少ない、及び価格的に一番お買い得という理由でこれにしました。だったら3235いらないんじゃ?と言われたらPCIレーン数とメモリ帯域以外はそうなんですが、同世代の3223と3225と3235と並べると3235がお買い得感あるので…。W-3235を考えていたのでCPUもM/Bもかなり安く感じてしまいました。

メモリ


 メモリは手元に16GBが2本あったので、それと今回32GBのRAMを2本購入したので合計96GBになりました。32GBを4本買っても良かったのですが余らせるのももったいないので既存のものも使うことにしました。



グラボ


 今使っている1080をそのまま使います。2080TIほしい

ファームウェア更新


 UEFI上にファームウェア更新という項目はあるのですが、まずそこからやろうとすると以下のように怒られます



 JPMEと言われ、なんとなくMEファームウェアのジャンパピンかなと予測がついたのでそこまでハマりませんでしたが、そんな経験のない人にはいきなり難問です。そしてJPME2のジャンパを切り替えて再度実行したのですが、バージョン1.0bから1.0cにアップデートしようとしても何故か反応しませんでした(MEファームウェアが同時に更新されるFWはだめっぽい?)。マニュアルの手順を見るとUEFIのシェルから実行しろと書かれていたので言われたとおりUEFIのシェルから実行したところ、成功しました。



 「いやーうちの製品買うような層はオタクしかいないからGUIが動かなくてもいいっしょwwwwwwww」という判断があったかどうかは知りませんが、これも初心者の心を折るには十分な儀式だと思います。特に今のUEFIなんかはネットワークを有効にしているとOS不要でネットワークから新しいFWを取得し、そこからアップグレードできるためほぼ何も考えずに済むので、そこから始めた人にとってはいきなりコマンドラインというのは十分に初見殺しですね。
 個人的にはDOSの起動ディスクを作らなくてもオンボードでUEFIのシェルが上がるので楽だと思いました。鍛えられすぎているせいもありますが。というか動かないなら項目作らないでくれ…。ちなみに昔からの伝統のSUPER.ROMによるエマージェンシーリカバリーにも対応しているようです。過去に何回かお世話になった実績があるので、万が一でも安心です。

ハマリポイント


 今回、起動ドライブにU.2のMicron 9100MAXを使おうとしたのですが、インストールはできるものの起動ドライブとしては使えませんでした。SandiskのSkyHawkでは起動できたので、古いU.2ドライブについては起動を考慮されていないのでしょう。

環境移行


 OSをまっさらな状態にしてそこから必要なものだけ入れていこうかと思いましたが、それが思っていた以上にめんどくさかったので、普段取得しているVeeam backupのイメージ(X9DAiの壊れかけのOSイメージ)を一旦SATA-SSDにコピーし、そこからWindowsのISOをマウントして1903までアップグレードしました。そのタイミングで古いWindowsはWindows.oldになり、システムに必要なドライバやコンポーネントそのものは新しくなるので、システムの整合性は直ります。

 ただ、SATAのSSDにクローンしてから1903に上げるとバージョンが上がったときに接続されているドライバのみが起動時に読み込まれるようになる(ドライバ周りがリセットされる)ようで、SATAのSSDだけつないだ状態のデータをnvmeにクローンしたところ失敗しました。
 そのため、一旦データドライブとしてnvmeをシステムに接続してOSの起動時にnvmeドライバを読み込むように教え、その後OSイメージをnvmeにクローンするとうまくいきました。SATA→M.2への移行のときも同じテクニックが使えるかもしれません。

OverClocking


 せっかくOCに対応しているのでOCしてみました。最初はM/Bのプリセットで持っている5.2GHzというのを選択してみましたが、コア電圧1.45Vやその他電圧もりもりで、起動できるものの空冷ヒートシンクだと負荷をかけた瞬間に100℃を軽く超えOHでシャットダウンされました。その後簡易液冷キットを購入して試したところ、熱問題はギリギリクリアできましたが、やはり5GHzより上になにかの壁があるようでした。

 5GHzは1.32V+LLC Lv1で安定するのに対して5.2GHzでは1.45Vも必要になるので、発熱と消費電力的に5GHzで運用することにしました。もう少し詰めれば5.1や5.2のいいところが見つかるのかもしれませんが、いかんせん安定性のテストに時間がかかるので妥協しました。

 このときにWindowsを入れてOCCTやPrime95などを起動していたのですが、それだとクラッシュしたときにファイルシステムが壊れることがあるので、まずはドライブをすべて外し、USBからMemTest86を起動し、テストの選択でTest3とTest6-7が通ってからWindowsに切り替えることをおすすめします。設定が甘いとMemTestのテスト6などでフリーズ・再起動が起きます。その後のOCが安定したかどうかの判断として、Prime95をいきなりFFTサイズ8192位から始めるとすぐに結果がわかります。逆にこれを30分くらいパスしたらもう大丈夫なのでは、と思います。



 ヒートシンクにはCoolerMasterのMasterLiquid Lite 120を使いましたが、ラジエーターのファンを前後2枚取り付けているのが功をなしているのか5GHzでPrime95をかけ続けても熱暴走は起きませんでした。なのでこれで常用しようと思います。殻割りしてヒートスプレッダ交換などをすればもっと冷えると思いますが、そこまでする気力は起きませんでした。




ネットワーク周り


 ネットワークにはAQtion AQN-107とIntel 219-Vの2系統を備えています。以前の構成でもMellanoxのConnectX2-ENをLAN、I210を内部マネジメント系として使っていたので、ほぼそのままその構成で行けそうです。ただ、10G-Tネイティブのスイッチはないので、mikrotikのS+RJ10でSFP+変換をかませることにしました。これ結構発熱するのでちょっと不安なんですけどね…。スイッチからは10G固定で見えるのに10G-T側は5Gや2.5Gや1Gでもリンクするという謎技術です。溢れた分はどう制御してるんですかね?まあ安いので1つ2つ持っておくのはおすすめです。




 また、AQN-107の内部接続がPCIE 3.0のx2接続(計算上は16Gbpsですが)、及び10G-Tを使うというのがどうなのか、というのが不安でしたが、とりあえずは問題ないようです。距離も3Mくらいしかないのでその距離ならそのへんのケーブルでも大丈夫そうです。




 一つハマったのが、IntelのPROset/Advanced Networking Servicesを入れれば、昔はNICの「構成」タブからVLAN/Teamingの項目に飛べたのですが、1903だとその項目がなく、PowershellのAdd-IntelNetVLAN コマンドレットから設定する必要がありました。どうも1809あたりからそうなったようですが、謎です。ただ、こちらのほうがまとめて作れるので楽でした。
PS C:\WINDOWS\system32> Get-IntelNetAdapter

Location Name ConnectionName LinkStatus
-------- ---- -------------- ----------
0:31:6:0 Intel(R) Ethernet Connection (7) I219-V 1.00 Gbps ...
8:0:0:0 Aquantia AQtion 10Gbit Network Adapter LAN 10.00 Gbps...

PS C:\WINDOWS\system32> Add-IntelNetVLAN -ParentName "Intel(R) Ethernet Connection (7) I219-V" -VLANID "0,2,3,6"


安定性


 台風の後のゲリラ雷雨でUSP保護してなかったためシャットダウンされましたが、それ以外は5GHz運用で問題ないです。ゲームも連続で6時間ほどやりましたが大丈夫でした。

総評


 総じてオタク向けです。POSTは一般的なuEFIマザーに比べ長い、OC項目は複雑、ファームのアップデートは(なれてない人にとっては)複雑、etc…。ただ、ブロックダイアグラムを見てそのキモさにシビレたり、フルサイズDPポートが2ポート必要だったり、x8接続の拡張ボードを数本接続する必要があったり、U.2ドライブを使いたいという需要がある人にはおすすめです。オンボードでU.2ドライブや10G問題やサブディスプレイ問題を解決してしまったので、結局接続されているボードはグラボだけになりました。とてもスッキリしました。



 U.2の起き方が雑とか管理面で上下逆にしてるとか色々突っ込みどころはありますが動いて冷えればいいのです。しかし、この構成をしたがる層ってどう見てもゲーミングなんちゃらを欲しがる層じゃないよな…と強く思います。HW的に詳しくない、自作歴がそこまで長くない、という人にはおすすめしません。ですが、安定性も悪くなく、一部の層にとってはどストライクな構成なので、そういった方には他に選択肢がないのでおすすめです。

以上

[ コメントを書く ] ( 842 回表示 )   |  このエントリーのURL  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 443 )  |  
【HW】PCMを使ってWindows上でのIntel系CPUの低いレイヤのパフォーマンスをモニタする 
 Zen2なプロセッサやXeon Wなど、いろいろ新しいプロセッサが出ていますが、前回の構成からそれらに乗り換えてどこまで変わるか(今の構成でどこが不足しているか)という現状把握を確認しようとメモリの帯域やQPIの使用状況を見ようと思ったのですが、Windows標準にはそのような仕組みはありませんでした。

 そのかわり、IntelからPCM Toolsというものがリリースされていて、これを使うとパフォーマンスカウンタでは見えない部分を見ることができます。ただし、プレビルドのものは配布されていないので自分でコンパイルする必要があります。

 最初はVS2019でコンパイルしようとしたのですがthr/xthreadが存在しないためincludeできないと言われうまく行かず(たしかに探しても見つからない)、いろいろ試してもVS知識がなくてわからず、結局VS2017でコンパイルしたらうまくいきました。

 自分用のメモとしてビルドのものを置いておきます。
PCM_201902 release.zip

 ビルドするとpcm_*.exeという実行ファイルがいくつかできるのですが、有用だったのでいくつか紹介してみます。

PCI-Eの使用状況がわかるpcm-pcie


 pcm-pcie.exeを実行すると以下のような出力があります。

.\pcm-pcie.exe
DEBUG: Setting Ctrl+C done.

Processor Counter Monitor: PCIe Bandwidth Monitoring Utility
This utility measures PCIe bandwidth in real-time

PCIe event definitions (each event counts as a transfer):
PCIe read events (PCI devices reading from memory - application writes to disk/network/PCIe device):
PCIePRd - PCIe UC read transfer (partial cache line)
PCIeRdCur* - PCIe read current transfer (full cache line)
On Haswell Server PCIeRdCur counts both full/partial cache lines
RFO* - Demand Data RFO
CRd* - Demand Code Read
DRd - Demand Data Read
PCIeNSWr - PCIe Non-snoop write transfer (partial cache line)
PCIe write events (PCI devices writing to memory - application reads from disk/network/PCIe device):
PCIeWiLF - PCIe Write transfer (non-allocating) (full cache line)
PCIeItoM - PCIe Write transfer (allocating) (full cache line)
PCIeNSWr - PCIe Non-snoop write transfer (partial cache line)
PCIeNSWrF - PCIe Non-snoop write transfer (full cache line)
ItoM - PCIe write full cache line
RFO - PCIe partial Write
CPU MMIO events (CPU reading/writing to PCIe devices):
PRd - MMIO Read [Haswell Server only] (Partial Cache Line)
WiL - MMIO Write (Full/Partial)

* - NOTE: Depending on the configuration of your BIOS, this tool may report '0' if the message
has not been selected.

Starting MSR service failed with error 2 Trying to load winring0.dll/winring0.sys driver...
Using winring0.dll/winring0.sys driver.

IBRS and IBPB supported : yes
STIBP supported : yes
Spec arch caps supported : no
Number of physical cores: 16
Number of logical cores: 32
Number of online logical cores: 32
Threads (logical cores) per physical core: 2
Num sockets: 2
Physical cores per socket: 8
Core PMU (perfmon) version: 3
Number of core PMU generic (programmable) counters: 4
Width of generic (programmable) counters: 48 bits
Number of core PMU fixed counters: 3
Width of fixed counters: 48 bits
Nominal core frequency: 3300000000 Hz
IBRS enabled in the kernel : no
STIBP enabled in the kernel : yes
Package thermal spec power: 130 Watt; Package minimum power: 68 Watt; Package maximum power: 200 Watt;
ERROR: QPI LL monitoring device (0:7f:8:2) is missing. The QPI statistics will be incomplete or missing.
ERROR: QPI LL monitoring device (0:7f:9:2) is missing. The QPI statistics will be incomplete or missing.
Socket 0: 1 memory controllers detected with total number of 4 channels. 0 QPI ports detected. 0 M2M (mesh to memory) blocks detected.
ERROR: QPI LL monitoring device (0:ff:8:2) is missing. The QPI statistics will be incomplete or missing.
ERROR: QPI LL monitoring device (0:ff:9:2) is missing. The QPI statistics will be incomplete or missing.
Socket 1: 1 memory controllers detected with total number of 4 channels. 0 QPI ports detected. 0 M2M (mesh to memory) blocks detected.

Detected Intel(R) Xeon(R) CPU E5-2667 v2 @ 3.30GHz "Intel(r) microarchitecture codename Ivy Bridge-EP/EN/EX/Ivytown" stepping 4 microcode level 0x42c
Update every 1 seconds
delay_ms: 54
Skt | PCIeRdCur | PCIeNSRd | PCIeWiLF | PCIeItoM | PCIeNSWr | PCIeNSWrF
0 507 K 0 0 0 0 0
1 168 0 0 1080 0 0
-----------------------------------------------------------------------------------
* 507 K 0 0 1080 0 0

Skt | PCIeRdCur | PCIeNSRd | PCIeWiLF | PCIeItoM | PCIeNSWr | PCIeNSWrF
0 501 K 0 0 0 0 0
1 552 0 0 12 0 0
-----------------------------------------------------------------------------------
* 501 K 0 0 12 0 0
....


 最初は各値が何を意味しているのかわかりませんでしたが、よく見ると実行すると最初に出力されるところに意味が書いてありました。気にするべきは PCIeRdCurとPCIeItoMで、PCIeRdCurはPCIE→ CPU/メインメモリへの読み取り(ホスト側から見て書き込み)で、 PCIeItoMはPCIE→CPU/メインメモリへの書き込み(ホスト側から見て読み込み)のようです。

 例として、ソケット2配下のPCIEに接続されているnvme(U.2フォームファクタ)へのベンチマーク中にとった値は、CDMの読み込みで1719MB/sと出ましたがPCMの方では23Mとなりました。




 この23Mというのが何を意味しているかというと、1秒間に23M回要求があったということらしいです。これらからI/Oのサイズを求めると (1719.8 MB/s) / 23MHz となり、IOサイズは約74バイトという計算になります(計算はグーグル先生におまかせ)。

 いろいろ調べると、PCI-EのパケットサイズはボードのTransaction Layer Packet (TLP)宣言によって16から4094バイト(2^4 -2^12) で送信できるらしいのですが、そうなると微妙に合いません。

 逆に1719MB/sを64バイトで達成するには一秒間あたり26MHzの要求が必要になり、これもまた微妙に合いません。謎ですが、多分サンプリング間隔やCDMの帯域集計などのズレが有るのでしょう…。

 また、別のケースとして(これも余ったから)使用している10GカードのConnectX2-ENから別の物理マシンへiperfしたところ、 8.25 GBytes (7.08 Gbits/sec)の速度が出たのですが、この際のpcm-pcieの値は以下のようでした。




 これに64バイトをかけると15MHz*64Byte=7680 Mbpsとなり、やはり近い値が出ているようです。

 X9DAiのマニュアルによると、パケットサイズを256byte、ReadReqデータサイズは4kまで拡大できるらしいのですが、これを拡張しても特に要求回数が減ることはなかったので謎です。Linuxではlspciコマンドをvvvなどで実行すると出てくるDevCapがカード自体のケーパビリティ、DevCtlが実際にネゴシエートしている値として取得できるのですが、Windows上ではどのように動いているか不明です。逆にLinux上では64バイトという値はなかったので本当にこの計算があっているのか不安です…。
 参考:
https://community.mellanox.com/s/article/understanding-pcie-configuration-for-maximum-performance#jive_content_id_PCIe_Max_Payload_Size

 ちなみに、この確認の中で知ったのですが、X9DAiは各スロットでx16をx4x4x4x4などへ分割するPCIE Bifurcationに対応していたので、x16スロットにASUSのULTRA QUAD M.2 CARDのようなPLXのスイッチングチップを持たないnvme4枚刺しのカードを刺しても使えるようです。おそらくもともとはライザーカード対応のための機能だと思いますが…。

使用中のメモリ帯域がわかるpcm-memory.exe


 このプログラムはなかなか有用で、チャンネルごとのメモリ帯域がわかります。




 メモリ帯域のベンチマークを回すとシングルスレッドで12GB/s、4チャンネルあるのでマルチスレッドでコアあたり48GB/s、ソケット合計88GB/sという速度が出ましたが、ゲームをやっている限りせいぜい7-9GB/s程度の要求だったのでメモリ帯域についてはまだボトルネックではないということがわかりました。

メモリ帯域などをパフォーマンスモニターで見られるPCM-Service.exe


 pcm-memory.exeをパフォーマンスモニターのグラフで見るためのサービスです。管理者権限でPCM-Service.exe -InstallでインストールするとProcessor Counter Monitor Serviceというサービスが追加され、これを開始するとパフォーマンスカウンターにPCM_*が追加されます。




 これらのパフォーマンスモニタリングから、最終的な結論としてXeon E5 2667v2は足回りはまだ余裕があるもののコアあたりの性能をあげないとゲームにおいてより良いパフォーマンスを得られないということがわかりました。感覚的にわかっていましたが…。

 ただ、Zen2やCore i7系のCPUだと、使っているインターフェースカード的にPCIEのレーン数が足りないので、その点QPI跨いでしまってもレーン数の多いE5系は使いやすいんですよね…。
 レガシーハードウェアが多いのでPCIE4.0を3.0にダウングレードしてそのかわりレーン数を倍にするスイッチングチップなどがあると嬉しいのですが、そんなニッチなものが売れるとは思えないですし、コスト的にも割に合わないと思うので厳しいです。Xeon Wシリーズがほしいのですが高い…。

 人間は迷うと現状維持を選ぶらしいですが、今回もそうなりそうです。

[ コメントを書く ] ( 229 回表示 )   |  このエントリーのURL  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 1176 )  |  
【HW】2ソケットマシンでゲームをする際のNUMA/パフォーマンスチューニング 


 家の環境は所有しているメモリの量の問題で未だにXeon E5 v2環境から移行できないのですが、同じラインのCPUを長く使っているとアップグレードや筐体目当てのパーツ取りなどでサーバを買ったりして余剰パーツが増えた結果、使ってない資材同士が結合して新しいマシンが生えてきたりすることはよくあることだと思います。(そして日常的にハードウェアを入れ替えてると配線の綺麗さとかどうでも良くなってきて写真のような配線になります)

 そんなわけで、余ったパーツから生えてきたマシンを現在デスクトップ機として使っているのですが、2ソケットマシンをデスクトップ用途として使うとちょくちょくNUMAについて考えないといけない時があったのでまとめてみます。

環境


余ったパーツから生えてきたマシンは以下です。
マザボ  X9DAi
CPU Xeon E5 2667v2 *2
メモリ DDR3 14900R 8*16 =128GB
グラボ GTX 1080
その他NVMeとか10G-NICとか

 マザボについてはオークションで安かったので買ったのですが、サーバー用途で使おうとするとIPMIがないのはやっぱり使いにくいので結局本番稼働することなく部屋の隅に積まれていいました。
 しかし、Core i5 6600Kでマシンを組んだときに微妙に物足りなかったので、試しにX9DAiと余り物でデスクトップ環境を作ったらいい感じだったのでそのままこれを使っています。

 この環境を使っていても9割のことは困らないのですが、ゲーム時にパフォーマンスがばらつく時があったので、その対処法のメモです。

システムブロック図


 Xeon E5系/Ryzenから先はPCI-EがCPU直結になり、(AMD系ではThreadripper/Epicは)拡張スロットによって接続先のCPUが違う(AMDの場合はMCMのコアが違う)というのはパソコンオタクには常識だと思いますが、X9DAiのシステムブロック図は以下のようになっています。




 このことを意識してゲーム用GPUをCPU1に直結しているSlot1のPCIEx16に接続していたのですが、Windows/Linuxどちらであっても「実行するプロセスの使用する拡張ボードを考慮して」のNUMAの制御は今の所できません。

 そのため、CPUの混み具合によっては「本来ならCPU1で実行してほしいのにCPU2で実行されてしまって拡張ボードにアクセスするにはQPI/Infinifablicを跨いでCPU1経由でアクセスしなければならない」ということが起きます。

 Xeon 5600系まではどちらのCPUであってもPCH経由でPCI-EにアクセスしていたのでどちらのCPUもどのボードに同じコストでアクセスできたのですが、QPIの限界が来てしまったのでCPUに直結された結果、このような微妙に不便なことが起きます。

Windows10でのNUMA


 Windows10でもNUMAを意識してくれるのですが、だいたい重要なプロセスがCPU1で実行されるため、ゲームなどは空いていることが多いCPU2で実行されてしまいます。しかし、そうなってしまうとGPUからは遠くなってしまうので、できればCPU1側で実行してもらいたいのです。

 見ている限りだと、CPU1とCPU2両方をフルに使って実行されるゲームはなく、すべてのコアで実行を許可しても、どちらかのCPUのすべてのコアのみで実行されていました。

CPU affinity


 もともとはNUMAの出始めの頃のサーバープロセスやDBプロセスのパフォーマンスチューニング手段でしたが、現在でも40GbE/100GbEなどの広帯域インターフェースを使う際にインターフェースに近いCPUでの実行を強制するために有効です。
 ちなみに、現在のOSは賢いので極端なプロセスでなければ設定しなくてもNUMAノードのCPUやメモリの空き状況を見て、余裕がある方によしなにNUMAをまたがないようにプロセスを振り分けてくれます。

ゲームプロセスにCPU affinityをかけたい


 プロセスのアフィニティー自体はタスクマネージャーの詳細の中にある「関係の設定」より簡単にかけることができるのですが、ゲームプロセスなどの場合、チート防止などの理由により起動後にアフィニティーを変えることができないことが多々あります。

 その場合どうすればいいかと実験したところ、アフィニティーがかかったプロセスから子プロセスを実行するとアフィニティーが伝搬するので、steamなどを

start /affinity ffff steam.exe


 で呼び出し、その伝播したSteamから更にゲームを実行すると最初からアフィニティーがかかった状態でゲームを開始できるようです。

 しかし、これでうまくいくものもあればメニューの変なところで止まるものもあったため、結局Steamにアフィニティーをかけるのはやめました。

CPU2を混雑させたい


 ゲームにアフィニティーをかけるのが問題であれば、自動選出の結果CPU1が優先的に選ばれるようにしたいので、逆にゲームに関係しないどうでもいいプロセスをCPU2側で実行させて意図的にCPU2を混雑させることにしました。

十進数でアフィニティーを確認する


 このあとのPowershellでまとめてアフィニティーを設定したいので、まずnotepadなどを起動し、タスクマネージャーからCPU2を使うように手動でチェックを入れ、アフィニティーを設定します。




 CPU2(ノード1)側をすべて使用するように設定したら、PowerShellでアフィニティーの値を取得します。もちろん関数電卓で直接やってもいいのですが、間違うことがあるのでこの方法が楽です。

PS W:\> Get-Process notepad|Select ProcessorAffinity

ProcessorAffinity
-----------------
4294901760

 4294901760というのは32スレッドのうち、奥の16スレッドを使用するという定義で、関数電卓に入れバイナリ値を見るとわかりやすいです。




 ちなみに、PowerShellだとアフィニティーの指定は10進数ですが、start /affinityだと16進数になるので、古くからあるstartコマンドで同じことをしようとすると

start /affinity ffff0000 otepad.exe

 になります。

邪魔なものをどかす


 これから実行するプロセスをすべて特定のアフィニティーをかけて実行したい場合、まずcmd.exeをアフィニティーかけた状態で立ち上げ、一度explorerを taskkill /im explorer.exe /fなどで殺したあと、explorerと実行するとcmd.exeにかかっていたアフィニティーでデスクトップ環境が立ち上がります。

 そのエクスプローラから実行されたプロセスもアフィニティーが伝搬していくので、デスクトップのアイコン等をクリックして実行してもアフィニティーがかかった状態で実行されていきます。

 停止できないプロセスについては、管理者権限で実行したpowershellで

foreach($p in "SearchIndexer","OfficeClickToRun","sqlservr","sqlwriter"){ ForEach($PROCESS in GET-PROCESS $p) { $PROCESS.ProcessorAffinity=4294901760} }

 などと実行するとアフィニティーをまとめて変更できます。ただ、svchostやdwmなどはアフィニティーをかけるとOSが不安定になることがあるので、変更しないほうが良いようです。また、CrystalDiskMarkなどもアフィニティーがかかっている状態だと正しく実行できませんでした。

 また、どのコアでどのプロセスが暴れているかを見つけるには Process Explorer を使うといい感じに見つけられます。




 大体の場合、ブラウザ(ChromeやFirefoxなど)をCPU2側で実行しておけば(特にマシンをシャットダウンせずに放置するような環境の場合)メモリ使用量などの関係で「CPU2は混んでいる」となるようです。

ゲームを実行してみる


 アフィニティーのかかっていない状態のSteamなどからゲームを起動します。その後、CPU1側が優先的に使われるようになったら成功です。




 それでもまだCPU2が使われる場合はCPU2のしばきが足りないのでいろいろ実行してください。

 CPU2側でゲームを実行されると、特にオープンフィールドなゲームでマップが広くメモリ使用量が多いゲーム(GRWとかArkとか)を実行すると、CPU2側からQPI越しにGPUになんか転送してるんだろうなというような一瞬のフリーズが起こることがちょくちょくありました。しかし、CPU1側で実行を強制するとそれがだいぶ軽減されました。
 また、ブラウザをCPU2側で実行するとどれだけブラウザが重くなってもゲームに影響しないので、それはそれで2ソケットの使い分けとして便利な気がします。
 そもそもXeonはゲームするようなプロセッサではないというのは尤もですが…。

 マシンを新しくしようかどうか悩むところです。

[ 2 コメント ] ( 1002 回表示 )   |  このエントリーのURL  |  $star_image$star_image$star_image$star_image$star_image ( 3 / 899 )  |  
【HW】SRPの速度テスト 
 前回のエントリでHCAより先にPCI-Eの帯域が限界に来ていたことに気がついたので、HCAを2枚使ったらどうなるかをテストしてみました。今までDualportでもまあこんな速度かと思っていたのですが、よくよく考えたらPCI-Eがネックになっていたという…。SRP自体使い始めてからかれこれ5年ほど経過しますが、ほぼ情報がない(≒誰ももう使ってない)ので悲しみと今後iSERを使ったときの比較用のメモとして残します。

セットアップ


テスト環境はこんな感じです。


 ストレージサーバ RX300S7
 
CPU Xeon E5 2643*1
Mem 8GB*8 at DDR3 1600MHz
Drive SanDisk Optimus Ascend 800GB *10 /RAID5 for Data (PN:LN0800FEHDC)
RAID HBA D3116C (MegaRAID SAS 2208@PCI-E 3.0)
IB HCA MT26428 (Connect-X2 VPI Single Port QDR) *2@PCI-E 2.0
Target SCST Version 3.4.0 from git repo

 LIOでもSRPターゲットを作れますが、負荷が1つのコアに集中する、たまに刺さる、認証なしのターゲットが作れないといったことを経験したのでSCSTを使っています。SCSTは非常に安定していて、3-4年位使っていますが問題ありません。ストレージ側の設定はこんな感じです。
# cat /etc/scst.conf

HANDLER vdisk_fileio {
DEVICE dev-srp0 {
filename /vdisk/srp0.img
}
}

TARGET_DRIVER copy_manager {
TARGET copy_manager_tgt {
LUN 0 dev-srp0
}
}

TARGET_DRIVER ib_srpt {
enabled 1
TARGET fe80:0000:0000:0000:0002:c903:000f:41a7 {
enabled 1
rel_tgt_id 1
LUN 0 dev-srp0
}

TARGET fe80:0000:0000:0000:0002:c903:000f:8395 {
enabled 1
rel_tgt_id 2
LUN 0 dev-srp0
}
}


 仮想ホストの環境は以下です。SRPを使う手順はこちらを参考にしてください。
DL380p gen8 ESXi 6.5


CPU Xeon E5 2667v2 *2
Mem 16GB*16 at 1333MHz
IB HCA MT26428*2 (Connect-X2 VPI Single Port QDR)


 仮想マシン
Windows 10 x64 Pro 1809
vCPU 4
Mem 6GB
ベンチマーク用のディスクには準仮想化SCSIコントローラーを使

 この状態で、ディスクへのパスを切り替えてテストします。 テストには最初 IO Meterを使おうと思ったのですが、パラメーターによって大きく値が変わってしまうので再現性のあるCrystalDiskMark6.0を使用しました。

ストレージ接続*1本


 まずは、1ポート接続でテストします。


 接続図はこんな感じです(途中のIBスイッチは省略)



 その結果が以下です。


 読み、書きともに120-130kIOPSで、帯域は3148MB/sでした。

ストレージ接続*2本


 次に、接続を増やしてテストします。ラウンドロビンの切り替えは1IOごとに行う設定にします。
esxcli storage nmp satp rule add -R gsan -s VMW_SATP_DEFAULT_AA -P VMW_PSP_RR -O iops=1

 設定ははこうなります。


 接続図はこんな感じです(途中のIBスイッチは省略)



 その結果です。


 読み込み250kIOPS、書き込み150kIOPS出ました。また、帯域は読み込みに関してはきれいに2倍にスケールしました。いくらほぼストレージサーバのRAMへの読み書きとはいえ、びっくりするほど速いです。こんな速かったのか…。
 また、読み込み250kIOPS時のストレージサーバの負荷はこんな感じでした。


  何かのエージェントで監視しているわけではなくnmonで見ていましたが、これより大きく外れることはありませんでした。

まとめ


 SRPはもはや旧世代なハードウェア、かつ4コアという、今となっては非力な環境でもかなりの性能を発揮できました。もちろん、搭載しているRAMがちょっと多いのでDirtyやキャッシュの助けもありますが、nvmeのような高速なストレージを使ってもSRPはネックにならないというのはかなり強いです。
 とはいえ、これを目当てに今からInfinibandを入れるのは、サポートの切れたConnect-X2からCX3世代をサポートの切れたドライバで動かすという、あまりにも将来性がない構成になるのでおすすめしません。
 iSERは試したことがありませんが、原理としては同じなので今からやるならせめて40GbEのiSERでしょうか。100GのiSER環境も試してみたいのでどこかにスイッチとNICが転がってないかなと思う日々です。

 早くこれよりも超高速なストレージを見つけて将来性のあるモダンな構成に移行したい…

[ コメントを書く ] ( 539 回表示 )   |  このエントリーのURL  |  $star_image$star_image$star_image$star_image$star_image ( 3.1 / 1319 )  |  

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 進む> 最後へ>>