Linux ethtool Statistics - UG1739

AMD Solarflare X4 Series Ethernet Adapter User Guide (UG1739)

Document ID
UG1739
Release Date
2025-10-24
Revision
1.0 English

The Linux command ethtool can display an extensive range of statistics originated from the MAC on the X4 series network adapter. To display statistics use the following command:

ethtool -S <interface>

(where <interface> is the name of the X4 series adapter interface).

The AMD Solarflare network driver has to manage multi-PF configurations and for this reason statistics are not reset by reloading the driver. The only methods currently available to reset statistics are to cold-reboot (power OFF/ON) the server or to reload the firmware image.

Per port statistics (port_) are from the physical adapter port. Other statistics are from the specified PCIe function.

The following table lists the complete output from the ethtool -S command.

Important: ethtool -S output depends on the features supported by the adapter type. Some fields listed below might not be present.
Table 1. ethtool -S output
Field Description
port_tx_bytes Number of bytes transmitted.
port_tx_packets Number of packets transmitted.
port_tx_pause Number of pause frames transmitted with valid pause op_code.
port_tx_control Number of control frames transmitted. Does not include pause frames.
port_tx_unicast Number of unicast packets transmitted. Includes flow control packets.
port_tx_multicast Number of multicast packets transmitted.
port_tx_broadcast Number of broadcast packets transmitted.
port_tx_lt64 Number of frames transmitted where the length is less than 64 bytes.
port_tx_64 Number of frames transmitted where the length is exactly 64 bytes.
port_tx_65_to_127 Number of frames transmitted where the length is between 65 and 127 bytes.
port_tx_128_to_255 Number of frames transmitted where the length is between 128 and 255 bytes.
port_tx_256_to_511 Number of frames transmitted where the length is between 256 and 511 bytes.
port_tx_512_to_1023 Number of frames transmitted where length is between 512 and 1023 bytes.
port_tx_1024_to_15xx Number of frames transmitted where the length is between 1024 and 1518 bytes (1522 with VLAN tag).
port_tx_15xx_to_jumbo Number of frames transmitted where length is between 1518 bytes (1522 with VLAN tag) and 9100 bytes.
port_rx_bytes Number of bytes received. Not include collided bytes.
port_rx_good_bytes Number of bytes received without errors. Excludes bytes from flow control packets.
port_rx_bad_bytes Number of bytes with invalid FCS. Includes bytes from packets that exceed the maximum frame length.
port_rx_packets Number of packets received.
port_rx_good Number of packets received with correct CRC value and no error codes.
port_rx_bad Number of packets received with incorrect CRC value.
port_rx_pause Number of pause frames received with valid pause op_code.
port_rx_control Number of control frames received. Does not include pause frames.
port_rx_unicast Number of unicast packets received.
port_rx_multicast Number of multicast packets received.
port_rx_broadcast Number of broadcasted packets received.
port_rx_lt64 Number of packets received where the length is less than 64 bytes.
port_rx_64 Number of packets received where the length is exactly 64 bytes.
port_rx_65_to_127 Number of packets received where the length is between 65 and 127 bytes.
port_rx_128_to_255 Number of packets received where the length is between 128 and 255 bytes.
port_rx_256_to_511 Number of packets received where the length is between 256 and 511 bytes.
port_rx_512_to_1023 Number of packets received where the length is between 512 and 1023 bytes.
port_rx_1024_to_15xx Number of packets received where the length is between 1024 and 1518 bytes (1522 with VLAN tag).
port_rx_15xx_to_jumbo Number of packets received where the length is between 1518 bytes (1522 with VLAN tag) and 9100 bytes.
port_rx_gtjumbo Number of packets received with a length greater than 9100 bytes.
port_rx_bad_gtjumbo Number of packets received with a length greater than 9100 bytes, but with incorrect CRC value.
port_rx_overflow Number of packets dropped by receiver because of FIFO overrun.
port_rx_nodesc_drop_cnt

Number of packets dropped by the network adapter because of a lack of RX descriptors in the RX queue.

Packets can be dropped by the NIC when there are insufficient RX descriptors in the RX queue to allocate to the packet. This problem occurs if the receive rate is very high and the network adapter receive cycle process has insufficient time between processing to refill the queue with new descriptors.

A number of different steps can be tried to resolve this issue:

  • Disable the irqbalance daemon in the OS
  • Distribute the traffic load across the available CPU/cores by setting rss_cpus=cores. Refer to Receive Side Scaling section
  • Increase receive queue size using ethtool.
port_rx_nodesc_drops
port_rx_pm_trunc_bb_overflow Overflow of the packet memory burst buffer. Not expected to occur.
port_rx_pm_discard_bb_overflow Number of packets discarded due to packet memory buffer overflow.
port_rx_pm_trunc_vfifo_full Number of packets truncated or discarded because there was not enough packet memory available to receive them. Happens when packets cannot be delivered as quickly as they arrive due to:
  • Packet rate exceeds maximum supported by the adapter.
  • Adapter is inserted into a low speed or low width PCI slot – so the PCIe bus cannot support the required bandwidth.
  • Packets are being replicated by the adapter and the resulting bandwidth cannot be handled by the PCIe bus.
  • Host memory bandwidth is being used by other devices resulting in poor performance for the adapter.
