差分
このページの2つのバージョン間の差分を表示します。
virtualization:proxmox_ve_6_3_pci_passthrough_tips [2021-01-14 08:40] Decomo 作成 |
virtualization:proxmox_ve_6_3_pci_passthrough_tips [2021-01-14 11:26] (現在) Decomo |
||
---|---|---|---|
行 12: | 行 12: | ||
==== IOMMUの有効化 ==== | ==== IOMMUの有効化 ==== | ||
- | カーネルコマンドラインでIOMMUを有効化する。PCIパススルーの有効化とは、本質的にはこれだけ。 | + | 本ページでもPCIパススルーのあれこれを長々と書いているが、PCIパススルー有効化の肝はIOMMUの有効化である(もちろんVT-dを有効化しとくといった前提はあるけど) |
+ | |||
+ | カーネルコマンドライン''/ | ||
- | ''/ | ||
<code bash> | <code bash> | ||
# cat / | # cat / | ||
行 26: | 行 27: | ||
</ | </ | ||
- | なお、AMDプラットフォームの場合は'' | + | なお、AMDプラットフォームの場合は'' |
また、ZFSルートシステム以外では''/ | また、ZFSルートシステム以外では''/ | ||
- | |||
- | ==== VFIOモジュールの読み込み ==== | ||
- | |||
- | < | ||
- | VFIOはLinux 3.6からカーネルに内蔵されたため、本作業は必要ないようだ。少なくともうちの環境ではmodulesを書き換えずともVFIOが使えている。参考情報として残しておく。 | ||
- | </ | ||
- | |||
- | ''/ | ||
- | |||
- | < | ||
- | vfio | ||
- | vfio_iommu_type1 | ||
- | vfio_pci | ||
- | vfio_virqfd | ||
- | </ | ||
- | |||
- | カーネルモジュール関連の変更を行った際は、忘れずにinitramfsの再構築を行う。 | ||
- | |||
- | < | ||
- | # update-initramfs -u -k all | ||
- | </ | ||
==== Interrupt Remappingの確認 ==== | ==== Interrupt Remappingの確認 ==== | ||
- | システムがIRQマッピングに対応してるか確認する。 | + | システムがIRQリマッピングに対応してるか確認する。 |
起動メッセージ内に'' | 起動メッセージ内に'' | ||
< | < | ||
- | # dmesg | grep 'remapping' | + | # dmesg | grep remapping |
[ 1.736785] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. | [ 1.736785] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. | ||
[ 1.737508] DMAR-IR: Enabled IRQ remapping in x2apic mode | [ 1.737508] DMAR-IR: Enabled IRQ remapping in x2apic mode | ||
行 69: | 行 49: | ||
</ | </ | ||
- | ==== IOMMUの状態を確認 ==== | + | ==== 有効化の確認 ==== |
- | 一度システムを再起動しIOMMUを有効化と状態の確認を行う。 | + | 一度システムを再起動し、起動メッセージ内に'' |
- | + | ||
- | 起動メッセージ内に'' | + | |
< | < | ||
行 79: | 行 57: | ||
[ 0.014749] ACPI: DMAR 0x0000000079D90148 000128 (v01 ALASKA A M I 00000001 INTL 20091013) | [ 0.014749] ACPI: DMAR 0x0000000079D90148 000128 (v01 ALASKA A M I 00000001 INTL 20091013) | ||
[ 0.950958] DMAR: IOMMU enabled | [ 0.950958] DMAR: IOMMU enabled | ||
- | [ 1.734721] DMAR: Host address width 46 | + | (中略) |
- | [ 1.734724] DMAR: DRHD base: 0x000000fbffc000 flags: 0x0 | + | |
- | [ 1.734732] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap d2078c106f0466 ecap f020de | + | |
- | [ 1.734736] DMAR: DRHD base: 0x000000c7ffc000 flags: 0x1 | + | |
- | [ 1.734742] DMAR: dmar1: reg_base_addr c7ffc000 ver 1:0 cap d2078c106f0466 ecap f020de | + | |
- | [ 1.734746] DMAR: RMRR base: 0x0000007bc18000 end: 0x0000007bc27fff | + | |
- | [ 1.734749] DMAR: ATSR flags: 0x0 | + | |
- | [ 1.734751] DMAR: RHSA base: 0x000000c7ffc000 proximity domain: 0x0 | + | |
- | [ 1.734754] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x1 | + | |
- | [ 1.734758] DMAR-IR: IOAPIC id 3 under DRHD base 0xfbffc000 IOMMU 0 | + | |
- | [ 1.734761] DMAR-IR: IOAPIC id 1 under DRHD base 0xc7ffc000 IOMMU 1 | + | |
- | [ 1.734764] DMAR-IR: IOAPIC id 2 under DRHD base 0xc7ffc000 IOMMU 1 | + | |
- | [ 1.734766] DMAR-IR: HPET id 0 under DRHD base 0xc7ffc000 | + | |
[ 1.734769] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. | [ 1.734769] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. | ||
[ 1.735497] DMAR-IR: Enabled IRQ remapping in x2apic mode | [ 1.735497] DMAR-IR: Enabled IRQ remapping in x2apic mode | ||
行 101: | 行 67: | ||
</ | </ | ||
- | ==== IOMMUデバイスグループの確認 ==== | + | ===== VFIO ===== |
+ | |||
+ | VFIOはユーザースペースからデバイスを操作するためのフレームワークである。PCIパススルーにおいては、ホストからデバイスを分離するのに用いられる。 | ||
+ | |||
+ | ==== モジュールの読み込み ==== | ||
+ | |||
+ | ''/ | ||
+ | |||
+ | < | ||
+ | vfio | ||
+ | vfio_iommu_type1 | ||
+ | vfio_pci | ||
+ | vfio_virqfd | ||
+ | </ | ||
+ | |||
+ | ==== initramfsの再構築と確認 | ||
+ | |||
+ | カーネルモジュール関連の変更を行った際は、忘れずにinitramfsを再構築し、マシンを再起動する。 | ||
+ | |||
+ | < | ||
+ | # update-initramfs -u -k all | ||
+ | # reboot | ||
+ | </ | ||
+ | |||
+ | 再起動後、lsmodで関連モジュールが出てくればOK | ||
+ | |||
+ | < | ||
+ | # lsmod | grep vfio | ||
+ | </ | ||
+ | |||
+ | ==== デバイスの指定 ==== | ||
+ | |||
+ | ホストから分離するPCIデバイスをベンダーIDとデバイスIDのペアで指定する。 | ||
+ | |||
+ | パススルーデバイスへのVFIOの適用は、仮想マシンの起動時に自動的に行われるため、基本的には対象デバイスを明示する必要はないようだ。一方で、ホスト側のドライバが一度でも適用されると具合の悪いデバイスでは、あらかじめVFIOが適用されるよう明示する必要があるっぽい。(ぶっちゃけGPUのことなんですけどね。少しずつ状況は変わっているようだけど。) | ||
+ | |||
+ | === 対象デバイスの確認 === | ||
+ | |||
+ | ベンダIDとデバイスIDは'' | ||
+ | |||
+ | < | ||
+ | # lspci -nn | grep SATA | ||
+ | 00:11.4 SATA controller [0106]: Intel Corporation C610/X99 series chipset sSATA Controller [AHCI mode] [8086:8d62] (rev 05) | ||
+ | 00:1f.2 SATA controller [0106]: Intel Corporation C610/X99 series chipset 6-Port SATA Controller [AHCI mode] [8086:8d02] (rev 05) | ||
+ | </ | ||
+ | |||
+ | 行末の 8086:8d62 というのがそれ。 | ||
+ | |||
+ | ■confファイルに記述する場合 \\ | ||
+ | / | ||
+ | |||
+ | < | ||
+ | options vfio-pci ids=ベンダID: | ||
+ | </ | ||
+ | |||
+ | ■カーネルコマンドラインに記述する場合 \\ | ||
+ | / | ||
+ | |||
+ | < | ||
+ | root=ZFS=rpool/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== IOMMUデバイスグループ | ||
PCIパススルーしたいデバイスのIOMMUグループを確認する。 | PCIパススルーしたいデバイスのIOMMUグループを確認する。 | ||
行 134: | 行 164: | ||
{{ virtualization: | {{ virtualization: | ||
- | ==== VFIOの設定 | + | ===== 雑多なメモ ===== |
- | パススルーしたいデバイスのベンダIDとデバイスIDをVFIOの設定に追加する。 | + | * PVE 6.2ではVFIOがカーネルに内蔵されてたようで、/ |
- | + | * modulesに書いても書かなくても、lsmodにvfio関連モジュールは出てこなかった。 | |
- | **要検証:一度でも通常のドライバが適用されるとマズいデバイス(GPUとか)以外では特に設定しなくても大丈夫かも?そもそもカーネル内蔵のvfioドライバなので、confファイルによる指定は効いてないかも?** | + | * このせいで/ |
- | + | ||
- | ベンダIDとデバイスIDの調査。行末の[8086: | + | |
- | + | ||
- | < | + | |
- | # lspci -nn | grep SATA | + | |
- | 00:11.4 SATA controller [0106]: Intel Corporation C610/X99 series chipset sSATA Controller [AHCI mode] [8086:8d62] (rev 05) | + | |
- | 00:1f.2 SATA controller [0106]: Intel Corporation C610/X99 series chipset 6-Port SATA Controller [AHCI mode] [8086:8d02] (rev 05) | + | |
- | </ | + | |
- | + | ||
- | vfio.confに追記。initramfsの更新もお忘れなく。 | + | |
- | + | ||
- | < | + | |
- | # echo ' | + | |
- | </ | + | |
- | + | ||
- | カーネルの起動パラメータとして指定する場合は'' | + | |
- | + | ||
- | < | + | |
- | root=ZFS=rpool/ | + | |
- | </ | + | |