关于虚拟化
Intel家的U原生提供/支持VT-D功能, bois开启支持后, 允许将物理PCIE设备分配给虚拟机, 让虚拟机直接控制硬件, 但是此时虚拟机会独占此PCIE设备, 在有成百上千个虚拟机的场景, 给每个虚拟机都直通一个PCIE设备, 比如网卡, 几乎是不可能的
所以Intel研究出了SR-IOV虚拟化技术, 这是一种基于硬件的虚拟化解决方案,允许将一个物理PCIE设备虚拟成多个(PCIE物理设备), 之后再分配给虚拟机使用, 避免了一个PCIE设备只能给一个虚拟机使用的尴尬.
关于DKMS
DKMS 是 Dynamic Kernel Module Support的缩写, 是一个用于管理和维护Linux内核的工具. 它能够帮我们在内核升级时自动重新编译和安装第三方内核模块, 从而保持这些模块与新内核保持兼容.
接下来我们会演示在PVE8.1系统的Debian12系统上, 使用DKMS工具给其自带的6.5.11-7内核编译安装对应集显的SR-IOV虚拟化驱动
注意: 此种直通方式(集显的SR-IOV虚拟化驱动虚拟的PCIE集显)只能给远程桌面访问虚拟机时, 内部加速计算使用, 而无法通过主机上的HDMI接口输出虚拟机的桌面到外接显示器上
部署代码
系统信息查看
# 系统
cat /etc/os-release
# 内核
uname -ar
# APT软件源索引更新与必要工具软件安装
apt update
apt install -y git build-* dkms
# 必要编译工具安装
apt install pve-headers-$(uname -r)
#apt install -y vim #(可选)
# 设置环境变量
KERNEL=$(uname -r); KERNEL=${KERNEL%-pve}
echo ${KERNEL}
核显虚拟化驱动项目的源码下载与配置修改
cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd ~/i915-sriov-dkms
cp -a ~/i915-sriov-dkms/dkms.conf{,.bak}
sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf
sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf
# sed -i 's/ -j$(nproc)//g' ~/i915-sriov-dkms/dkms.conf
cat ~/i915-sriov-dkms/dkms.confDKMS添加驱动源码管理并安装部署
# 链接内核源代码,并检查状态。确认内核显示已添加。
cp -r ~/i915-sriov-dkms /usr/src/i915-sriov-dkms-$KERNEL
ls /usr/src
# 查看
cd /usr/src/i915-sriov-dkms-$KERNEL
dkms add .
dkms status
# 构建新内核并检查状态。验证是否显示已安装。
dkms install -m i915-sriov-dkms -v $KERNEL -k $(uname -r) --force -j 4
dkms status对于PVE8.1版本,安全启动可能已启用。如果启动, 则以下是MOK 相关设置是必须的.(默认安装方式没有启用, 可以跳过)
如果后续设置完毕, 重启机器后查看集显对应的设备条目数没有变化, 即没有出现虚拟核显设备, 请分别检查bois设置是否开启虚拟化对应的相关选项, 以及如下是否系统内核启用了安全引导而未在第一次重启系统时,在开机设置选项正确配置MOK相关引导配置项,导致内核未加载DKMS安装的扩展, 此时需要进入系统后, 重置MOK设置,再次重启进行相关配置
# 为以防万一,我们需要加载 DKMS 密钥,以便内核加载模块。运行以下命令,然后输入密码。
# 该密码仅用于 MOK 设置,重启主机时会用到, 再之后就不需要密码。
# 该密码不必与 root 账户使用的密码相同。
mokutil --import /var/lib/dkms/mok.pub
# 重启机器, 在开机页面, 开机引导页面依次选择:
# `* Enroll MOK, Continue, Yes, <password>, Reboot`
# 如果错过, 需要进入终端, 重新运行 mokutil ... 命令并再次重启。
# 在完成此设置之前,DKMS 模块不会加载。
# Ubuntu重置MOK
# 参见: https://wiki.ubuntu.com/UEFI/SecureBoot
update-secureboot-policy --enroll-keyGRUB 配置
# 解释: i915.max_vfs=7 表示最多虚拟成7个设备
cp -a /etc/default/grub{,.bak}
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub
update-grub
update-initramfs -u -k all工具软件安装
apt install sysfsutils -y运行以下命令,查看/确认显卡所在的PCIe 总线。通常是 00:02.0
lspci | grep VGA运行以下命令, 如果PCIe 总线编号不一致, 可能需要修改。
# 在本例中,我使用的是 00:02.0。要验证文件是否已修改,请 cat 文件并确保已修改。
# 此处根据需要修改具体的虚拟设备数(一定小于上面设置的i915.max_vfs值)
# 示例设置2 (后续计划为2台虚拟机直通)
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2" >> /etc/sysfs.conf
cat /etc/sysfs.conf确认驱动与配置情况(重启系统后)
lspci | grep VGA此处结果应该从1条变成3条(新增2个虚拟集显/显卡)
dmesg | grep i915会显示次要 PCIe ID 1-2
修改WIN10虚拟机配置, 增加PCI设备
注意:不要直通.0设备,即0000:00:02.0设备,不要勾选全部功能
添加任意一个SR-IOV虚拟出来的集显设备, 额外属性勾选 "主GPU,PCIE", 如图所示
2023-12-29T04:00:11.png
其它(补充)
Mac上访问WIN10远程桌面, 不使用虚拟机安装Windows的情况下, 可以使用微软家Remote Desktop client
官方链接: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac
推荐下载Mac最新测试版本, 安装后, 新建目标主机连接进行相关配置后即可使用.
2023-12-29T22:10:24.png
参考:
https://gist.github.com/scyto/e4e3de35ee23fdb4ae5d5a3b85c16ed3
评论