春告げ抹茶ホイップ

PC組み直し

先月に自作 PC にパーツを追加して結構大きく組み立て直しました。 新しい PC は GPU 二枚刺しをして Linux 上で GPU パススルーして Windows の VM を動かすという、ちょっと面白いことをやっています。 せっかくなのでその PC の構成とかをメモしておきます。


PC パーツ構成

再構築前から引き継いだ PC パーツは次のとおりです。

  • CPU: AMD Ryzen 9 9900X
  • グラボ: NVIDIA RTX 3080Ti
  • メモリ: 128GB (32GB x 4)
  • SSD:
    • m.2 NVMe: 4TB と 2TB と 2TB
    • SATA: 4TB
  • HDD: 8TB
  • 電源: 1200W のなんか
  • CPU クーラー: 簡易水冷のなんか適当なやつ

これらにさらに新しく買い足したパーツは次のとおりです。

  • マザボ: ASRock X870 Taichi Creator
  • グラボ: AMD Radeon RX 9060XT 16GB
  • PC ケース: Antec C8 Wood

ASRock X870 Taichi Creator が PCIe 5.0 x16 スロットを2つ持っているので、そこに NVIDIA RTX 3080Ti と AMD Radeon RX 9060XT を刺しています。 2つ使うと x8 が2つになっているかもしれませんがとりあえず動いています。

ASUS の ProArt X870E-CREATOR WIFI と悩みましたが、こちらのほうが PCIe スロットの間の隙間が広いので GPU を2枚刺しても窒息しにくそうなので選びました。 ASRock のマザボは CPU の焼損が報告されていたりとかなので若干ビビっていましたが、CPU が壊れたら新しい CPU を書い直す口実ができるということで ASRock にしました。 今のところは CPU が壊れることもなく順調に動いています。


Windows VM の様子

メインの OS は Fedora を普段使いしています。 しかし、ソフトウェアの開発などでは Windows での動作を確認したいことも多く、Windows 環境を捨てるわけには行きませんでした。

PC を組み直す前はデュアルブートで Windows 環境を用意していました。 しかし、これは Windows が普通に立ち上がるのはよいのですが、環境を切り替えるのに Linux をシャットダウンして PC を再起動する必要があり、大変不便なのですよね。

そこで、今回は Linux 上に Windows の VM を構築することにしました。 ただ VM を構築するだけでは GPU が使えません。 しかし私はグラフィクス系のプログラミングをよくやっており、GPU がない環境というのは致命的です。 VM に GPU をパススルーで割り当てることができるのですが、GPU が1つしか無い場合はホスト OS である Linux が GPU を使えなくなってしまいます。 そこで、GPU を2つ刺して、1つを Linux 用、もう1つを Windows 用に割り当てることにしました。

VM を立ち上げていないときはメインの Linux で AMD Radeon RX 9060XT と NVIDIA RTX 3080Ti の両方を切り替えて動作確認しながらプログラミングを行えます。

そして Windows VM を立ち上げる際には AMD のリセットバグを回避するために NVIDIA RTX 3080Ti を割り当てています。 VM を立ち上げる前に NVIDIA RTX 3080Ti を利用しているアプリケーションが落ちていることを確認して、VM 起動時に GPU を付け替えてパススルーするようなスクリプトを VM の起動時スクリプトに割り当てています。

また、この VM は SSD もパススルーで与えています。 これによってこの VM の Windows に使っている SSD を通常起動時のブートディスクとすることで、デュアルブートで VM ではなく実マシンでも同じ環境を起動できるようになっています。 このため普段は Linux 上の VM で Windows を使いつつ、よりちゃんとした動作確認が必要な際は PC を再起動して Windows で立ち上げ直すことで動作確認ができます。 便利。

以下の画像は Linux 上で Windows の VM が GPU 付きで動いている様子です。

USB のパススルーもしているので、ペンタブをそのままパススルーして Windows 上で認識させて Clip Studio Paint も使えます。 お絵描きは Linux 上で Krita を使っても良かったのですが、個人的には Clip Studio Paint の方がしたのレイヤーでクリッピングとかの挙動が直感的だったりと使いやすいので、お絵描きは Windows 側で行っていこうかなと思っています。


ついでにオーディオインタフェースも 2 台体制になりました。 Windows VM の USB にパススルーで渡すオーディオインタフェースと、Linux 側で使うオーディオインタフェースを用意して、Windows 側から Linux 側のオーディオインタフェースの入力に混ぜ込むことで、Windows の音の遅延も小さく Linux の音とミックスして聞こえるようになります。

DAW を立ち上げて MIDI キーボードで叩いてもさほど遅延が気にならないレベルで動いているので、なかなか良い感じです。

DTM の音源は Windows と Mac でのみ提供されて Linux では yabridge とか経由しても動かないものとか結構あるので、DTM も Windows VM 上でやるのが良さそうです。


Windows のアプリを Linux 上で動かしたいだけなら他にも最近だと WinBoat とかもありますが、まだ安定していないのと独自の GPU 仮想化技術とかを挟む想定っぽくて GPU プログラミングをする人間としてはちょっと扱いにくそうに思いました。 VM とデュアルブートの両体制なら、問題なく Windows と Linux で GPU を使ったプログラムを開発し検証できると思います。


今回の構成は GPU 二枚刺しということでなかなか面白い構成になりました。 ゲームとかするだけなら GPU を二枚刺す意味もないですし、AI の学習のためだったら NVIDIA で統一したほうがよいのでしょうけど、私はグラフィックス周りのプログラミングをすることが多いので、こういう構成が一番都合が良いです。 NVIDIA と AMD のグラボを両方確認できる環境というのはなかなか夢のようですね。

普段使いにおいても Linux の Fedora を使いつつ、必要に応じて Windows の VM 上のソフトウェアを Linux の上から使えて、しかも GPU も使えるので性能的にも問題ないというのは非常に便利です。

結構値の張るマザボを買いましたが、それに見合った満足行く仕上がりの PC となっていて満足です。