lk_yeah 发表于 2023-2-25 21:24

自组2.5g NAS系统组建第三篇:配置直通篇

本帖最后由 lk_yeah 于 2024-9-23 00:07 编辑

这个直通篇,距离上一个帖子间隔时间有点久,因为我发现直通操作中遇到的疑惑相当多,网上搜到的教程贴都是直接给出操作步骤,很少将原理的,能讲明白的就更少了。所以我操作过程中,即使是搞成功了,经常还是挺懵的。下面我的讲解也是基于我的理解,肯定会有错误和不足,诚心请大家多多指导。

什么是直通?
在虚拟化环境中,虚拟机的硬件通常是靠软件模拟的,共享宿主机的硬件资源。这样可以把宿主机的硬件资源分配给多个虚拟机使用。但是,由于不是直接将硬件给虚拟机使用,性能上会有所损失,而且还可能享受不到硬件的某些特定功能。直通就是将指定的宿主机硬件直接交给某个虚拟机独占使用,使这个硬件在这个虚拟机中发挥直接的、最大的性能。当配置了直通之后,这个硬件就不能再给其他虚拟机甚至宿主机使用了。

我的直通需求
我的直通需求主要集中在黑群虚拟机上。首先我需要直通网卡,这是我额外添加一个4口2.5g网卡的主要目的。另外还要直通核显,为黑群开启硬件解码,虽然我觉得这个对我来说意义不大,不过我也没啥其他的核显需求了,直通给黑群算了。再就是直通硬盘,这个好办,一条命令的事,我没有选择直通SATA控制器,因为我主机上的硬盘不打算全都给黑群。直通SATA控制器的好处是可以获得最高的读写效率,缺点是该SATA控制器下的硬盘都跟着一起给了这个虚拟机,其他虚拟机和宿主机都没法用了。直通硬盘确实是虚拟机直接读写该硬盘,不过实际上还是映射给虚拟机,虚拟机没法获取到完整的SMART信息,从而无法监控到硬盘的健康度。这点我觉得倒是没啥,可以在PVE里查看硬盘SMART。

PVE配置PCIE设备直通
PVE默认未开启PCIE设备直通。这时如果向一个虚拟机添加PCIE硬件,就会报错。


1、启动内核IOMMU支持
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream,multifunction iommu=pt video=efifb:off,vesafb:off pci=assign-busses"quiet:让系统在启动过程中输出较少的启动信息,使启动过程看起来更“安静”。Linux系统通常都会默认带这个参数的。

Intel_iommu=on:启用IOMMU(Input/Output Memory Management Unit,输入输出内存管理单元)功能,IOMMU是虚拟化环境中非常关键的一个组件,它允许虚拟机直接访问物理设备(如显卡、硬盘控制器等),而无需通过宿主机的操作系统。这一句是硬件直通最关键的配置。AMD CPU要换成amd。
iommu=pt:允许硬件资源(如PCI设备)直接分配给虚拟机,而无需经过宿主机的干预。这句不是必须的,可以提高直通设备PCIe的性能,PVE手册建议添加。
pcie_acs_override=downstream,multifunction:IOMMU分组。如果没有这一句,我的4口网卡就会被分在同一组,那样的话,几个网口就不能分给不同的虚拟机,分了就只能启动一个。
efifb:off:关闭了EFI帧缓冲。不直通核显可以不加。
vesafb:off:VESA帧缓冲。不直通核显可以不加。
pci=assign-busses: 这个参数使得PCI总线编号在设备分配给虚拟机时重新分配,有助于避免在虚拟机中因PCI总线编号冲突而导致的问题。

保存后命令行运行下面命令更新grub。
update-grub
2、内核加载硬件直通相关模块
/etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3、添加驱动黑名单
添加黑名单的作用是,PVE主机不加载该设备的驱动,将此此设备完全保留给虚拟机使用。
命令行运行:
lspci -k这条命令将显示主机中所有PCI(E)设备的详细信息。查找其中包含VGA的设备,基本上就是核显了。

这个i915就是核显的驱动模块名称。
再查找“snd”,这是sound的缩写,其中有类似snd_hda_intel之类的,是核显附带的声卡驱动。直通核显,需要把这些都添加到黑名单。
/etc/modprobe.d/pve-blacklist.conf
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915这些是intel核显相关的驱动,添加到“pve-blacklist.conf”文件后,PVE系统将不加载核显的驱动,重启后PVE主机接显示器键盘鼠标将不再有命令行显示了。
其他显卡请自行搜索下。

4、绑定核显到vfio模块
查看一下自己的核显的供应商和设备ID。命令行运行查看PCIE设备信息命令
lspci -nn找到核显信息,下面是我的:
00:02.0 VGA compatible controller :Intel Corporation CometLake-S GT2 新建/etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:3e92不要照抄我的,记得把ID改成自己的。
运行命令更新内核配置信息。
update-initramfs -u -k all
5、重启PVE
检查模块是否正常加载,运行下面命令:
lsmod | grep vfio应该显示已加载的vfio模块。

