Driver has suspect GRO implementation, TCP performance may be compromised

If you scan your redhat linux system log or use “dmesg” to check, you may running into the following message like me checking a performance issue when restoring a database over the network:

[436018.459356] TCP: ens192: Driver has suspect GRO implementation, TCP performance may be compromised.

That sounds scarier than it is. According to RedHa’s article “Why following error “TCP: ensX: Driver has suspect GRO implementation, TCP performance may be compromised” are seen in system log file?” dated 2019.07:

If calculated MSS (Maximum Segment Value) is higher than Advertised MSS, then set the new MSS to ‘Advertised MSS’. In earlier kernels, this was not [done] and could have caused performance issues while GRO (Receive Offload) was used. It’s based on these MSS values, TCP window size is determined for data transfer.

Red Hat backported a fix into its kernel for RHEL 7.4 and stated this message can be treated as informational only and as a warning one which can be safely ignored.

So what is GRO?

Generic Receive Offload (GRO) is a widely used SW-based offloading technique to reduce per-packet processing overheads. By reassembling small packets into larger ones, GRO enables applications to process fewer large packets directly, thus reducing the number of packets to be processed.

From the wiki page:

In computer networking, large receive offload (LRO) is a technique for increasing inbound throughput of high-bandwidth network connections by reducing central processing unit (CPU) overhead. It works by aggregating multiple incoming packets from a single stream into a larger buffer before they are passed higher up the networking stack, thus reducing the number of packets that have to be processed.

Generic receive offload (GRO) implements a generalised LRO in software that isn’t restricted to TCP/IPv4 or have the issues created by LRO.

Leave a comment