創作內容

3 GP

Proxmox VE總整理(二) - PVE基本配置(直通包括獨顯+開啟內顯GVT-G)

作者:理佐東│2022-07-23 15:44:07│巴幣:6│人氣:2642
這篇都是文字,沒有圖,但我覺得沒有先寫這篇可能後面會不清楚自己在幹嘛~~
另外因為個人希望理解每個指令在做啥,所以有去找資料確認過,最後再用自己的方式去解讀,所以不完全正確...但解釋會讓整篇文章看起來廢話很多就是了,請見諒QQ

最近在更新整個網路跟系統的架構,改了很多東西
因此整理個人的PVE到現在必要的一些配置:
1. PCIE直通的IOMMU設定
2. 獨顯要直通,需要防止載入驅動
3. intel內顯開啟GVT-G
4. ZFS記憶體使用量限制
以上四個會在相同的地方進行設定,故直接從下列步驟依序開始:

1. 開機程序指令修改
以前是從/etc/default/grub去配置iommu,但PVE不知道從何時開始已經不使用grub開機程序了(官網似乎有寫),網路上中文的教學文章大部分還沒更新,因此做紀錄:
編輯開機程序指令
nano /etc/kernel/cmdline
裡面應該會有載入zfs相關的指令(以下灰字),不要換行,往後加指令,每多一個指令就空一格輸入,例如我的配置是這樣的:
root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt pcie_acs_override=downstream video=efifb:off,vesafb:off

指令解釋:
intel_iommu=on
最白話的設定,開啟IOMMU
iommu=pt
聽說是加強IOMMU的性能,也有人說不加也沒差,因為懶得比較,我就沒拿掉
pcie_acs_override=downstream
這個似乎是加強PCIE裝置的分組,我個人理解是:
沒加這行=分組後直通顯卡會包含繪圖裝置聲音裝置,直通一個另一個會跟著被直通
加入這行=分組後可以把繪圖裝置聲音裝置分別直通給不同VM
video=efifb:off,vesafb:off
包刮了video的兩個設定:
efifb:off是efi開機後載入fb0的設定,off的話當然就是不要開啟啦XD
vesafb:off是vesa程序載入fb0的設定,我也不知道是啥,反正很多人在直通時把這行也加上去了,沒試過不加,總之就跟著加了,也是設定不要開啟

2. 針對modprobe.d裡面的conf檔做設定
這個設定是讓開機程序開始以後,希望對module做哪些設定,好像可以跟上面的cmdline共用指令,我不確定哪些可以,似乎最終會以cmdline的為主,有興趣的可以自己嘗試~

常常會看到很多人對這裡面設定什麼pve-blacklist.conf、kvm.conf一堆設定檔,但經過個人實驗以後,其實只要一個檔案就好了,在裡面自己用註解標記指令的功能就不怕忘記,也不用每次都得確認自己在哪個設定檔設過什麼指令

增加設定檔(在建立以前,建議把裡面原本就有的都備份起來,雖然我的起初裡面好像就是空的?)
nano /etc/modprobe.d/user.conf
檔案內容,直接用註解的方式解釋每個在做啥:

# 黑名單,不讓程式開機就載入下面的驅動程式,顯卡才能夠直通
# A卡的驅動,我不想改就沒拿掉了
# N卡的linux內建基本驅動
# N卡的驅動
# 主機板聲音卡的驅動程式
# blacklist to stop driver loading
blacklist radeon
blacklist nouveau
blacklist nvidia
blacklist snd_hda_intel

# code43迴避方式
# 聽說VM會出現code 43,是由於顯卡知道自己在虛擬環境而發error
# 用下面的指令讓顯卡不發error
# 不確定,總之我是這樣認為~
# kvm config to avoid code 43
options kvm ignore_msrs=1
options report_ignored_msrs=0

# 允許vfio模組發出中斷,應該是這樣
# 因為之後會載入去給PCIE裝置,這邊要設定允許
# IOMMU interrupts
options vfio_iommu_type1 allow_unsafe_interrupts=1

# GVT-G配置
# gvt: 看自己要不要玩GVT-G,要=1,不要=0
# guc: 是否開啟低功耗什麼的,有GVT-G只能=0,否則想開=2/3 (3要看CPU是否支援huc)
# INTEL Graphic config
options i915 enable_gvt=1
options i915 enable_guc=0

# 設定ZFS只能使用這麼多記憶體
# 設定邏輯就是預設2G + ((儲存空間每1T)=1G) * (16+1+1) = 20G,然後換算成byte
# ZFS config
options zfs zfs_arc_max=21474836480

