svn commit: r360985 - stable/12/sys/dev/ena
Marcin Wojtas
mw at semihalf.com
Tue May 12 18:48:10 UTC 2020
wt., 12 maj 2020 o 20:44 Marcin Wojtas <mw at freebsd.org> napisał(a):
>
> Author: mw
> Date: Tue May 12 18:44:41 2020
> New Revision: 360985
> URL: https://svnweb.freebsd.org/changeset/base/360985
>
> Log:
> MFC r360777: Optimize ENA Rx refill for low memory conditions
>
> Sometimes, especially when there is not much memory in the system left,
> allocating mbuf jumbo clusters (like 9KB or 16KB) can take a lot of time
> and it is not guaranteed that it'll succeed. In that situation, the
> fallback will work, but if the refill needs to take a place for a lot of
> descriptors at once, the time spent in m_getjcl looking for memory can
> cause system unresponsiveness due to high priority of the Rx task. This
> can also lead to driver reset, because Tx cleanup routine is being
> blocked and timer service could detect that Tx packets aren't cleaned
> up. The reset routine can further create another unresponsiveness - Rx
> rings are being refilled there, so m_getjcl will again burn the CPU.
> This was causing NVMe driver timeouts and resets, because network driver
> is having higher priority.
>
> Instead of 16KB jumbo clusters for the Rx buffers, 9KB clusters are
> enough - ENA MTU is being set to 9K anyway, so it's very unlikely that
> more space than 9KB will be needed.
>
> However, 9KB jumbo clusters can still cause issues, so by default the
> page size mbuf cluster will be used for the Rx descriptors. This can have a
> small (~2%) impact on the throughput of the device, so to restore
> original behavior, one must change sysctl "hw.ena.enable_9k_mbufs" to
> "1" in "/boot/loader.conf" file.
>
> As a part of this patch (important fix), the version of the driver
> was updated to v2.1.2.
>
For the record - on stable/12 the version was bumped to 0.8.5 with this commit.
Marcin
More information about the svn-src-all
mailing list