ProxmoxVE GPUオーディオ音割れ対策方法（MSI有効化）

ProxmoxでGPUをPCI Passthroughしていて、そのオーディオ機能を利用している場合に関連する。
ハードウェアの割り込み処理がうまく機能せず、遅延のため音割れ発生した(Message-Signaled Interrupts)。対策方法を試し、効果があったのでまとめてみた。オーディオ側だけでなくグラフィック側のパフォーマンス向上に効果があると思うので試してみてほしい。

## PCIデバイスの特定
CUIでも確認できるが、仮想マシンのPCIデバイス画面がわかりやすい。
![スクリーンショット 0003-09-27 6.52.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/e8ae9ff3-19b1-739c-0148-269ec3d60ffb.png)
以下の場合、今回の場合では0000:26:00.0がGPUのグラフィック、0000:26:00.1がオーディオとなる。
![スクリーンショット 0003-09-27 6.53.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/a9657883-bec6-acf5-c6b4-c905207bec42.png)

Proxmoxのホスト側のコンソール画面でMSIの現在の利用状況を確認する。
先程の最後の枝番「.0」を除いた「0000:26:00」でlspciを行い「26:00」でgrepすると1行目が「VGA compatible controller」、2行目が「Audio device」と表示されていることがわかる。

```bash
lspci -vs 0000:26:00 | grep 26:00

26:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller])
26:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)
```

# MSIが有効かどうかの確認

次にMSIの利用状況を表示する。MSIが有効化されていない状況であれば以下のように表示される。Enable-ならば無効、+ならば有効。この場合無効とわかる。

```bash
lspci -vs 0000:26:00 | grep MSI:

Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
```

# Windows側での設定

デバイスマネージャーでデバイスを特定する。まずはグラフィック側を特定。「ディスプレイアダプター」「詳細」**「デバイスインスタンスパス」**を選択。「値」の欄を控える。右クリックでコピーできる。

今回の場合では「PCI¥VEN_10DE&DEV_1C82&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&00E0」とかいてある。
![スクリーンショット 0003-09-27 7.17.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/4ba48771-4e65-3a88-9f20-a1a56ba1a015.png)

レジストリエディタを管理者権限で起動し、以下のパスを開く
「HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥〜さっきのパス」

今回の例では「HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥PCI¥VEN_10DE&DEV_1C82&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&00E0」となる
![スクリーンショット 0003-09-27 7.20.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/216455fc-ee54-5a84-1ba3-f6da15a83409.png)

「新規」→「キー」で「Interrupt Management」、「MessageSignaledInterruptProperties」を追加と以下の画像のようなツリーになる。
![スクリーンショット 0003-09-27 9.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/856df47f-b347-f65a-8d62-d1096a3cc701.png)

「新規」→「DWARD(32bit)」で「MSISupported」を追加、値に「1」を入力。
![スクリーンショット 0003-09-27 9.56.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/278a692a-8c61-d3cd-60fb-99a6d1d6b6c0.png)

最後にWindowsを再起動する。

## Proxmoxホスト側での動作確認

もう一度、コマンドを入力。

```bash
lspci -vs 0000:26:00 | grep MSI:

Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
```

1行目がグラフィック、「Enable+」と有効化されていることがわかる。

## オーディオの方の設定

オーディオは「サウンド、ビデオ、およびゲームコントローラ」の「NVIDIA High Definition Audio」で確認する。
オーディオは**「親」**という項目で確認する。今回の場合では以下のとおり。「PCI¥VEN_10DE&DEV_0FB9&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&01E0」
![スクリーンショット 0003-09-27 10.17.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/8cd72c92-d4ff-cef6-a0a0-e557dd5f45f0.png)


先程と同様にレジストリエディタで設定を行う。
![スクリーンショット 0003-09-27 10.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/3ec572b3-3701-0768-1647-3bf33c0ab534.png)

再起動。

## オーディオについてMSIが有効になったか確認

```bash
lspci -vs 0000:26:00 | grep MSI:

Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
```

2行目がオーディオだった。そちらについても「Enable+」と有効になっていることがわかる。

2回に分けて説明しているが、グラフィックとオーディオを同時に設定してしまっても問題ない。