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.
ethtool -S output depends on the features supported by the adapter type. Some fields
listed below might not be present.| 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:
|
| 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:
|
| 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:
|
| 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:
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:
|
| 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. |
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.