The output of ethtool -S <interface> reveals receive fifo errors. Additionally, rx_queue_<n>_drops, the total of which equals the value of rx_fifo_errors, are reported.
# ethtool -S eth0 | egrep 'rx_fifo|drops' rx_fifo_errors: 120674 rx_queue_0_drops: 4032 rx_queue_1_drops: 3036 rx_queue_2_drops: 5904 rx_queue_3_drops: 0 rx_queue_4_drops: 228 rx_queue_5_drops: 65656 rx_queue_6_drops: 19267 rx_queue_7_drops: 22551 # ethtool -S eth0 | egrep drops | awk '{print $2}' | paste -s -d+ | bc 120674
The value of the rx_fifo_errors parameter indicates that the adapter is discarding packets because the RX interrupts cannot allocate buffers quickly enough.
Increase the ring buffer size, if possible. Check the present settings and the highest value that can be set before raising. Run the command below to get the maximum possible ring buffer size (Pre-set maximums: ) and the present ring buffer size (Current hardware settings: ).
# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 256 RX Mini: 0 RX Jumbo: 0 TX: 256
Run the command below to increase the ring buffer size (in this example, 4096).
# ethtool -G eth0 rx 4096
Keep in mind that this configuration will be lost if your computer reboots. You should make the setting persistent.
Check to see if more time is needed to address soft interruptions. Execute this command.
# cat /proc/net/softnet_stat
The soft-interrupt budget has occasionally not been enough to clear the packet queue on a single call if any number in the third column of output is rising. Run this command to view the current budget value.
# sysctl net.core.netdev_budget
To set a new value run (for example)
# sysctl -w net.core.netdev_budget=600
This change will not be persistent across reboot. You should make it persistent across reboots.