Commit 0cfe71f4 authored by Xuan Zhuo's avatar Xuan Zhuo Committed by Paolo Abeni
Browse files

netdev: add queue stats



These stats are commonly. Support reporting those via netdev-genl queue
stats.

name: rx-hw-drops
name: rx-hw-drop-overruns
name: rx-csum-unnecessary
name: rx-csum-none
name: rx-csum-bad
name: rx-hw-gro-packets
name: rx-hw-gro-bytes
name: rx-hw-gro-wire-packets
name: rx-hw-gro-wire-bytes
name: rx-hw-drop-ratelimits
name: tx-hw-drops
name: tx-hw-drop-errors
name: tx-csum-none
name: tx-needs-csum
name: tx-hw-gso-packets
name: tx-hw-gso-bytes
name: tx-hw-gso-wire-packets
name: tx-hw-gso-wire-bytes
name: tx-hw-drop-ratelimits

Signed-off-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent d806e1ff
Loading
Loading
Loading
Loading
+104 −0
Original line number Diff line number Diff line
@@ -335,6 +335,110 @@ attribute-sets:
          Allocation failure may, or may not result in a packet drop, depending
          on driver implementation and whether system recovers quickly.
        type: uint
      -
        name: rx-hw-drops
        doc: |
          Number of all packets which entered the device, but never left it,
          including but not limited to: packets dropped due to lack of buffer
          space, processing errors, explicit or implicit policies and packet
          filters.
        type: uint
      -
        name: rx-hw-drop-overruns
        doc: |
          Number of packets dropped due to transient lack of resources, such as
          buffer space, host descriptors etc.
        type: uint
      -
        name: rx-csum-unnecessary
        doc: Number of packets that were marked as CHECKSUM_UNNECESSARY.
        type: uint
      -
        name: rx-csum-none
        doc: Number of packets that were not checksummed by device.
        type: uint
      -
        name: rx-csum-bad
        doc: |
          Number of packets with bad checksum. The packets are not discarded,
          but still delivered to the stack.
        type: uint
      -
        name: rx-hw-gro-packets
        doc: |
          Number of packets that were coalesced from smaller packets by the device.
          Counts only packets coalesced with the HW-GRO netdevice feature,
          LRO-coalesced packets are not counted.
        type: uint
      -
        name: rx-hw-gro-bytes
        doc: See `rx-hw-gro-packets`.
        type: uint
      -
        name: rx-hw-gro-wire-packets
        doc: |
          Number of packets that were coalesced to bigger packetss with the HW-GRO
          netdevice feature. LRO-coalesced packets are not counted.
        type: uint
      -
        name: rx-hw-gro-wire-bytes
        doc: See `rx-hw-gro-wire-packets`.
        type: uint
      -
        name: rx-hw-drop-ratelimits
        doc: |
          Number of the packets dropped by the device due to the received
          packets bitrate exceeding the device rate limit.
        type: uint
      -
        name: tx-hw-drops
        doc: |
          Number of packets that arrived at the device but never left it,
          encompassing packets dropped for reasons such as processing errors, as
          well as those affected by explicitly defined policies and packet
          filtering criteria.
        type: uint
      -
        name: tx-hw-drop-errors
        doc: Number of packets dropped because they were invalid or malformed.
        type: uint
      -
        name: tx-csum-none
        doc: |
          Number of packets that did not require the device to calculate the
          checksum.
        type: uint
      -
        name: tx-needs-csum
        doc: |
          Number of packets that required the device to calculate the checksum.
        type: uint
      -
        name: tx-hw-gso-packets
        doc: |
          Number of packets that necessitated segmentation into smaller packets
          by the device.
        type: uint
      -
        name: tx-hw-gso-bytes
        doc: See `tx-hw-gso-packets`.
        type: uint
      -
        name: tx-hw-gso-wire-packets
        doc: |
          Number of wire-sized packets generated by processing
          `tx-hw-gso-packets`
        type: uint
      -
        name: tx-hw-gso-wire-bytes
        doc: See `tx-hw-gso-wire-packets`.
        type: uint
      -
        name: tx-hw-drop-ratelimits
        doc: |
          Number of the packets dropped by the device due to the transmit
          packets bitrate exceeding the device rate limit.
        type: uint

operations:
  list:
+27 −0
Original line number Diff line number Diff line
@@ -9,11 +9,38 @@ struct netdev_queue_stats_rx {
	u64 bytes;
	u64 packets;
	u64 alloc_fail;

	u64 hw_drops;
	u64 hw_drop_overruns;

	u64 csum_unnecessary;
	u64 csum_none;
	u64 csum_bad;

	u64 hw_gro_packets;
	u64 hw_gro_bytes;
	u64 hw_gro_wire_packets;
	u64 hw_gro_wire_bytes;

	u64 hw_drop_ratelimits;
};

struct netdev_queue_stats_tx {
	u64 bytes;
	u64 packets;