port_rx_pm_discard_vfifo_full Count of the number of packets dropped because of a lack of bandwidth between card and host memory.
port_rx_pm_trunc_qbb Not currently supported.
port_rx_pm_discard_qbb Not currently supported.
port_rx_pm_discard_mapping Number of packets dropped because they have an 802.1p priority level configured to be dropped.
port_rx_dp_q_disabled_packets Increments when the filter indicates the packet must be delivered to a specific RX queue which is currently disabled due to configuration error or error condition.
port_rx_dp_di_dropped_packets Number of packets dropped because the filters indicate the packet must be dropped. This can happen because:
  • The packet does not match any filter.
  • The matched filter indicates the packet must be dropped.
port_rx_dp_streaming_packets Number of packets directed to RXDP streaming bus which is used if the packet matches a filter which directs it to the MCPU. Not currently used.
port_rx_dp_hlb_fetch Count the number of times the adapter descriptor cache is empty and a fetch operation is triggered to refill with more descriptors.
port_rx_dp_hlb_wait Packet arrives while adapter descriptor cache is empty, refill is in progress, but not yet complete.
rx_unicast Number of unicast packets received.
rx_unicast_bytes Number of unicast bytes received.
rx_multicast Number of multicast packets received.
rx_multicast_bytes Number of multicast bytes received.
rx_broadcast Number of broadcast packets received.
rx_broadcast_bytes Number of broadcast bytes received.
rx_bad Number of packets received with incorrect CRC value.
rx_bad_bytes Number of bytes received from packets with incorrect CRC value.
rx_overflow Number of packets dropped by receiver because of FIFO overrun.
tx_unicast Number of unicast packets transmitted.
tx_unicast_bytes Number of unicast bytes transmitted.
tx_multicast Number of multicast packets transmitted.
tx_multicast_bytes Number of multicast bytes transmitted.
tx_broadcast Number of broadcast packets transmitted.
tx_broadcast_bytes Number of broadcast bytes transmitted.
tx_bad Number of bad packets transmitted.
tx_bad_bytes Number of bad bytes transmitted.
tx_overflow Number of packets dropped by transmitter because of FIFO overrun.
fec_uncorrected_errors Number of uncorrected errors (RS-FEC).
fec_corrected_errors Number of corrected errors (RS-FEC).
fec_corrected_symbols_lane0 Per lane corrected symbols.
fec_corrected_symbols_lane1
fec_corrected_symbols_lane2
fec_corrected_symbols_lane3
ctpio_vi_busy_fallback When a CTPIO push occurs from a VI, but the VI DMA datapath is still busy with packets in flight or waiting to be sent. The packet is sent over the DMA datapath.
ctpio_long_write_success Host wrote excess data beyond 32-byte boundary after frame end, but the CTPIO send was successful.
ctpio_missing_dbell_fail When CTPIO push is not accompanied by a TX doorbell.
ctpio_overflow_fail When the host pushes packet bytes too fast and overflows the CTPIO buffer.
ctpio_underflow_fail

When the host fails to push packet bytes fast enough to match the adapter port speed.

The packet is truncated and data transmitted as a poisoned packet.

ctpio_timeout_fail

When host fails to send all bytes to complete the packet to be sent by CTPIO before the VI inactivity timer expires.

The packet is truncated and data transmitted as a poisoned packet.

ctpio_noncontig_wr_fail

A non-sequential address (for packet data) is encountered during CTPIO, caused when packet data is sent over PCIe interface as out-of-order or with gaps.

Packet is truncated and transmitted as a poisoned packet.

ctpio_frm_clobber_fail When a CTPIO push from one VI would have ‘clobbered’ a push already in progress by the same VI or another VI. One or both packets are sent over the DMA datapath - no packets are dropped.
ctpio_invalid_wr_fail

If packet length is less than length advertised in the CTPIO header the CTPIO fails.

Or packet write is not aligned to (or multiple of) 32-bytes.

The packet might be transmitted as a poisoned packet if sending has already started, or be erased if send has not already started.

ctpio_vi_clobber_fallback When a CTPIO collided with another already in progress. The in-progress packet succeeds, the other packet is sent via DMA.
ctpio_unqualified_fallback

When the VI is not enabled to send using CTPIO, or first write is not the packet header.

The packet is sent using DMA datapath.

ctpio_runt_fallback

Length in header < 29 bytes.

The packet is sent using DMA datapath.

ctpio_success Number of successful CTPIO TX events
ctpio_fallback

Number of instances when CTPIO push was rejected. This can occur because:

  • The VI legacy datapath is still busy.
  • Another CTPIO is in progress.
  • VI is not enabled to use CTPIO.
  • Push request for illegal sized frame.

Fallback events do not result in poison packets. Rejected packets use the DMA datapath path.

ctpio_poison

When the packet send has started, if CTPIO has to abort this packet, a corrupt CRC is attached to the packet.

A poisoned packet can be sent over the wire, depending on the mode.

