Subject: Help interpreting ethtool -S for tg3 (rx_discards and such)

From: François Baligant <[email-masked]>
Date: Thu, 09 Sep 2004 18:09:03 +0200

Hi,

We have a tg3 NIC under heavy load (30megabit/s, around 15k to 20k 
packet/sec)

Under 2.6.7, the NIC behaves quite correctly (except errors see below)
Under 2.6.8, the NIC's link will go down after some time and not come up 
again (rx_discards grow more quickly than in 2.6.7)
Under 2.6.9-rc1, the NIC will go down from time to time also but recover 
after 5 seconds and link goes up again (dito)

Should I worry about the errors in ethtool, like rx_discards ? What does 
it mean ? Can i tune something to avoid them ? (netdev backlog?)

Is there any way to lower the amount of interrupt needed to handle this 
load? (it's eating quite a lot of CPU)

Here is ethtool -S under 2.6.7

root# ethtool -S eth1
NIC statistics:
     rx_octets: 965700844
     rx_fragments: 0
     rx_ucast_packets: 828761367
     rx_mcast_packets: 80
     rx_bcast_packets: 4768
     rx_fcs_errors: 0
     rx_align_errors: 0
     rx_xon_pause_rcvd: 0
     rx_xoff_pause_rcvd: 0
     rx_mac_ctrl_rcvd: 0
     rx_xoff_entered: 0
     rx_frame_too_long_errors: 0
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_in_length_errors: 0
     rx_out_length_errors: 0
     rx_64_or_less_octet_packets: 366875287
     rx_65_to_127_octet_packets: 438933359
     rx_128_to_255_octet_packets: 18104208
     rx_256_to_511_octet_packets: 2937651
     rx_512_to_1023_octet_packets: 956801
     rx_1024_to_1522_octet_packets: 958902
     rx_1523_to_2047_octet_packets: 0
     rx_2048_to_4095_octet_packets: 0
     rx_4096_to_8191_octet_packets: 0
     rx_8192_to_9022_octet_packets: 0
     tx_octets: 3659297
     tx_collisions: 0
     tx_xon_sent: 0
     tx_xoff_sent: 0
     tx_flow_control: 0
     tx_mac_errors: 0
     tx_single_collisions: 0
     tx_mult_collisions: 0
     tx_deferred: 0
     tx_excessive_collisions: 0
     tx_late_collisions: 0
     tx_collide_2times: 0
     tx_collide_3times: 0
     tx_collide_4times: 0
     tx_collide_5times: 0
     tx_collide_6times: 0
     tx_collide_7times: 0
     tx_collide_8times: 0
     tx_collide_9times: 0
     tx_collide_10times: 0
     tx_collide_11times: 0
     tx_collide_12times: 0
     tx_collide_13times: 0
     tx_collide_14times: 0
     tx_collide_15times: 0
     tx_ucast_packets: 832632783
     tx_mcast_packets: 5
     tx_bcast_packets: 65
     tx_carrier_sense_errors: 0
     tx_discards: 0
     tx_errors: 0
     dma_writeq_full: 496271
     dma_write_prioq_full: 0
     rxbds_empty: 0
     rx_discards: 157542
     rx_errors: 0
     rx_threshold_hit: 828579298
     dma_readq_full: 71729839
     dma_read_prioq_full: 87219
     tx_comp_queue_full: 53098049
     ring_set_send_prod_index: 763849878
     ring_status_update: 906065223
     nic_irqs: 647367776
     nic_avoided_irqs: 258697447
     nic_tx_threshold_hit: 24570520

root# mpstat 1
Linux 2.6.7-mjb1 (localhost)      09/09/2004

10:58:02 AM  CPU   %user   %nice %system %iowait   %idle    intr/s
10:58:03 AM  all   21.66    0.00   14.65    0.00   63.69  29276.92
10:58:04 AM  all   21.25    0.00   15.00    0.00   63.75  28553.75
10:58:05 AM  all   14.81    0.00   10.49    0.00   74.69  26353.09
10:58:06 AM  all   13.94    0.00   10.91    0.00   75.15  24815.85
10:58:07 AM  all   12.50    0.00   10.12    0.00   77.38  23850.00
10:58:08 AM  all   16.77    0.00    9.58    0.00   73.65  23755.42
10:58:09 AM  all   14.12    0.00    9.41    0.00   76.47  22460.00

root# ethtool -a eth1
Pause parameters for eth1:
Autonegotiate:  off
RX:             off
TX:             off

root# ethtool -k eth1
Offload parameters for eth1:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off