	u64 hw_drops;
	u64 hw_drop_errors;

	u64 csum_none;
	u64 needs_csum;

	u64 hw_gso_packets;
	u64 hw_gso_bytes;
	u64 hw_gso_wire_packets;
	u64 hw_gso_wire_bytes;

	u64 hw_drop_ratelimits;
};

/**
+19 −0
Original line number Diff line number Diff line
@@ -146,6 +146,25 @@ enum {
	NETDEV_A_QSTATS_TX_PACKETS,
	NETDEV_A_QSTATS_TX_BYTES,
	NETDEV_A_QSTATS_RX_ALLOC_FAIL,
	NETDEV_A_QSTATS_RX_HW_DROPS,
	NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS,
	NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY,
	NETDEV_A_QSTATS_RX_CSUM_NONE,
	NETDEV_A_QSTATS_RX_CSUM_BAD,
	NETDEV_A_QSTATS_RX_HW_GRO_PACKETS,
	NETDEV_A_QSTATS_RX_HW_GRO_BYTES,
	NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS,
	NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES,
	NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS,
	NETDEV_A_QSTATS_TX_HW_DROPS,
	NETDEV_A_QSTATS_TX_HW_DROP_ERRORS,
	NETDEV_A_QSTATS_TX_CSUM_NONE,
	NETDEV_A_QSTATS_TX_NEEDS_CSUM,
	NETDEV_A_QSTATS_TX_HW_GSO_PACKETS,
	NETDEV_A_QSTATS_TX_HW_GSO_BYTES,
	NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS,
	NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES,
	NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
+21 −2
Original line number Diff line number Diff line
@@ -489,7 +489,17 @@ netdev_nl_stats_write_rx(struct sk_buff *rsp, struct netdev_queue_stats_rx *rx)
{
	if (netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_PACKETS, rx->packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_BYTES, rx->bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail))
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROPS, rx->hw_drops) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS, rx->hw_drop_overruns) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY, rx->csum_unnecessary) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_NONE, rx->csum_none) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_CSUM_BAD, rx->csum_bad) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_PACKETS, rx->hw_gro_packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_BYTES, rx->hw_gro_bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS, rx->hw_gro_wire_packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES, rx->hw_gro_wire_bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS, rx->hw_drop_ratelimits))
		return -EMSGSIZE;
	return 0;
}
@@ -498,7 +508,16 @@ static int
netdev_nl_stats_write_tx(struct sk_buff *rsp, struct netdev_queue_stats_tx *tx)
{
	if (netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_PACKETS, tx->packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_BYTES, tx->bytes))
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_BYTES, tx->bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROPS, tx->hw_drops) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROP_ERRORS, tx->hw_drop_errors) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_CSUM_NONE, tx->csum_none) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_NEEDS_CSUM, tx->needs_csum) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_PACKETS, tx->hw_gso_packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_BYTES, tx->hw_gso_bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS, tx->hw_gso_wire_packets) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES, tx->hw_gso_wire_bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, tx->hw_drop_ratelimits))
		return -EMSGSIZE;
	return 0;
}
+19 −0
Original line number Diff line number Diff line
@@ -146,6 +146,25 @@ enum {
	NETDEV_A_QSTATS_TX_PACKETS,
	NETDEV_A_QSTATS_TX_BYTES,
	NETDEV_A_QSTATS_RX_ALLOC_FAIL,
	NETDEV_A_QSTATS_RX_HW_DROPS,
	NETDEV_A_QSTATS_RX_HW_DROP_OVERRUNS,
	NETDEV_A_QSTATS_RX_CSUM_UNNECESSARY,
	NETDEV_A_QSTATS_RX_CSUM_NONE,
	NETDEV_A_QSTATS_RX_CSUM_BAD,
	NETDEV_A_QSTATS_RX_HW_GRO_PACKETS,
	NETDEV_A_QSTATS_RX_HW_GRO_BYTES,
	NETDEV_A_QSTATS_RX_HW_GRO_WIRE_PACKETS,
	NETDEV_A_QSTATS_RX_HW_GRO_WIRE_BYTES,
	NETDEV_A_QSTATS_RX_HW_DROP_RATELIMITS,
	NETDEV_A_QSTATS_TX_HW_DROPS,
	NETDEV_A_QSTATS_TX_HW_DROP_ERRORS,
	NETDEV_A_QSTATS_TX_CSUM_NONE,
	NETDEV_A_QSTATS_TX_NEEDS_CSUM,
	NETDEV_A_QSTATS_TX_HW_GSO_PACKETS,
	NETDEV_A_QSTATS_TX_HW_GSO_BYTES,
	NETDEV_A_QSTATS_TX_HW_GSO_WIRE_PACKETS,
	NETDEV_A_QSTATS_TX_HW_GSO_WIRE_BYTES,
	NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)