為了架設基於Proxmox VE的伺服器,並讓Proxmox VE所建立的VM能夠存取伺服器的顯示卡資源,我們必須要啟用 PCI通透(PCI Passthrough) 的功能來將PCI的通訊傳遞至VM之中。
在開始設定IOMMU
之前,我們必須先完成幾項前置作業:
首先,我們透過下方的流程圖來了解設定PCI通透並將GPU分配給VM該如何進行。整個流程主要分成四大部分
根據PVE所使用的開機引導不同,需要進行的設置也有所不同。開機引導主要有兩種:GRUB
以及systemd-boot
。
針對GRUB
的設定,需要修改/etc/default/grub
中的GRUB_CMDLINE_LINUX_DEFAULT
參數。根據CPU供應商的不同,設置上也有些微的差異。
針對AMD CPU,需要在GRUB_CMDLINE_LINUX_DEFAULT
加入amd_iommu=on
的參數。
針對Intel CPU,需要在GRUB_CMDLINE_LINUX_DEFAULT
加入intel_iommu=on
的參數。
針對systemd-boot
的設定,需要在/etc/kernel/cmdline
的第一行增加額外的參數。根據CPU供應商的不同,設置上也有些微的差異。
針對AMD CPU,需要在第一行後方加入amd_iommu=on
的參數。
針對Intel CPU,需要在第一行後方加入intel_iommu=on
的參數。
在完成上方修改之後,需要執行以下指令來更新設定:
這些設定將在重新啟動後被套用。
對於使用PCI通透來說,設置中斷重映射(Interrupt Remapping)是必要的,若沒有設定這個機制,將無法正確的使用PCI通透的相關功能,並且可能出現以下錯誤訊息:
大部分的狀況下,無論是AMD或是Intel的CPU都有支援中斷重映射的機制。我們可以透過dmesg | grep 'remapping'
來檢查。若有支援,將會跳出以下訊息:
若檢查後並沒有跳出以上訊息,則需要手動設置。設置方法為將options vfio_iommu_type1 allow_unsafe_interrupts=1
參數加入到/etc/modprobe.d/iommu_unsafe_interrupts.conf
之中。
此改動的目的是在CPU平台未提供中斷重映射的機制時,允許使用不安全的中斷方式來進行重映射的中斷。
為了讓硬體設備可以被虛擬機直接取用,還需要額外更改/etc/modules
的設定來啟用VFIO
模組。只要在/etc/modules
中加入以下四行文字即可。
為了避免PVE系統使用顯示卡資源並排擠到虛擬機的資源,我們需要編輯/etc/modprobe.d/blacklist.conf
來使主系統的部分驅動程式無法取用顯示卡資源。
上方列為黑名單的是Nvidia以及與Nvidia顯示卡有關的驅動程式。對於Intel以及AMD顯示卡的部分,可以參考此篇文章中的設定。
為了讓VFIO模組了解哪一個PCI設備是顯示卡,我們需要以下步驟:
找出顯示卡對應ID
為了找出顯示卡對應的ID,我們可以使用以下指令:
以我自己的工作站而言,會有以下結果:
這時,我可以得知我的顯示卡ID為01:00.0
。
獲取顯示卡規格
在取得了顯示卡ID之後,我們便可以利用以下指令取得顯示卡的細部規格:
以我的工作站來說,結果如以下所示:
上方可以看現兩個結果。其中10de:2204
就是我們在上一步驟中所找到的顯示卡;而10de:1aef
則是顯示卡所附帶的音效卡。在PCI通透中我們只需要設定顯示卡的部分即可。
將顯示卡ID以及相關設定寫入/etc/modprobe.d/vfio.conf
檔案中
在上一步中,我們取得了顯示卡ID對應的規格以及編號,接下來我們只需要將上一步取得的10de:2204
搭配必要的參數寫入vfio.conf
檔案中即可。以下是用以將設定寫入的指令:
如果想要關閉VGA功能,可以在後方加入disable_vga=1
參數:
在寫入完成後,執行下方指令並重新開機即可套用前述的所有設定。
在此我們只有示範了最基礎的設定,對於更完整以及更多的設定選擇,可以參考PVE官網所提供的介紹。
在前幾個部分中,我們已經完成了PCI通透大部分所需要的系統設置。接下來,我們將進行對虛擬機的設定,讓虛擬機可以順利的取用顯示卡資源。
創建並設定虛擬機的配置
首先,我們先利用網頁中的Create VM
按鈕來建立一個新的虛擬機。
接下來,將BIOS設定為OVMF(UEFI)
模式,並將Machine
選項設定為q35。
在硬碟設定上,可以使用IDE
或VirtIO Block
(但需要額外設定VirtIO driver)。
在CPU的設定上,核心數量可以自訂,但是必須將Type
設置為host
以避免出錯。[4]
完成上述的必要設定之後,只要儲存設定即可完成初步設定。
完成此步驟後,請先啟動虛擬機,並完成基礎的系統安裝。後續將顯示卡指定至虛擬機時,可能因為disable_vga=1
的設定導致PVE預設使用的noVNC
無法連線至虛擬機,進而導致無法進行系統安裝。
指定PCI裝置至虛擬機
在虛擬機建立後,我們可以到Harware
中點選Add
來新增PCI device
。
然後在選單中選取對應的顯示卡。
將All Functions
、Primary GPU
以及PCI Express
選項打勾。
接下來只要點選Add
並啟動虛擬機即可。