かすれた*Pluser*の巻物


新しいPCを買った

今まで使っていたPCが壊れたので、買い替えました。その顛末を備忘録も兼ねて書いておきます。

突然の故障

使っていたPCはDellの「XPS 15 2-in-1 (9575)」で、昨年夏ごろヤフオクで中古品を購入したものでした。 XPS15は定価だと15万円からなのですが、購入したモデルはカスタマイズされていて、新品なら30万円相当でした。DellはLinuxへのサポートも他社に比べると比較的マシな方で、2-in-1で高性能なPCが欲しいということからこの機種にしました。 購入後、Linuxを導入してしばらく使っていくと、いろいろとおかしい点は出てきました。まあ、詳しくは別の機会に。

  • キーボードのスペースキーだけ押した時の感触が違う(初期ロットでの不具合らしい)
  • 電源の動作が不安定。例えば、電源ボタンを長押ししないと電源が入らない時と、すぐ入る時がある
  • 時折トラックパッドやキーボードが無反応になる(CPUのCステートを固定すると改善する)

などなど、随所にハードウェア、BIOS、ファームウェアのバグとみられる不具合がありました。 実は、元々ノート型PCはファームウェアが腐っていることが多く、ある程度のバグの存在は容認せざるをえない状況のため、無理して使っていました。

しかし、調子悪いからやってみるかと実行したファームウェアのアップデート中に問題が発生。プログレスバーが10分間で1パーセント程しか進まなくなってしまい、(恐らくバッテリー切れで)パワーダウン、帰らぬPCとなりました。もちろん電源ケーブルは接続していましたが、アップデートメッセージによると、ECシステムのファームウェアを書き込んでいる所らしかったので、PC自ら外部電源をカットしていたのでしょう。

結果として、電源ボタンにほとんど反応を示さなくなってしまい、修理(マザーボードの交換)するしかないな、ということになりました。

修理を拒否される

Dellのサポートに連絡し(かなり混雑していて連絡しにくいです。メールでのやりとりをおすすめします)、修理してもらおうとした所、先方に登録されている持主と違うから修理できないと言われました。持主が変わったのなら、変更手続きをとってくれ、ということで指定されたフォームをみてみたものの、元の持主の名前や住所が必要そうでした。 うーん。オークションで買った時の荷送り状を保管していたので確認してみたのですが、そこには「匿名配送」の文字が… 元の持ち主との連絡の取りようがありませんし、万事休すですね。

バックアップ用のPCではなく、ちゃんとしたPCがとり急ぎ必要だったので、一旦DellのPCを修理することは諦めて新しいPCを購入することにしました。

PCの選定

ここから本題です。

要件を考える

まず、必要な要件を考えます。 用途はデスクトップですが、様々な理由からOSはLinuxに限ります。WindowsもMacも使い辛すぎてダメです。

でもWindowsの存在は無視できません。Windows専用のソフトなどもあります。ゲームとかAdobe製品とかね。 そのため、Linuxをベースとして、その上で仮想マシンを走らせることを考えます。

グラフィック性能もそれなりに重要ということが分かっているので、KVMでGPUをパススルーすることにします。 仮想マシンを走らせるので、CPUはシングルスレッド性能よりもマルチコアでの性能を重視します。

とにかく実用可能な速度で仮想マシンが動くことが重要。そしてそのくらいの性能があれば、開発だってなんだってできるだろうと考えました。

注意すべき点

GPUパススルーは(ある程度枯れた技術とはいえ)まだ不安定で、特に一般向けのGPU(GeForceシリーズ、Radeonシリーズ)を使う場合、仮想マシン上で使われることは考慮されていないので、さまざまな問題があります。例えばGeForceシリーズは、仮想環境下にあることを検知すると動作を停止します。Radeonシリーズは電源操作に独特の手順があり、一般的なリセット命令が使えず、そのため仮想環境を一度シャットダウンすると、デバイスが使用不能な状態になってしまい、ホストマシンを再起動するまで使えなくなってしまいます。

今回はエントリーレベルのCPUは考えていないので問題ありませんが、Intel制CPUの一部はGPUパススルーに必要な機能を持っていません。ちなみにAMD製は全ての製品で搭載されています。 さらにマザーボードにも問題があります。ACSといって、パススルーするデバイスにはスロットやポートに応じた「まとまり」があります。マザーボードやCPUによっては、この「まとまり」が不便なかたまりになっていて、最悪パススルーできないということも考えられます。 この「まとまり」がどのようになっているかについては、マザーボードによって異なり、正直買ってみるまで分かりません。端的に言うとギャンブルです。

選定した製品

購入した製品のリストは以下のようになっています。値段はいずれも現時点での価格コム価格を参考にしています。 一つずつ選定の理由を書いていきます。