6、SR-IOV
稍微简单介绍下SR-IOV吧,这个我没用到。这个技术就是可以将某个物理设备虚拟成多个虚拟设备或虚拟端口,为每个虚拟机提供独立的物理通道,这使得虚拟机可以共享物理设备,并在没有CPU和虚拟机管理程序开销的情况下执行I/O,即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能。你可以这样理解,使用起来不像普通硬件直通那样独占,可以将一个硬件设备分配给多个虚拟机,但不同于向虚拟机分配的普通虚拟设备,它可以获得近乎硬件直通的性能。这个技术多数是给网卡使用的,使用这个技术需要主板、网卡、操作系统都支持才行,PVE系统当然是支持的,主板就不一定了,这个要查询具体型号的主板手册,服务器主板通常都支持,近些年的高端家用主板一般也都是支持的,而网卡,英特尔芯片的网卡普遍支持,小螃蟹的支持程度就不太高了。
确定自己网卡是否支持SR-IOV的方法:
lspci | grep -i eth    //获得网卡总线信息,类似05:00.0
lspci -s 05:00.0 -v    //显示内容包含类似 Single Root I/O Virtualization 之类的内容表示支持SR-IOV我的网卡不支持SR-IOV,不过我也用不到。该技术实现步骤请大家自行搜索吧。

7、GVT-g
再简单说下GVT-g。GVT-g是英特尔为其核显搞出来的虚拟GPU技术,支持从第6代Skylake到第11代Rocket Lake的核显,从第11代Tiger Lake开始,英特尔开始用SR-IOV技术了。N和A也有类似的技术。这个技术跟SR-IOV效果类似,不过也不是没有代价的,多个虚拟机分核显的那点性能,对我来说没啥必要,所以我也没有用到。所以,需要用到GVT-g的小伙伴也请自行搜索资料吧。

总的来说,我的直通需求还是比较简单的,所以上面写的步骤并不复杂。我没有用到SR-IOV、GVT-g,大家有兴趣可以尝试下。另外,我还尝试过虚拟机直通显卡后输出给显示器,用虚拟机打游戏也是可以的,不过因为我没这种需求,只是简单测试下就放弃了。配置直通的问题还是相当多的,更加复杂的直通需求,面临的坑更多,我也遇到一些解决不了的问题,不得不放弃和回避了。希望能够抛砖引玉,大家能把自己折腾的经历发出来,互相探讨。


lk_yeah 发表于 2023-2-25 21:25

本帖最后由 lk_yeah 于 2023-3-23 14:07 编辑

占楼,放系列帖子的目录。


第零篇 硬件篇 垃圾佬心仪的NAS机箱:御夫座机箱
第一篇 PVE初始化篇
第二篇 添加温度监控篇
第三篇 配置直通篇
第四篇 配置虚拟机篇
第五篇 安装黑群篇
第六篇 联动UPS篇

皛羽控 发表于 2023-2-25 21:51

本帖最后由 皛羽控 于 2023-2-25 21:53 编辑

算了.......好像问了比较奇怪问题

nsisi 发表于 2023-2-25 22:15

本帖最后由 nsisi 于 2023-2-25 22:18 编辑

是不是这些弄好后,再PCI那里添加核显就行了


还有对小白还是要代码弄全比较好
比如启动内核IOMMU支持
/etc/default/grub里添加的东西,这是你的话

那么怎么进入呢,要打nano /etc/default/grub,少个nano对新手来说就没方向了,因为我就是新手[流泪]

lk_yeah 发表于 2023-2-25 23:22

nsisi 发表于 2023-2-25 22:15
是不是这些弄好后,再PCI那里添加核显就行了




第一个问题,是的
第二个问题,看我的第一帖

iooo 发表于 2023-2-26 00:00

直通个设备要这么麻烦吗,是不是版本不够

nsisi 发表于 2023-2-26 09:17

lk_yeah 发表于 2023-2-25 23:22
第一个问题,是的
第二个问题,看我的第一帖

你这几篇我都看了,你都是用中文写的
新建/etc/apt/sources.list.d/pve-install-repo.list
新建/etc/apt/sources.list.d/pve-no-subscription.list

0基础的没人知道新建是什么代码吧

lk_yeah 发表于 2023-2-26 12:04

nsisi 发表于 2023-2-26 09:17
你这几篇我都看了,你都是用中文写的
新建/etc/apt/sources.list.d/pve-install-repo.list
新建/etc/apt/ ...

你一定没好好看。我推荐了MobaXterm,界面很友好,常用功能都有。我也提到VIM,虽然有些门槛,虽然PVE没有自带,但稍微搜索一下也能找到方法。折腾NAS,本身就是个提升自己技术水平的过程,完全0基础的小白,指望别人全部都喂到嘴里是不现实的。

BetaHT 发表于 2023-2-26 12:36

2.5G网主要用在PC-NAS大量数据传送的场景,其他的看视频之类都基本用不到。因此家用可以给PC和NAS各加一块2.5G网卡,用网线直连,配好IP,NAS开共享,PC上添加网络位置即可。

Icarus_Radio 发表于 2023-2-26 12:40

其实 GVT-g 比整个核显直通要简单,网上文档很全
不过 Intel 已经把这玩意砍了

nsisi 发表于 2023-2-26 17:03

lk_yeah 发表于 2023-2-26 12:04
你一定没好好看。我推荐了MobaXterm,界面很友好,常用功能都有。我也提到VIM,虽然有些门槛,虽然PVE没 ...

明白了,你都是下载文件后编辑再上传的,我习惯pve里shell直接打命令,怪不得总感觉看的少了点东西

晚生邀鬼踏青 发表于 2023-2-26 23:43

Icarus_Radio 发表于 2023-2-26 12:40
其实 GVT-g 比整个核显直通要简单,网上文档很全
不过 Intel 已经把这玩意砍了 ...

然后支持了更好的SR-IOV
页: [1]
查看完整版本: 自组2.5g NAS系统组建第三篇:配置直通篇