解决j3455直通iommu分组问题,PVE内核编译教程

2019-08-03 18:02:12 32点赞 174收藏 208评论

创作立场声明:刚开始玩proxmox虚拟机的时候,有部分教程是从张大妈这里看到的,所以也写一篇回馈各位值友



更新:
2020.02.22更新内核pve-kernel-5.3.18-2,常规更新,今后不会一有新版本就更新了,估计大版本更新再编译新内核了,每一次都挺折腾的,而且编译出的内核有bug恢复起来挺麻烦链接 提取码: 6cfx 12.13更新内核pve-kernel-5.3.13.1,常规更新。链接 提取码: wc6n 12月6日更新内核pve-kernel-5.3.10.1 基于5.3版本内核的promox-ve6.1-2已经release了,5.3版本内核可以摆脱5.0版本内核独立使用了。链接 提取码: 7ngi 11月14日更新 内核5.3.7-1,一不小心跟着官方源码跑到比正式版前面很多了,而5.0版本的Ubuntu源码被我删了,懒得再下,所以干脆编译了这个版本,大家可以先行尝试,或者等待官方更新到5.3内核版本后再使用链接 提取码: nn91 9月4日更新pve内核 5.0.21-2链接 提取码: zcyv

本文教程内容是解决华擎J3455主板在PVE下开启IOMMU不能分组的问题,解决办法是编译PVE内核,打上特制的ACS_override补丁并安装。

提醒:安装内核有宿主系统崩溃的风险,请务必先进行备份。
详情我将写一篇LVM下安装的PVE利用snapshot创建快照实现宿主机备份与还原的帖子教程。

首先是常规的pve操作内容,请用root用户,包括编译部分也要用root用户编译,老外的建议,不清楚为什么。

1.开启IOMMU分组功能。

编辑 /etc/default/grub,将以下部分修改如下:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream"

amd的cpu请将intel_iommu=on 改为 amd_iommu=on
然后是修改/etc/modules文件, 添加如下内容:

vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd


然后执行

update-initramfs -u -k all

再执行

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

查看是否开启了IOMMU,如果有 IOMMU, Directed I/O or Interrupt Remapping is enabled之类的字样那么说明IOMMU开启了,这部分网上教程很多,我就不赘述了。

2.编译内核

当然由于编译过程较漫长,如有必要我可以提供pve6.0的5.0.18-1版本的已修改内核。废话不多说,开始进入教程:

1).首先需要编译环境,建议宿主机就老老实实宿主机,不要在pve系统里直接编译,用其他机器或者开个虚拟机。Ubuntu和Debian都行,我用的是Debian buster。至少需要100G的空间,用以存放编译PVE内核的源码和编译过程文件。

2) .安装编译所需软件,由于摸索过程中安装的软件太多了,下面列的不一定全,请尝试的小伙伴如果在编译过程报错,请回帖反馈给我,我来查查看是什么软件忘记写上来了

apt install git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libdw-dev libnuma-dev libiberty-dev libslang2-dev debhelper git-core lintian build-essential automake autoconf libtool sphinx-common dh-python

3) .获取pve-kernel源码,因为我本人网络不好,我花了几天时间从pve的git站拖到了国内的gitee,如果同志们的网络好的话,可用尝试用pve自己的源码git

git clone git://git.proxmox.com/git/pve-kernel.git

或者用下面的我转到gitee的(国内的代码托管网站,不过可能有bug,我自己pull内核源码有时候拉不下来)

git clone git://gitee.com/hahach/pve-kernel.git

以上两个2选1 clone即可

4).这一步最关键 进入pve-kernel目录,进入patches/kernel目录,修改“0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch”这个patch文件,未来其他版本的可能不是这个名字,但是一定会包含ACS 这个关键词
将以下部分进行修改

--- a/drivers/pci/quirks.c

+++ b/drivers/pci/quirks.c

@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void)

改为

--- a/drivers/pci/quirks.c

+++ b/drivers/pci/quirks.c

