missing uar aborting

直通网卡时因驱动问题造成的 missing uar aborting 错误

故障描述

网卡直通给到虚拟机后,lspci 能看到设备:

lspci | grep Mel
01:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
02:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
lspci -k

可以看到网卡的驱动情况如下:

01:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
	Subsystem: Hewlett-Packard Company InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter
	Kernel driver in use: vfio-pci
	Kernel modules: mlx4_core
02:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
	Subsystem: Hewlett-Packard Company InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter
	Kernel driver in use: vfio-pci
	Kernel modules: mlx4_core

但是直通给虚拟机之后,在虚拟机中网卡无法识别,networkctl 看不到设备:

networkctl 
IDX LINK    TYPE     OPERATIONAL SETUP     
  1 lo      loopback carrier     unmanaged 
  2 enp6s18 ether    routable    configured

2 links listed.

lsmod 时发现只有 mlx4_core , 没有其他比如 mlx4_en:

lsmod  | grep mlx
mlx4_core             311296  0

对比正常情况下的 lsmod 输出应该是这样的:

lsmod | grep mlx   
mlx4_ib               245760  0
ib_uverbs             163840  1 mlx4_ib
mlx4_en               155648  0
ib_core               393216  2 mlx4_ib,ib_uverbs
mlx4_core             405504  2 mlx4_ib,mlx4_en

查找问题

在 pve 机器中同样执行 lsmod | grep mlx 命令,会发现存在和在虚拟机中同样的问题,输出中也只有 mlx4_core:

lsmod | grep mlx   
mlx4_core             462848  0

重新安装 ubuntu server 也无法解决这个问题。而且安装 ubuntu server 20.04 时,在最开始的启动界面,会看到类似这样的错误提示:

mlx4_core 0000:01:00.0: Missing UAR, aborting

在 pve 操作系统中执行命令:

dmesg | grep mlx    

也会看到类似的输出:

[    2.364990] mlx4_core: Mellanox ConnectX core driver v4.0-0
[    2.365005] mlx4_core: Initializing 0000:01:00.0
[    2.365098] mlx4_core 0000:01:00.0: Missing UAR, aborting
[    2.365214] mlx4_core: Initializing 0000:02:00.0
[    2.365309] mlx4_core 0000:02:00.0: Missing UAR, aborting

执行命令:

dmesg | grep mlx

输出类似为:

mlx_compat: loading out-of-tree module taints kernel.[0.991286] mlx_compat: module verification failed: signature and/or required key missing - tainting kernel[0.992456] mlx4_core: Mellanox ConnectX core driver v4.1-1.0.2 (27 Jun 2017)[0.992479] mlx4_core: Initializing 0000:01:00.0[0.992621] mlx4_core 0000:01:00.0: Missing UAR, aborting

基本可以判断存在某个问题导致网卡驱动无法正确加载,从而导致网卡无法识别和驱动。

修复方式

增加 “pci=realloc=off” 参数

google之后发现有人遇到类似的问题,验证可行:

https://forums.developer.nvidia.com/t/mlx4-core-missing-uar-aborting/207322/2

按照这里的意思,应该增加 pci=realloc=off

  • edit /etc/default/grub
  • add GRUB_CMDLINE_LINUX_DEFAULT=“pci=realloc=off”
  • update-grub
  • Reboot

修改主板 bios 设置,开启 ASPM

在华硕z87-a主板,还需要在 bios 中打开 ASPM 相关的选项。