virtualization:proxmox_ve_6_3_pci_passthrough_tips

差分

このページの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を有効化しくといった前提あるど) 
 + 
 +カーネルコマンドライン''/etc/kernel/cmdline''に''intel_iommu=on iommu=pt''を追加し、''pve-efiboot-tool refresh''を実行する
  
-''/etc/kernel/cmdline''に''intel_iommu=on iommu=pt''を追加し、''pve-efiboot-tool refresh''を実行する。 
 <code bash> <code bash>
 # cat /etc/kernel/cmdline # cat /etc/kernel/cmdline
行 26: 行 27:
 </code> </code>
  
-なお、AMDプラットフォームの場合は''amd_iommu=on''とする+なお、AMDプラットフォームの場合は''intel_iommu''の代わりに''amd_iommu''を使う
  
 また、ZFSルートシステム以外では''/etc/default/grub''の''GRUB_CMDLINE_LINUX_DEFAULT''に上記のパラメータを追加し、''update-grub''を実行する。 また、ZFSルートシステム以外では''/etc/default/grub''の''GRUB_CMDLINE_LINUX_DEFAULT''に上記のパラメータを追加し、''update-grub''を実行する。
- 
-==== VFIOモジュールの読み込み ==== 
- 
-<note>(2021-01-04 追記) \\ 
-VFIOはLinux 3.6からカーネルに内蔵されたため、本作業は必要ないようだ。少なくともうちの環境ではmodulesを書き換えずともVFIOが使えている。参考情報として残しておく。 
-</note> 
- 
-''/etc/modules''にPCIパススルーに必要なモジュールを記述する。 
- 
-<code> 
-vfio 
-vfio_iommu_type1 
-vfio_pci 
-vfio_virqfd 
-</code> 
- 
-カーネルモジュール関連の変更を行った際は、忘れずにinitramfsの再構築を行う。 
- 
-<code> 
-# update-initramfs -u -k all 
-</code> 
  
 ==== Interrupt Remappingの確認 ==== ==== Interrupt Remappingの確認 ====
  
-システムがIRQマッピングに対応してるか確認する。+システムがIRQマッピングに対応してるか確認する。
  
 起動メッセージ内に''remapping enabled''的なログがあればOK。 起動メッセージ内に''remapping enabled''的なログがあればOK。
  
 <code> <code>
-# 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:
 </code> </code>
  
-==== IOMMU状態を確認 ====+==== 有効化の確認 ====
  
-一度システムを再起動しIOMMUを有効化と状態の確認を行う。 +一度システムを再起動し起動メッセージ内に''IOMMU enabled''があるこを確認する
- +
-起動メッセージ内に''IOMMU enabled''あればOK+
  
 <code> <code>
行 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:
 </code> </code>
  
-==== IOMMUデバイスルーの確認 ====+===== VFIO ===== 
 + 
 +VFIOはユーザースペースからデバイスを操作するためのフレームワークである。PCIパススルーにおいては、ホストからデバイスを分離するのに用いられる。 
 + 
 +==== モジュールの読み込み ==== 
 + 
 +''/etc/modules''にVFIOモジュールを記述する。 
 + 
 +<code> 
 +vfio 
 +vfio_iommu_type1 
 +vfio_pci 
 +vfio_virqfd 
 +</code> 
 + 
 +==== initramfs再構築と確認 ==== 
 + 
 +カーネルモジュール関連の変更を行った際は、忘れずにinitramfsを再構築し、マシンを再起動する。 
 + 
 +<code> 
 +# update-initramfs -u -k all 
 +# reboot 
 +</code> 
 + 
 +再起動後、lsmodで関連モジュールが出てくればOK 
 + 
 +<code> 
 +# lsmod | grep vfio 
 +</code> 
 + 
 +==== デバイスの指定 ==== 
 + 
 +ホストから分離するPCIデバイスをベンダーIDとデバイスIDのペアで指定する。 
 + 
 +パススルーデバイスへのVFIOの適用は、仮想マシンの起動時に自動的に行われるため、基本的には対象デバイスを明示する必要はないようだ。一方で、ホスト側のドライバが一度でも適用されると具合の悪いデバイスでは、あらかじめVFIOが適用されるよう明示する必要があるっぽい。(ぶっちゃけGPUのことなんですけどね。少しずつ状況は変わっているようだけど。) 
 + 
 +=== 対象デバイスの確認 === 
 + 
 +ベンダIDとデバイスIDは''lspci''コマンドで確認する。 
 + 
 +<code> 
 +# 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) 
 +</code> 
 + 
 +行末の 8086:8d62 というのがそれ。 
 + 
 +■confファイルに記述する場合 \\ 
 +/etc/modprobe.d/vfio.confに以下の行を追加。複数のデバイスを指定する場合はコンマでつなぐ。 
 + 
 +<code> 
 +options vfio-pci ids=ベンダID:デバイスID 
 +</code> 
 + 
 +■カーネルコマンドラインに記述する場合 \\ 
 +/etc/kernel/cmdlineに''vfio-pci.ids=vvvv:dddd''の一節を追加する。 
 + 
 +<code> 
 +root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt vfio-pci.ids=vvvv:dddd 
 +</code> 
 + 
 + 
 + 
 +==== IOMMUデバイスグループ ====
  
 PCIパススルーしたいデバイスのIOMMUグループを確認する。 PCIパススルーしたいデバイスのIOMMUグループを確認する。
行 134: 行 164:
 {{ virtualization:proxmox_ve_6_2_separate_iommu_group.png |}} {{ virtualization:proxmox_ve_6_2_separate_iommu_group.png |}}
  
-==== VFIOの設定 ====+===== 雑多なメモ =====
  
-パススーしたいデバイスのベンダIDとデバイスIDをVFIOの設定に追加する。 +  * PVE 6.2ではVFIOがカーネに内蔵されてようで、/etc/modulesをじらなくても使えてた気がする。 
- +    modulesに書いてかなくても、lsmodにvfio関連モジュールはなかっ。 
-**要検証:一度で通常のドライバが適用されるとマズいデバイス(GPUと)以外では特に設定しなくても大丈夫かも?そもそもカ内蔵のvfioドライバなので、confファイルによる指定効いてなも?** +    * こせいで/etc/modprobe.dconfファイルでのデバイス指定が効かず、カーネルコマンドインで指定しないとダメだった記憶
- +
-ベンダIDとデバイスIDの調査。行末の[8086:8d62]てやつが目当ての値。 +
- +
-<code> +
-# 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) +
-</code> +
- +
-vfio.confに追記。initramfs更新もお忘れなく。 +
- +
-<code> +
-# echo 'options vfio-pci ids=8086:86d2' >> /etc/modprobe.d/vfio.conf +
-</code> +
- +
-カーネルの起動パメータとして指定する場合は''cmdline''に''vfio-pci.ids''で指定する +
- +
-<code> +
-root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt vfio-pci.ids=8086:8562 +
-</code>+
  
  
  • virtualization/proxmox_ve_6_3_pci_passthrough_tips.1610581233.txt.gz
  • 最終更新: 2021-01-14 08:40
  • by Decomo