Commit b5603510 authored by Daniel Jurgens's avatar Daniel Jurgens Committed by Jakub Kicinski
Browse files

netdev: Add queue stats for TX stop and wake



TX queue stop and wake are counted by some drivers.
Support reporting these via netdev-genl queue stats.

Signed-off-by: default avatarDaniel Jurgens <danielj@nvidia.com>
Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
Reviewed-by: default avatarJason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-2-danielj@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent c084ebd7
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -439,6 +439,20 @@ attribute-sets:
          Number of the packets dropped by the device due to the transmit
          packets bitrate exceeding the device rate limit.
        type: uint
      -
        name: tx-stop
        doc: |
          Number of times driver paused accepting new tx packets
          from the stack to this queue, because the queue was full.
          Note that if BQL is supported and enabled on the device
          the networking stack will avoid queuing a lot of data at once.
        type: uint
      -
        name: tx-wake
        doc: |
          Number of times driver re-started accepting send
          requests to this queue from the stack.
        type: uint

operations:
  list:
+3 −0
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ struct netdev_queue_stats_tx {
	u64 hw_gso_wire_bytes;

	u64 hw_drop_ratelimits;

	u64 stop;
	u64 wake;
};

/**
+2 −0
Original line number Diff line number Diff line
@@ -165,6 +165,8 @@ enum {
	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_TX_STOP,
	NETDEV_A_QSTATS_TX_WAKE,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
+3 −1
Original line number Diff line number Diff line
@@ -517,7 +517,9 @@ netdev_nl_stats_write_tx(struct sk_buff *rsp, struct netdev_queue_stats_tx *tx)
	    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))
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_HW_DROP_RATELIMITS, tx->hw_drop_ratelimits) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_STOP, tx->stop) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_TX_WAKE, tx->wake))
		return -EMSGSIZE;
	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -165,6 +165,8 @@ enum {
	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_TX_STOP,
	NETDEV_A_QSTATS_TX_WAKE,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)