Commit 92f8b1f5 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

netdev: add queue stat for alloc failures



Rx alloc failures are commonly counted by drivers.
Support reporting those via netdev-genl queue stats.

Acked-by: default avatarStanislav Fomichev <sdf@google.com>
Reviewed-by: default avatarAmritha Nambiar <amritha.nambiar@intel.com>
Reviewed-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
Link: https://lore.kernel.org/r/20240306195509.1502746-3-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent ab63a238
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -328,6 +328,13 @@ attribute-sets:
        name: tx-bytes
        doc: Successfully sent bytes, see `tx-packets`.
        type: uint
      -
        name: rx-alloc-fail
        doc: |
          Number of times skb or buffer allocation failed on the Rx datapath.
          Allocation failure may, or may not result in a packet drop, depending
          on driver implementation and whether system recovers quickly.
        type: uint

operations:
  list:
+2 −0
Original line number Diff line number Diff line
@@ -4,9 +4,11 @@

#include <linux/netdevice.h>

/* See the netdev.yaml spec for definition of each statistic */
struct netdev_queue_stats_rx {
	u64 bytes;
	u64 packets;
	u64 alloc_fail;
};

struct netdev_queue_stats_tx {
+1 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ enum {
	NETDEV_A_QSTATS_RX_BYTES,
	NETDEV_A_QSTATS_TX_PACKETS,
	NETDEV_A_QSTATS_TX_BYTES,
	NETDEV_A_QSTATS_RX_ALLOC_FAIL,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
+2 −1
Original line number Diff line number Diff line
@@ -488,7 +488,8 @@ static int
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_BYTES, rx->bytes) ||
	    netdev_stat_put(rsp, NETDEV_A_QSTATS_RX_ALLOC_FAIL, rx->alloc_fail))
		return -EMSGSIZE;
	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ enum {
	NETDEV_A_QSTATS_RX_BYTES,
	NETDEV_A_QSTATS_TX_PACKETS,
	NETDEV_A_QSTATS_TX_BYTES,
	NETDEV_A_QSTATS_RX_ALLOC_FAIL,

	__NETDEV_A_QSTATS_MAX,
	NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)