Linux ethtool Statistics - Linux ethtool Statistics - UG1739

AMD Solarflare X4 Series Ethernet Adapter User Guide (UG1739)

Document ID
UG1739
Release Date
2026-08-04
Revision
1.4 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_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_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_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_align_error Number of packets received with an align error.
port_rx_length_error Number of packets received with a length error.

port_rx_nodesc_drops

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_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_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 matched filter indicates the packet must be dropped.
  • The packet does not match any filter.
    Note: A copy of each received packet is always sent to the Enterprise datapath, to allow sniffing. If a packet is directed to the Express datapath, and the copy that is sent to the Enterprise datapath does not match any Enterprise datapath filter, this counter increments.
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.
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
exp_ctpio_write_bytes Number of bytes the host has written to the CTPIO apertures. Counts warming sends as well as normal sends.
exp_ctpio_packets Total number of packets sent via CTPIO. Excludes warming sends. Includes exp_ctpio_underflow_packets as well as successful sends.
exp_ctpio_bytes Total number of bytes sent via CTPIO. Excludes warming sends. Includes exp_ctpio_underflow_bytes as well as successful sends.
exp_ctpio_warm_packets Number of packets the host has sent with the warming flag set. These packets are not emitted to the wire.
exp_ctpio_warm_bytes Number of bytes the host has sent with the warming flag set. These packets are not emitted to the wire.
exp_ctpio_underflow_packets Number of packets which failed to send via CTPIO due to underrun. These packets were "poisoned" and emitted to the wire with an invalid ethernet FCS.
exp_ctpio_underflow_bytes Number of bytes which failed to send via CTPIO due to underrun. These packets were "poisoned" and emitted to the wire with an invalid ethernet FCS.
exp_ctpio_drain_packets Number of packet sends discarded while adapter being reconfigured. Only expected to occur during interface reconfiguration.
exp_ctpio_drain_bytes Number of byte sends discarded while adapter being reconfigured. Only expected to occur during interface reconfiguration.
exp_tx_merge_packets Number of packet sends notified to the host through merge events.
exp_tx_event_tlps Number of PCIe TLPs sent to host containing TX events.
exp_tx_event_bytes Number of bytes of TX event data sent to host.
exp_rx_packets Total number of packets received, including "bad" packets.
exp_rx_bytes Total number of bytes received, including "bad" packets.
exp_rx_bad_packets Packets received with invalid ethernet FCS.
Note: Packets with a valid ethernet FCS but an invalid L3/4 checksum are instead counted by Onload / TCPDirect / ef_vi stats.
exp_rx_port_disabled_packets Number of packets discarded while port is disabled.
exp_rx_port_disabled_bytes Number of bytes discarded while port is disabled.
exp_rx_vfifo_full_drop_packets

Number of packets dropped because there was not enough server packet memory available to receive them. Happens when packets cannot be delivered to the host as quickly as they arrive due to:

  • Adapter is inserted into a low speed or low width PCI slot – so the PCIe bus cannot support the required bandwidth.
  • Host memory bandwidth is being used by other devices resulting in poor performance for the adapter.
  • All packets are very small (for example 64 bytes) and both interfaces run at 100G. (PCIe overheads are highest for small frames, and this combination can oversubscribe a PCIe Gen5 ×8 link.)
exp_rx_vfifo_full_drop_bytes

Number of bytes dropped because there was not enough server packet memory available to receive them. Happens when packets cannot be delivered to the host as quickly as they arrive due to:

  • Adapter is inserted into a low speed or low width PCI slot – so the PCIe bus cannot support the required bandwidth.
  • Host memory bandwidth is being used by other devices resulting in poor performance for the adapter.
  • All packets are very small (for example 64 bytes) and both interfaces run at 100G. (PCIe overheads are highest for small frames, and this combination can oversubscribe a PCIe Gen5 ×8 link.)
exp_rx_dp_q_disabled_packets Number of packets that a filter indicated should be delivered to a specific RX queue that was disabled. Can occur briefly when accelerated applications are started/stopped, or might be due to configuration error or error condition.
exp_rx_dp_q_disabled_bytes Number of bytes that a filter indicated should be delivered to a specific RX queue that was disabled. Can occur briefly when accelerated applications are started/stopped, or might be due to configuration error or error condition.
exp_rx_nodesc_drop_packets

Number of packets dropped by the network adapter because of a lack of superbuffers for an RX queue.

This problem occurs if the receive rate is very high and the host software does not refill the RX ring in time.

exp_rx_nodesc_drop_bytes

Number of bytes dropped by the network adapter because of a lack of superbuffers for an RX queue.

This problem occurs if the receive rate is very high and the host software does not refill the RX ring in time.

exp_rx_oversize_trunc_bytes Packets which are longer than the maximum supported length are truncated by the NIC. This counter records the excess number of bytes which the NIC discarded. The portion of the packet which is delivered to the host is marked as truncated and is typically dropped by the host software.
exp_rx_data_tlps Number of PCIe TLPs sent to host containing RX packet data.
exp_rx_data_bytes Number of bytes of RX packet data sent to host as PCIe TLPs.
exp_rx_meta_tlps Number of PCIe TLPs sent to host containing RX metadata.
exp_rx_merge_packets Number of packets delivered to the host through merge events.
exp_rx_merge_event_tlps Number of PCIe TLPs sent to host containing RX events.
exp_rx_merge_event_bytes Number of bytes of RX event data sent to host as PCIe TLPs.
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.
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.
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_mport_bad Count of RX packets dropped because their ingress mport was not recognized.
rfs_filter_count Number of accelerated RFS filters currently in place.
rfs_succeeded Number of successful accelerated RFS filter insertions.
rfs_failed Number of failed accelerated RFS filter insertions.
tx-N.tx_packets Per TX queue transmitted packets.
rx-N.rx_packets Per RX queue received packets.
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.
pps_fw Number of PPS pulses received from firmware, generated from clock source on the NIC.
pps_hw Number of PPS pulses received from hardware, generated from PPS_IN external connector.
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.

CRC counters might increment for other packet error conditions.