The packet is sent using DMA datapath.

ctpio_erase

Before a packet send has started. Corrupt, undersized or poisoned packets are erased from the CTPIO datapath.

The packet is sent using DMA datapath.

tx_merge_events The number of TX completion events where more than one TX descriptor was completed.
tx_tso_bursts Number of times when outgoing TCP data is split into packets by the adapter driver. Refer to Tuning Settings.
tx_tso_long_headers Number of times TSO is applied to packets with long headers.
tx_tso_packets Number of physical packets produced by TSO.
tx_tso_fallbacks 0
tx_pushes Number of times a packet descriptor is ‘pushed’ to the adapter from the network adapter driver.
tx_pio_packets Number of packets sent using PIO.
tx_cb_packets 0
rx_reset 0
rx_tobe_disc Number of packets marked by the adapter to be discarded because of one of the following:
  • Mismatch unicast address and unicast promiscuous mode is not enabled.
  • Packet is a pause frame.
  • Packet has length discrepancy.
  • Due to internal FIFO overflow condition.
  • Length < 60 bytes.
rx_ip_hdr_chksum_err Number of packets received with IP header checksum error.
rx_inner_ip_hdr_chksum_err
rx_outer_ip_hdr_chksum_err
rx_tcp_udp_chksum_err Number of packets received with TCP/UDP checksum error.
rx_inner_tcp_udp_chksum_err
rx_outer_tcp_udp_chksum_err
rx_eth_crc_err Number of packets received where the CRC did not match the internally generated CRC value. This is the total of all receive channels receiving CRC errors.
rx_mcast_mismatch Number of unsolicited multicast packets received. Unwanted multicast packets can be received because a connected switch simply broadcasts all packets to all endpoints or because the connected switch is not able or not configured for IGMP snooping - a process from which it learns which endpoints are interested in which multicast streams.
rx_frm_trunc Number of frames truncated because an internal FIFO is full. As a packet is received it is fed by the MAC into a 128 K FIFO. If for any reason the PCI interface cannot keep pace and is unable to empty the FIFO at a sufficient rate, the MAC is unable to feed more of the packet to the FIFO. In this event the MAC truncates the frame (marking it as such) and discards the remainder. The driver discards a 'partial' packet which has been truncated.
rx_merge_events Number of RX completion events where more than one RX descriptor was completed.
rx_merge_packets Number of packets delivered to the host through merge events.
tx-N.tx_packets Per TX queue transmitted packets.
rx-N.rx_packets Per RX queue received packets.
rx_noskb_drops

Number of packets dropped by the adapter when there are insufficient socket buffers available to receive packets into.

See also port_rx_nodesc_drop_cnt and port_rx_nodesc_drops above.

rx_nodesc_trunc Number of frames truncated when there are insufficient descriptors to receive data into. Truncated packets are discarded by the adapter driver.
rfs_succeeded Number of successful accelerated RFS filter insertions.
rfs_failed Number of failed accelerated RFS filter insertions.
rfs_filter_count Number of accelerated RFS filters currently in place.
rx_mport_bad Count of RX packets dropped because their ingress mport was not recognized.
rx_xdp_tx Count of RX packets retransmitted due to XDP.
rx_xdp_redirect Count of RX packets redirected to a different NIC by XDP.
rx_xdp_drops Count of RX packets intentionally dropped due to XDP.
rx_xdp_bad_drops Count of RX packets dropped due to XDP errors.
tx-xsk-N.tx_packets Per XSK socket transmitted packets.
ptp_good_syncs

These PTP stats counters relate to the mechanism used by sfptpd to synchronize the system clock and adapter clock(s) in a server.

For each synchronization event, sfptpd selects a number of system clock times to be compared to the adapter clock time. If the times can be synchronized, the good_syncs counter is incremented, otherwise the bad_syncs counter is incremented. If sfptpd is unable to synchronize the clocks at this event, the sync_timeout counter is incremented.

sfptpd synchronizes clocks 16 times per second, so incrementing counters do not necessarily indicate bad synchronization between local server clocks and an external PTP master clock.

ptp_fast_syncs
ptp_bad_syncs
ptp_sync_timeouts
ptp_no_time_syncs
ptp_invalid_sync_windows
ptp_undersize_sync_windows
ptp_oversize_sync_windows
ptp_rx_no_timestamp Number of PTP packets received for which a hardware timestamp was not recovered from the adapter.
ptp_tx_timestamp_packets Number of PTP packets transmitted for which the adapter generated a hardware timestamp.
ptp_rx_timestamp_packets Number of PTP packets received for which the adapter generated a hardware timestamp.
ptp_timestamp_packets Total number of PTP packets for which the adapter generated a hardware timestamp.
ptp_filter_matches Number of PTP packets hitting the PTP filter.
ptp_non_filter_matches Number of PTP packets which did not match the PTP filter.
Note: The port_rx_bad and rx_eth_crc_err counters might differ, and this is expected. One cause of this is that port_rx_badis a firmware count and so sees all packets. However rx_eth_crc_err counts only bad CRC packets that are going to the net driver, and does not count bad CRC packets going to Onload or ef_vi.