Troubleshooting rx_csum_offload_errors on interfaces #2

I just got the time to revisit this. Following the thread Troubleshooting rx_csum_offload_errors on interfaces , how can I disable all types of offloading on all of my router’s interfaces. I assume that the offloading options are disabled by default for all interfaces since I can’t delete the config:

# del interfaces eth eth13 offload

  Nothing to delete (the specified node does not exist)
vyos@REDACTED:~$ sh interfaces eth eth13 statistics | grep "errors"
     rx_errors: 58694753
     tx_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_fifo_errors: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     rx_length_errors: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_csum_offload_errors: 58694753
     fcoe_last_errors: 0
vyos@REDACTED:~$ ethtool -k eth13
Features for eth13:
rx-checksumming: on
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: on [fixed]
        tx-checksum-sctp: on
scatter-gather: off
        tx-scatter-gather: off
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
        tx-tcp-segmentation: off
        tx-tcp-ecn-segmentation: off [fixed]
        tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: off
generic-segmentation-offload: off
generic-receive-offload: off
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: on [fixed]
tx-gre-segmentation: on
tx-gre-csum-segmentation: on
tx-ipxip4-segmentation: on
tx-ipxip6-segmentation: on
tx-udp_tnl-segmentation: on
tx-udp_tnl-csum-segmentation: on
tx-gso-partial: on
tx-tunnel-remcsum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]
tx-gso-list: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
rx-gro-hw: off [fixed]
tls-hw-record: off [fixed]
rx-gro-list: off
macsec-hw-offload: off [fixed]
rx-udp-gro-forwarding: off
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]

But, I’m still occasionally receive monitoring alerts for high error rate. I would love if I can disable the offloading permanently after rebooting the router since scheduling for a downtime will be hard.

Thank you for the help.

ethtool -k eth13 | grep -v "fixed" | grep ": on"

This will show you all the offloads that are still on that can be turned off (you can’t adjust anything that is [fixed])

For you, that’s these (based on your output)

rx-checksumming: on
tx-checksumming: on
        tx-checksum-ip-generic: on
        tx-checksum-sctp: on
rx-vlan-offload: on
tx-vlan-offload: on
receive-hashing: on
rx-vlan-filter: on
tx-gre-segmentation: on
tx-gre-csum-segmentation: on
tx-ipxip4-segmentation: on
tx-ipxip6-segmentation: on
tx-udp_tnl-segmentation: on
tx-udp_tnl-csum-segmentation: on
tx-gso-partial: on

You would need to figure out the right flag(s) to turn those off, none of them I think are “standard” offloads. I would guess you want to turn off rx-checksumming with something like ethtook -K eth13 rx-checksum off but that’s a guess.

If that resolves it, you’ll have to run that command on boot, either manually or via task-scheduler.

I read somewhere that running ethtook -K eth13 rx-checksum off will most probably resolve the issue but knowing that I might to do it every boot sounds a bit hard. Any idea or config that I can apply to do it automatically for every boot?

On a separate question, does having the checksum checking for transmit and receive comes with any huge benefits especially for those with high throughput/traffic?

You can add the command to be executed before/after each commit or before/after each boot:

And/or file this as a feature request at https://vyos.dev that the offloading command for CLI should include ALL options that ethtool can provide.

Regarding your second question - yes, disabling offloading will affect performance. After all its the sole purpose of offloading by letting the chip of the NIC do some “heavylifting”.

However how much you will be affected depends on CPU and NIC speed.

For example having a 32-core AMD EPYC and you have lets say 4x10G NICs then you might barely be able to detect any change in CPU usage with/without checksum offloading. But you probably will if the CPU would be a lets say Core2Duo with 2 cores at 2GHz.

Or if we get back to his 32-core AMD EPYC and then you would have 4x800G NICs then you would also most likely notice a change in CPU usage with/without checksum offloading.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.