更新:

更新:

我们需要配置 NIC,以便我们的应用程序在 FreeBSD 12 上获得更好的性能。系统是 FreeBSD 12.0-RELEASE-p3 GENERIC amd64

首先,我想展示一下我们针对 Linux 系统的解决方案。对于在多队列 NIC 上设置 16 个 RX 和 16 个 TX 队列,我们​​应用命令ethtool -L ens786f1 combined 16。我们正在寻找 FreeBSD 系统的替代调用。

在FreeBSD上,我们的网卡是由ixl驱动程序驱动的。我发现一些内核变量应该做同样的事情,比如override_qs_enableoverride_nrxqsoverride_ntxqs(这里是联机帮助页)。设置它们的命令看起来像sysctl dev.ixl.1.iflib.override_qs_enable="1"等等(ens786f1并且ixl1是同一设备在不同系统上具有不同接口)。

我想每次启动时设置这些变量。手册页说,必须在ixl加载驱动程序(使用加载程序)之前在启动时设置这些变量,因此我将设置行添加到/boot/loader.conf.该文件之前是空的,所以现在看起来像:

#Setup NIC#
dev.ixl.1.iflib.override_qs_enable="1"
dev.ixl.1.iflib.override_nrxqs="16"
dev.ixl.1.iflib.override_ntxqs="16"

/boot/defaults/loader.conf包括/boot/loader.conf使用loader_conf_files,所以我的引导文件应该正在运行。但是当我重新启动并使用查看变量时sysctl,这些变量是默认值 (0),当我查看时dmesg,设备未按照我想要的方式设置(仍然显示 8 个 RX 和 8 个 TX 队列)。

可能 /boot/loader.conf 没有被调用;也许ethtool在 FreeBSD 上替换命令只是一个糟糕的方法。

一些日志:Pastebin.com/YGTxqxdx


我还尝试使用(也保存在文件中)设置变量kenv,但似乎选项在重新启动后不会保存。


经过几天的研究,我发现我可能必须使用 来设置新的/编辑我的 NIC 的旧 VF iovctl。当我调用时iovctl -S -d ixl1,有一个参数num-queues。有人有这种配置的经验吗?


问题出在加载程序上 - GRUB 中的加载程序设置错误。不过,如果您正在寻求有关使用相同驱动程序设置多个 RX/TX 队列的帮助,下面的答案是一组非常好的信息。

答案1

如何使 kern.ipc.somaxconn 的设置持久化?

删除引号“

dev.ixl.1.iflib.override_qs_enable=1
dev.ixl.1.iflib.override_nrxqs=16
dev.ixl.1.iflib.override_ntxqs=16

/etc/rc.d/sysctl start或进行测试service sysctl restart

更新:

在 FreeBSD 的早期版本中,您通常会设置hw.ixl.max_queues.但 ixl 驱动程序似乎已更改为在 FreeBSD 12 中使用 iflib。

sysctl -d dev.ixl我们确实可以确认驱动程序正在使用iflib

dev.ixl.1.iflib.override_qs_enable: permit #txq != #rxq
dev.ixl.1.iflib.override_nrxqs: # of rxqs to use, 0 => use default #
dev.ixl.1.iflib.override_ntxqs: # of txqs to use, 0 => use default #

网络搜索证实了这一点,因为我们可以找到将其添加到驱动程序的差异(rS335338:ixl(4):更新以使用 iflib)。

当前设置为默认设置:

dev.ixl.1.iflib.override_qs_enable: 0
dev.ixl.1.iflib.override_nrxqs: 0
dev.ixl.1.iflib.override_ntxqs: 0

这应该将队列数量设置为核心数量(在本例中为 8)。这iflib手册页指出必须设置这些加载驱动程序。 Sysctl restart 将无法帮助我们——只能重新启动。

然后我们必须设置/boot/loader.conf

dev.ixl.1.iflib.override_qs_enable=1
dev.ixl.1.iflib.override_nrxqs=16
dev.ixl.1.iflib.override_ntxqs=16

设置此选项后,您应该重新启动并使用dmesg | grep ^ixl和进行验证sysctl dev.ixl.1.iflib

您当前的输出dmesg是:

ixl0: pxm cpus: 8 queue msgs: 128 admincnt: 1
ixl0: using 8 rx queues 8 tx queues

ixl1: pxm cpus: 8 queue msgs: 128 admincnt: 1
ixl1: using 8 rx queues 8 tx queues

您声称您以前已经做过所有这些工作,但没有效果。

如果我们在错误报告中查找Bug 230465 - ixl:无法在网络映射模式下工作不过我们确实得到了确认杰夫·皮珀查尔斯·贡萨尔维斯进一步证实这对他有用。

这是 FreeBSD 中一种相当典型的设置方式,并且通常有效。一如既往的它可以是一个越野车司机,但根据上述确认,我认为不是。我没有 ixl 卡,因此很遗憾我无法确认任何事情。

kenv也提到了。和杰夫·皮珀确实确认可以设置。但请注意,您只能kenv在使用驱动程序模块时使用,而不能在内核中使用静态驱动程序!

因此,根据上面的内容,我会声称它“ShouldWork(tm)”,并loader.conf在 FreeBSD 12(或更高版本)中的内核驱动程序中进行设置。它提醒您几乎总是添加uname -a任何与 FreeBSD 相关的问题

相关内容