@@ -194,6 +194,105 @@ static int __init pci_apply_final_quirks(void)

如果熟悉patch格式的应该看得明白,我可以解释下,这里是把106改为105了,因为下面具体的补丁内容会删减一行
接下来是关键的部分,作如下修改:

+ if (!pci_is_pcie(dev) ||

+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))

改为

+ if (!pci_is_pcie(dev))

注意别漏了加上的小括号
5).可以开始编译了

cd pev-kernel

make

这里需要下载linux内核源码,大约2g,需要很长时间,请耐心等待,另外编译过程很智能,不需要make命令加线程,过程中会自动多线程。我j3455主板,debian虚拟机给了3核,下载加编译用了6小时,仅供参考。
6).如果顺利那么会在pve-kernel目录得到4个deb文件

root@debian:~/pve-kernel# ll *.deb

-rw-r--r-- 1 root root 1286948 8月 2 22:31 linux-tools-5.0_5.0.18-1_amd64.deb

-rw-r--r-- 1 root root 4907164 8月 2 22:31 linux-tools-5.0-dbgsym_5.0.18-1_amd64.deb

-rw-r--r-- 1 root root 9576432 8月 2 22:31 pve-headers-5.0.18-1-pve_5.0.18-1_amd64.deb

-rw-r--r-- 1 root root 54006332 8月 2 22:34 pve-kernel-5.0.18-1-pve_5.0.18-1_amd64.deb


将以上4个deb文件一同传到pve的root目录下。

7).以防万一,做好系统备份或者快照,zfs文件系统我不会,请自行查询资料,我会写一篇lvm文件系统下的pve系统备份攻略,详见我的另外一个帖子,因为等级低没法发帖子链接,凑合看吧:PVE在LVM文件系统下利用snapshot进行备份与还原


8).弄完系统备份后可以开始安装型内核了。
运行

dpkg -i *.deb

安装内核,等待安装结束,重启即可。

重启后即可发现如下图,IOMMU分组全都打断了,每一个硬件一个分组,不过直通的时候有个问题需要注意
每一个PCIE id 只能一同直通,不能分别直通。例如我的82576网卡是 04:00.01和04:00.02,都是04:00,只能一起直通


解决j3455直通iommu分组问题,PVE内核编译教程


12.13更新内核pve-kernel-5.3.13.1,常规更新。链接,提取码: wc6n

12月6日更新内核pve-kernel-5.3.10.1 基于5.3版本内核的promox-ve6.1-2已经release了,5.3版本内核可以摆脱5.0版本内核独立使用了。链接,提取码: 7ngi

11月14日更新 内核5.3.7-1,一不小心跟着官方源码跑到比正式版前面很多了,而5.0版本的Ubuntu源码被我删了,懒得再下,所以干脆编译了这个版本,大家可以先行尝试,或者等待官方更新到5.3内核版本后再使用链接, 提取码: nn91

9月4日更新pve内核 5.0.21-2链接,提取码: zcyv


