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: Stanislav Fomichev <sdf@google.com> Reviewed-by: Amritha Nambiar <amritha.nambiar@intel.com> Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Link: https://lore.kernel.org/r/20240306195509.1502746-3-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@ -328,6 +328,13 @@ attribute-sets:
|
|||||||
name: tx-bytes
|
name: tx-bytes
|
||||||
doc: Successfully sent bytes, see `tx-packets`.
|
doc: Successfully sent bytes, see `tx-packets`.
|
||||||
type: uint
|
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:
|
operations:
|
||||||
list:
|
list:
|
||||||
|
@ -4,9 +4,11 @@
|
|||||||
|
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
|
|
||||||
|
/* See the netdev.yaml spec for definition of each statistic */
|
||||||
struct netdev_queue_stats_rx {
|
struct netdev_queue_stats_rx {
|
||||||
u64 bytes;
|
u64 bytes;
|
||||||
u64 packets;
|
u64 packets;
|
||||||
|
u64 alloc_fail;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct netdev_queue_stats_tx {
|
struct netdev_queue_stats_tx {
|
||||||
|
@ -145,6 +145,7 @@ enum {
|
|||||||
NETDEV_A_QSTATS_RX_BYTES,
|
NETDEV_A_QSTATS_RX_BYTES,
|
||||||
NETDEV_A_QSTATS_TX_PACKETS,
|
NETDEV_A_QSTATS_TX_PACKETS,
|
||||||
NETDEV_A_QSTATS_TX_BYTES,
|
NETDEV_A_QSTATS_TX_BYTES,
|
||||||
|
NETDEV_A_QSTATS_RX_ALLOC_FAIL,
|
||||||
|
|
||||||
__NETDEV_A_QSTATS_MAX,
|
__NETDEV_A_QSTATS_MAX,
|
||||||
NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
|
NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
|
||||||
|
@ -488,7 +488,8 @@ static int
|
|||||||
netdev_nl_stats_write_rx(struct sk_buff *rsp, struct netdev_queue_stats_rx *rx)
|
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) ||
|
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 -EMSGSIZE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -145,6 +145,7 @@ enum {
|
|||||||
NETDEV_A_QSTATS_RX_BYTES,
|
NETDEV_A_QSTATS_RX_BYTES,
|
||||||
NETDEV_A_QSTATS_TX_PACKETS,
|
NETDEV_A_QSTATS_TX_PACKETS,
|
||||||
NETDEV_A_QSTATS_TX_BYTES,
|
NETDEV_A_QSTATS_TX_BYTES,
|
||||||
|
NETDEV_A_QSTATS_RX_ALLOC_FAIL,
|
||||||
|
|
||||||
__NETDEV_A_QSTATS_MAX,
|
__NETDEV_A_QSTATS_MAX,
|
||||||
NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
|
NETDEV_A_QSTATS_MAX = (__NETDEV_A_QSTATS_MAX - 1)
|
||||||
|
Reference in New Issue
Block a user