到此檔案內容已經結束!!!!
另外解釋一下個人理解的ZFS檔案系統運作邏輯:
當在寫入或讀取的時候,系統會先把操作寫入cache,事後等待系統同步硬碟資料
同步之後這些cache就會轉變為dirty page,不會被ZFS釋放,因此會越寫越多,導致記憶體占用逐漸膨脹
個人解決辦法是寫腳本定期去同步+清理,但如果有大檔案傳輸的話(例如BT下載),可能會在腳本動作以前就因為不斷的寫入而膨脹了,所以需要卡使用上限,這樣ZFS就會自行清除超過的部分,但....依舊不會釋放額滿的部分,還是只能等腳本去同步清理

3. 需要載入的modules
上面已經都提到要阻止驅動加入了,接下來當然是跟系統說要載入哪些驅動去取代原本被阻止的驅動
直接開啟modules設定檔,裡面應該原本是空的但有註解解釋
nano /etc/modules
加入的檔案內容:

# load GVT-G driver
kvmgt

# load VFIO drivers
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

這些就不解釋這麼仔細了,簡單而言:
kvmgt用來載入GVT-G的驅動
剩下的都是讓IOMMU分組的裝置載入vfio驅動
個人解讀:所謂直通就是透過vfio驅動,讓VM映射裝置的實體位址後可以直接讀取並且使用

4. 把剛才做的所有一切都寫入開機程序之中
很神奇的是,以下兩行都是刷新開機程序,執行後跑出來的狀態描述是相同的,我不喜歡一直重複開機去實驗只跑一行的結果如何,所以這兩行我都下了一次,這樣只要重新開機一次就好XD
update-initramfs -u
pve-efiboot-tool refresh
值得一提的是,雖然PVE不使用grub了,但你按照網路上的作法改完grub後下update-grub,會被強制引導並且執行上面的指令,也就是說不管怎麼設定grub檔案,你的開機程序都不會有改變,IOMMU自然是不會成功了...這應該是很多夥伴在嘗試直通時遇到的大坑!!!!

之後就是重新啟動,然後檢查有沒有成功啟動IOMMU:
dmesg | grep 'remapping'
沒東西=失敗....((應該不會失敗啦QQ
接著確認自己IOMMU分組有沒有成功:
find /sys/kernel/iommu_groups/ -type l
理論上就會出現一長排自己電腦的分組訊息,例如我的長這樣:
find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/17/devices/0000:05:00.0
/sys/kernel/iommu_groups/7/devices/0000:00:1b.0
/sys/kernel/iommu_groups/15/devices/0000:01:00.0
/sys/kernel/iommu_groups/15/devices/0000:01:00.1
/sys/kernel/iommu_groups/5/devices/0000:00:16.0
/sys/kernel/iommu_groups/13/devices/0000:00:1c.7
/sys/kernel/iommu_groups/3/devices/0000:00:08.0
/sys/kernel/iommu_groups/11/devices/0000:00:1c.5
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/18/devices/0000:06:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1b.4
/sys/kernel/iommu_groups/16/devices/0000:03:00.0
/sys/kernel/iommu_groups/6/devices/0000:00:17.0
/sys/kernel/iommu_groups/14/devices/0000:00:1f.0
/sys/kernel/iommu_groups/14/devices/0000:00:1f.5
/sys/kernel/iommu_groups/14/devices/0000:00:1f.3
/sys/kernel/iommu_groups/14/devices/0000:00:1f.4
/sys/kernel/iommu_groups/4/devices/0000:00:14.2
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
/sys/kernel/iommu_groups/22/devices/00000000-0000-0000-0000-000000000401
/sys/kernel/iommu_groups/12/devices/0000:00:1c.6
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/20/devices/0000:08:00.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.4
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/19/devices/0000:07:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.0

到這裡就結束了~~
做完上述設定,可以成功做到跟需要注意的事情:
1. 開啟VM直通功能
2. 直通N卡,VM可以透過顯卡輸出畫面,相對的就是不能在宿主機/LXC上使用N卡
3. 接上述,有獨顯就不打算直通內顯了,所以沒研究要阻擋哪些驅動(盲猜應該是i915)
4. 內顯開啟GVT-G,根據bios分配的記憶體,可以直通虛擬顯卡最多兩張(改bios可以更多,但目前對我來說夠用了,所以不嘗試)
5. GVT-G無法輸出畫面,只是擁有了顯卡的硬體功能(解編碼),並且效能是共享的,本質上終究只有一張內顯
6. 因為直通N卡了,此時宿主機的系統畫面就只能由內顯作輸出,別插錯螢幕線了!!!!
7. 強烈不推薦同時直通內顯跟獨顯,否則沒有了任何畫面,系統掛了將會看不到錯誤訊息,網卡設定錯了將會從此失去WEB UI跟SSH連線
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5516262
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

3喜歡★lizardon 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Proxmox VE總整...

追蹤私訊切換新版閱覽

作品資料夾

ROSEVEN1217大家
【步步嬌】後宮第一妖豔賤貨蘭貴妃的宮鬥日常,歡迎大家光臨!!!^0^看更多我要大聲說58分前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】