展开 收起
208评论

  • 精彩
  • 最新
  • 置顶 新来的朋友建议自己爬评论看看有没有热心朋友分享自己编译的内核,当然还是那句话,自己保障安全

    校验提示文案

    提交
  • 置顶 泪目,7.2开始的5.15系列内核,对我系统盘ssd的支持有问题,会导致开机时间过长(五分钟起步,报ata的错误并最后把接口速度降速到sata1.5g,导致ssd速度跟机械盘一样 [喷血] [喜极而泣] 所以如果后面的官方内核版本一直都有这个问题的话,那我的更新就定型在7.1了,以后就不更新了 [装大款]

    校验提示文案

    提交
    你的系统盘 ssd 什么牌子?型号?发下,大家一起避坑。

    校验提示文案

    提交
    你们估计遇不到吧,都停产了,英睿达 bx300

    校验提示文案

    提交
    还有7条回复
    收起所有回复
  • 一直跟着你的教程在做 从来没有成功,终于找到毛病了 人家修改完是更新 update-grub 你让更新update-initramfs -u -k all 搞得我一直没有成功 真折腾啊

    校验提示文案

    提交
    更新grub后显然要运行update-grub啊,张大妈发完文章后没法修改

    校验提示文案

    提交
    为这重装的整个系统。好在最后搞定了,J3455 群辉确实垃圾,直通硬盘会掉盘。

    校验提示文案

    提交
    收起所有回复
  • pve7.0对J3455好像不是很友好啊!从pve6升级到7核显直通就用不了了。出现在:kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=J3455_HD500.bin: IGD device 0000:00:02.0 cannot support legacy mode due to existing devices at address 1f.0
    TASK OK
    改用UEFI启动也是一样这个错误!不知道你们有没有遇到这样的问题??

    校验提示文案

    提交
    我不直通显卡,建议问问其他人

    校验提示文案

    提交
    我也遇到了同样的问题,出现在:
    kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=vbios.bin: IGD device 0000:00:02.0 cannot support legacy mode due to existing devices at address 1f.0
    TASK OK。
    前段时间在其它QQ群上有网友反馈要把内核降到5.11才能直通核显,如果方便希望楼主能帮忙编译一套5.11的deb
    同时安装试了一下分享的内核kernel 5.13.19-2,IOMMU分组没有打断,直通核显显示器点不亮,但可以远程桌面

    校验提示文案

    提交
    收起所有回复
  • 谢谢lz,刚成功升级6.0
    ps:zdm排版太差,还是在koolshare的帖子排版清楚许多

    校验提示文案

    提交
    哈哈哈,我两边一起发的,的确大妈的排版完全让我无法下手 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • 没个字都能看懂,但是……不觉明厉 [喜极而泣] [喜极而泣] [喜极而泣]

    校验提示文案

    提交
    这个算是比较深的内容,看不懂是可以理解的,因为这个搞的是proxmox硬件直通这个东西里面的bug,一般人遇到了都不会解决,目前中文网站貌似我是第一个把各种方法整合一起解决这个问题的。 [脸红]

    校验提示文案

    提交
    收起所有回复
  • 给力!之前折腾了好久。收藏了,回头试试。

    校验提示文案

    提交
    哈哈哈,我也折腾了有一个多月 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • 楼主,这个我用这个内核,有个问题,就是在直通j3455扩展出来的SATA 控制器给虚拟机后,在虚拟机(omv)大量复制文件时,会出现掉盘的问题,请问你有遇到这个情况吗?

    校验提示文案

    提交
    我没试过直通sata控制器,如果要直通硬盘建议直接直通硬盘,用qm命令直通。我直通硬盘没掉过

    校验提示文案

    提交
    你是华擎的j3455吗?你的系统是什么版本,我把系统升级到5.0.21了,估计装不了这个5.0.18的内核了吧?

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 没搞懂,不应该是开启IOMMU分组功能就能直通了吗,为什么要编译内核,第二个是干什么的

    校验提示文案

    提交
    iommu分组问题不是所有主板和硬件都有的,你如果没有遇到分组问题,那么就不用管这个事情,直接用就好了啊。

    校验提示文案

    提交
    收起所有回复
  • 啥时候提供新版本内核的文件下载,小白谢谢你了

    校验提示文案

    提交
    你是有iommu分组问题导致没法直通吗?如果是,那么用这个内核才有意义,目前我自己编译的最新内核是5.0.21-2.pve 今天下班我看看传一下

    校验提示文案

    提交
    一样j3455。官网下的6.0版本,但我不会看内核多少。从koolshare追到这里 [喜极而泣]

    校验提示文案

    提交
    还有11条回复
    收起所有回复
  • 看了一下,是不是只能分组直通网卡,如果是硬盘,好像还是sata控制器?

    校验提示文案

    提交
    本文的目的就是解决一些iommu分组问题而不能单独直通的硬件的,iommu分组硬件里,只有sata控制器,没有硬盘的。

    校验提示文案

    提交
    J3455有4个SATA口,有两个是SATA,两个是SATA_A转接,想问的是,我看你的截图里面,SATA是一个组,ASM1062是一个组,而不是像网卡一样,把每个组里的两个设备都分出来,也就是我在PVE里,是不是没法制定某个硬盘的直通,还是只能用qm的方式?

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 老哥为啥我这个更新重启后,io分组全部网卡还是一样都是5 [喜极而泣]

    校验提示文案

    提交
    你的安装我编译的内核了么,安装了后就不能更新官方内核了,最近我没空,没法同步更新新内核

    校验提示文案

    提交
    安装了,但是没分开,pve是6.0
    4的

    校验提示文案

    提交
    还有6条回复
    收起所有回复
  • 如果主板和U都支持vt-d,还用这么弄吗?

    校验提示文案

    提交
    跟vtd没关系,这个是j3455或者其他主板在直通pci设备的时候的一个问题。不支持vtd就直接别考虑直通了

    校验提示文案

    提交
    收起所有回复
  • 兄弟,显卡能直通吗?试了很久都不行

    校验提示文案

    提交
    显卡直通可以的,找其他人的教程,和这篇关系不大

    校验提示文案

    提交
    收起所有回复
  • 我的不支持,搞来搞来搞去还是老样子,装了对应的内核。搞这个折腾好久 [喜极而泣]

    校验提示文案

    提交
    这个内核只是帮助不能分割分组的情况,文中提了,如果硬件本身不能分别直通,即使强行割裂分组也可能无法使用

    校验提示文案

    提交
    收起所有回复
  • 请教下是直通SATA好还是PM映射硬盘好?看你像是说直通SATA很差?

    校验提示文案

    提交
    根据我自己以及其他一些朋友反馈,华擎j3455似乎直通sata控制器不太稳定,这个最好是自己测试,开个虚拟机直通跑几个星期重度任务看看,可能每个人都不一样

    校验提示文案

    提交
    听说不用SATA直通群晖硬盘无法休眠。也不知道有没有这回事?我没打算做路由,华擎3455 2条SATA通道跟声卡同组,好在看到你提供了这么好的解决办法。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 华擎j3455在unraid系统下也遇到了这个iommu分组问题,是不是可以参考这个教程,编译unraid内核解决分组问题?

    校验提示文案

    提交
    我也遇到这个问题了 3455的板载网卡和三个PCIE插槽是同一个iommu, 可能根本不能分开

    校验提示文案

    提交
    思路是一样的,找acs override的内核补丁编译,有可能还要手动修改补丁内容

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • @Emile-A239 更新了内核还是不行,我在koolshare 那边贴图了,方便的时候给看下,是不是旧的内核无法覆盖新版内核

    校验提示文案

    提交
    首先是针对华擎j3455itx这块主板的,其次更新内核前要先修改grub,具体你看文章前部分,然后需要更新pve到最新,然后重启,然后安装内核,重启。最近没空上koolshare,等元宵后上班后再帮你看看了

    校验提示文案

    提交
    收起所有回复
  • 编译内核,是要用你要做直通的CPU来编译吗,还是说我换其他不同CPU的电脑也行

    校验提示文案

    提交
    都行,如果用j3455来编译,性能比较差,会很慢。我是自己台式机上编译的。更重要的是编译环境要配置好

    校验提示文案

    提交
    收起所有回复
  • 我的主板和你一模一样,暴风影音,j3455,换了你最新的内核,完全按照你的操作来执行的,一开直通GPU的虚拟机,pve就重启,不知道哪里出问题了,我pve更新到官方最新版后再换的你提供的内核

    校验提示文案

    提交
    显卡直通,我印象中貌似没有分组问题的,我没弄过,但是以前查资料印象中别人没遇到这个问题,你的问题应该和本文无关,没必要用这个内核。

    校验提示文案

    提交
    分组确实成功了,就是直通出问题,不知道怎么禁止PVE宿主机挂载GPU,否则就会导致重启

    校验提示文案

    提交
    还有5条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
174
扫一下,分享更方便,购买更轻松