種別 メーカ・ブランド 製品名 価格(千円)
CPU AMD Ryzen9 3900X 60
M/B ASRock X570 Phantom Gaming X 39
Memory G.Skill. F4-3600C19D-32GSXWB [DDR4 PC4-28800 16GB 2枚組] 17
PSU Corsair RM850 CP-9020196-JP 11
Case CoolerMaster MasterBox Q500L MCB-Q500L-KANN-S00 6
GPU MSI Radeon RX 5700 XT EVOKE OC [PCIExp 8GB] 53
Storage CFD PG3VNF CSSD-M2B1TPG3VNF 24
S/L Microsoft Windows 10 Professional 26
NET 236
CPU

まず、現在AMDが10年ぶりに眠りから目を覚まし、Intelに対して値段・性能の点で圧倒しています。一部ソフトでIntel製の方が動作が安定していることや、Intelコンパイラが使えるというメリットはあるものの、総合的に見てAMD製CPUは圧倒的です。その原因としては、IntelのCPU製造が難航していることが原因だと思っています。現在Intelは7nmプロセスに挑戦していますが、相当苦戦しているようで、市場にまともにCPUを供給することすら難しくなっています。AMDはそれよりも若干簡単なプロセスを採用しているため、優位に立てているようです。

今回はAMD製CPUを採用することにします。また、仮想マシンを使う、高負荷環境なためマルチコア性能を優先することにます。すると、選択肢に上がってくるCPUは、Ryzen9 3900X、Ryzen9 3950X、Threadripperシリーズとなります。Threadripperはロマンがありますが、恐らく使用者が少なく、バグへの遭遇率が高く、対処が難しいと考えられること、専用ソケットのマザーボードはかなり高価になること、かなりTDPが高く、きちんと性能を発揮させるためにはCPUクーラーも水冷が必要になりそうなことなどから今回は避けました。Ryzen9 3900Xと3950Xですが、コア数が12コアと16コアでどちらも悪くなさそうでした。ここで価格を考えると、3950Xには標準CPUクーラーが付いておらず、CPU本体との価格差とあいまって5万円近い差額になります。ソケットは共通していることなどから、いざとなったら買い替えることを考えつつ、3900Xを選択することにしました。

マザーボード

あまり各社のマザーボードを使い比べたことがありません。現在使っている自作サーバーのマザーボードはGIGABYTE製です。SATAポートの数の多さで決めた覚えがあります。特に不満はありませんが、EFIブートエントリーが予期せずリセットされてしまったりして、若干不安定に感じます。

調べてみると、仮想化用途では、ASRockの製品を使うのが定石らしいです。ASRockのTaichi以上のグレードのマザーボードには、SR-IOVという仮想化関連の機能が搭載されていることが分かっているらしく、つまりメーカーとして仮想化をサポートしていると考えられます。またACSその他の設定もきちんとできるようです。そのため、今回はASRockからTaichiを選ぶことにしました。しかし、いざ購入しようとしてショップを眺めたところ、より上位のPhantom Gaming Xがわずか千円の差となっていたため、そちらを選択することにしました。Taichiとの違いは2.5GのNICを追加で搭載しているかどうかです。なお、このマザーボード、高いだけあってNICはちゃんとIntel製です。安心できます。

メモリ

結論から言うと、コストパフォーマンスの良いオーバークロックメモリに決めました。OC時の動作周波数は3600MHz、容量はとりあえず32GBです。仮想マシンを動かす関係上、メモリはそれぞれの仮想マシンに占有されてしまうため、とにかく大量のメモリが必要になります。ただし、Windowsといえども、仮想マシンとしては8GB程度あれば使えるだろうと考えて、この容量にしました。これも不足したら買い替える予定です。 今回のマザーボードでは4000MHzまでのオーバークロックメモリに対応しています。AMDの今回のシリーズはCPUのコア間通信がメモリクロックに同期(マザーボードの設定で変更可能。ただし性能は劣化)するようになっており、CPU性能がメモリクロックによって比較的影響を受けやすい構造になっています。そのため、オーバークロックされたメモリを採用することにしました。

電源ユニット

コルセアの850W電源にしました。完全プラグイン式。電源にはこたわりが無いので、80GOLD認証取得されていて、大容量で安いものということで選びました。故障時にマザーボード他を巻き込まないよう祈ってます。低負荷時にはファンの回転を停止する機能なども付いています。GPUとCPUがかなりの電力食いなのが分かっていたので、なるべく大容量なものを選択しました。

ケース

デスクトップ用途ですし、一応ケースに入れておかないと…ということで適当に決めました。CoolerMasterのブランドは以前から聞いていたのもあり、安くてコンパクト(シャドウベイが無い)だったのでこれにしました。自分の手元に届く範囲でPCを置く場合、フルタワーは大きすぎです。

グラフィックボード

検討の末、Radeon 5700 XT にすることにしました。

グラフィックボードを購入する場合、普通、GeForceかRadeonになります。GeForceにはCUDAがあり、機械学習関連で良く使われていますし、自分としては使う機会も多いのですが、いかんせんNivida社はLinuxサポートが最悪です。オープンソースドライバの開発に非協力的なので、一応ディスプレイ表示に使えるといった程度でnouveauドライバのパフォーマンスは最悪です。プロプライエタリなドライバはカーネルへの制約が厳しく、最新のカーネルに追従できないこともままあります。自分としては最新のカーネルが使えないのは非常に困るので、今回GeForceは採用しないことにしました。

