找回密码
 加入我们
搜索
      
查看: 9406|回复: 11

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

[复制链接]
发表于 2023-2-25 21:24 | 显示全部楼层 |阅读模式
本帖最后由 lk_yeah 于 2024-9-23 00:07 编辑

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

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

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

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

1、启动内核IOMMU支持
/etc/default/grub
  1. 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。
  1. update-grub
复制代码

2、内核加载硬件直通相关模块
/etc/modules
  1. vfio
  2. vfio_iommu_type1
  3. vfio_pci
  4. vfio_virqfd
复制代码

3、添加驱动黑名单
添加黑名单的作用是,PVE主机不加载该设备的驱动,将此此设备完全保留给虚拟机使用。
命令行运行:
  1. lspci -k
复制代码
这条命令将显示主机中所有PCI(E)设备的详细信息。查找其中包含VGA的设备,基本上就是核显了。
1722217783041.jpg
这个i915就是核显的驱动模块名称。
再查找“snd”,这是sound的缩写,其中有类似snd_hda_intel之类的,是核显附带的声卡驱动。直通核显,需要把这些都添加到黑名单。
/etc/modprobe.d/pve-blacklist.conf
  1. blacklist snd_hda_intel
  2. blacklist snd_hda_codec_hdmi
  3. blacklist i915
复制代码
这些是intel核显相关的驱动,添加到“pve-blacklist.conf”文件后,PVE系统将不加载核显的驱动,重启后PVE主机接显示器键盘鼠标将不再有命令行显示了。
其他显卡请自行搜索下。

4、绑定核显到vfio模块
查看一下自己的核显的供应商和设备ID。命令行运行查看PCIE设备信息命令
  1. lspci -nn
复制代码
找到核显信息,下面是我的:
  1. 00:02.0 VGA compatible controller [0300]:Intel Corporation CometLake-S GT2 [UHD Graphics 630] [8086:3e92]
复制代码
新建/etc/modprobe.d/vfio.conf
  1. options vfio-pci ids=8086:3e92
复制代码
不要照抄我的,记得把ID改成自己的。
运行命令更新内核配置信息。
  1. update-initramfs -u -k all
复制代码

5、重启PVE
检查模块是否正常加载,运行下面命令:
  1. lsmod | grep vfio
复制代码
应该显示已加载的vfio模块。

6、SR-IOV
稍微简单介绍下SR-IOV吧,这个我没用到。这个技术就是可以将某个物理设备虚拟成多个虚拟设备或虚拟端口,为每个虚拟机提供独立的物理通道,这使得虚拟机可以共享物理设备,并在没有CPU和虚拟机管理程序开销的情况下执行I/O,即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能。你可以这样理解,使用起来不像普通硬件直通那样独占,可以将一个硬件设备分配给多个虚拟机,但不同于向虚拟机分配的普通虚拟设备,它可以获得近乎硬件直通的性能。这个技术多数是给网卡使用的,使用这个技术需要主板、网卡、操作系统都支持才行,PVE系统当然是支持的,主板就不一定了,这个要查询具体型号的主板手册,服务器主板通常都支持,近些年的高端家用主板一般也都是支持的,而网卡,英特尔芯片的网卡普遍支持,小螃蟹的支持程度就不太高了。
确定自己网卡是否支持SR-IOV的方法:
  1. lspci | grep -i eth    //获得网卡总线信息,类似05:00.0
  2. 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,大家有兴趣可以尝试下。另外,我还尝试过虚拟机直通显卡后输出给显示器,用虚拟机打游戏也是可以的,不过因为我没这种需求,只是简单测试下就放弃了。配置直通的问题还是相当多的,更加复杂的直通需求,面临的坑更多,我也遇到一些解决不了的问题,不得不放弃和回避了。希望能够抛砖引玉,大家能把自己折腾的经历发出来,互相探讨。


 楼主| 发表于 2023-2-25 21:25 | 显示全部楼层
发表于 2023-2-25 21:51 来自手机 | 显示全部楼层
本帖最后由 皛羽控 于 2023-2-25 21:53 编辑

算了.......好像问了比较奇怪问题
发表于 2023-2-25 22:15 | 显示全部楼层
本帖最后由 nsisi 于 2023-2-25 22:18 编辑

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


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

那么怎么进入呢,要打nano /etc/default/grub,少个nano对新手来说就没方向了,因为我就是新手
 楼主| 发表于 2023-2-25 23:22 | 显示全部楼层
nsisi 发表于 2023-2-25 22:15
是不是这些弄好后,再PCI那里添加核显就行了

第一个问题,是的
第二个问题,看我的第一帖
发表于 2023-2-26 00:00 | 显示全部楼层
直通个设备要这么麻烦吗,是不是版本不够
发表于 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基础的没人知道新建是什么代码吧
 楼主| 发表于 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基础的小白,指望别人全部都喂到嘴里是不现实的。
发表于 2023-2-26 12:36 | 显示全部楼层
2.5G网主要用在PC-NAS大量数据传送的场景,其他的看视频之类都基本用不到。因此家用可以给PC和NAS各加一块2.5G网卡,用网线直连,配好IP,NAS开共享,PC上添加网络位置即可。
发表于 2023-2-26 12:40 | 显示全部楼层
其实 GVT-g 比整个核显直通要简单,网上文档很全
不过 Intel 已经把这玩意砍了
发表于 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
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-11-28 06:36 , Processed in 0.013620 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表