一方のRadeonですが、こちらは打って変わって、数年前からオープンソースドライバの開発にメーカーがかなり協力的になっています。性能も良く、普通に常用できるレベルです。プロプライエタリなドライバもあり、そちらの方が性能は良いようですが、安定性などを考えオープンソースドライバを使うことにします。今回はRadeonを採用することにします。

さて、ゲーミング用途でのRadeonの存在感は小さいこともあって、Radeonにはハイエンドレンジのカードが存在しません。おそらく後で投入されるのだと思いますが、まあ4Kゲームを最高設定でプレイしようという訳ではないため、そこそこの性能のものが用意できれば良いと考え、ミドルハイレンジのRadeon 5700 XTを選択しました。

MSIの製品にした理由は、ケースの制約からです。コンパクトなケースを採用しているため、電源の大きさや追加の冷却パーツによっては、全長の長いグラフィックボードは入らないのです。今回は、電源、グラフィックカードのどちらかを買い替えた場合に供えて、一方を買い替えても問題無いように寸法を確認しました。その結果、基準を満たすコンパクトなグラフィックボードはこの製品しかありませんでした。

Radeonをパススルーする上で問題になるのは、通称「Reset But」と呼ばれている挙動です。標準的な方法でGPUをシャットダウンしようとすると、GPUがロックして使えなくなってしまうというものです。ホストを再起動すれば直りますが、仮想マシンの起動の度にいちいちホストを再起動なんてやってられません。Radeonを採用するには、この挙動が修正されているか、少なくとも回避策が分かっていることが要件でした。

Radeon 5700 XT はNaviという名前の新しいアーキテクチャを搭載していて、この挙動が修正されていることを期待したのですが、どうやら修正はされていないようでした。しかし、Naviのこの挙動に対応するためのパッチが開発されており、暫定的に対応できるようでしたので、この製品を採用することにしました。(後にメインストリームのカーネルに含まれるとのことです。含まれるとしてもおそらく>=5.6でしょう)

ストレージ

どうせならPCIe接続のちょっぱやのやつを使いたい、ということで秒間4GBの転送速度を誇るM.2形状のストレージです。1TB分。確か書込み耐久性も他製品の2,3倍程度はあったと思います。確か数年前はこのクラスは100万円越えてたような気が… 技術の進歩ってすごいですね。足りなければ増やします。

現在使っているファイルサーバーはSMBやiSCSIを話せるため、高速レスポンスが必要なファイルだけ本体に置いて、あとはネットワーク越しにアクセスすることにします。そのため、大容量のHDDなどはとりあえず買わないことにしました。ちなみにマザーボードにはSATAポートが8つ付いています。まあケースには2台までしか搭載できないんですけどね。

ソフトウェア

Windowsライセンスです。Professional版です。高い。ほとんど使わないにもかかわらず、2.6万は高いです… WindowsはHome版ではなくProfessional版を常に買うようにしています。今までHome版を使っていて欲しい機能が無くて後悔したことが何度もあったので…

組み立て

これを

computer_parts.jpg

こうして

cpu_installed.jpg

storage_installed.jpg

こうじゃ!

almost_complete.jpg

最近のマザーボードは袋とかに入ってないんですね、箱を開けるとゴロっとそのまま。 あと、このマザーボード、バックパネルが最初から組み込んであって、ピッタリはまるようになってます。すごい。 ケースもあらかじめスペーサーが入れてあって手間が省けました。

設定

BISO設定画面をいじります。SecureBootはデフォルトでオフです。まあOFFのままにしておきましょう。データ保護は別のレイヤーでなんとかすることにします。

メモリのXMPプロファイルを読み込んで有効にします。忘れるとせっかくのOCメモリが定格動作になってしまいます。

仮想マシン上でPCIeパススルーが動くようにするためにはIOMMUを有効にする必要があります。

uefi_setting.jpg

設定項目はAdvanced/AMD CBS/NBIO Common Optionにありますが、Enable AER Capを有効にしないと、設定項目に出てきません。 同時にACS Enableにしておきます。

需要がありそうなので、ACS Disable と ACS Enable 状態でのIOMMU Groupについても載せておきます。いろいろ組み込んでしまった後で、さらにスクリーンショットですみません。

iommu_before_acs.jpg

iommu_after_acs.jpg

IOMMUデバイスが分離されているのが分かりますね。

そして最後に、Gentooをインストールします。

install_gentoo.gif

後は適当にインストールやらなにやらを済ませるだけです。あまりひっかかる所は無く、非常に素直でした。 今回、実はグラフィックボードを2枚刺しているのですが、どちらをboot_vgaにするかを選ぶ項目がUEFI設定画面にはありませんでした。boot_vgaデバイスをパススルーするのはちょっと厄介なので、できれば避けたいところです。今回は、CPUに近い側のデバイスが自動的に選択されるようでしたので、スロットを差し替えて(グラフィックボードの位置を交換して)対処しました。