[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<DS3PR21MB57355253303502B93595FA36CE87A@DS3PR21MB5735.namprd21.prod.outlook.com>
Date: Tue, 6 Jan 2026 22:10:03 +0000
From: Long Li <longli@...rosoft.com>
To: Haiyang Zhang <haiyangz@...ux.microsoft.com>,
"linux-hyperv@...r.kernel.org" <linux-hyperv@...r.kernel.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>, KY Srinivasan
<kys@...rosoft.com>, Haiyang Zhang <haiyangz@...rosoft.com>, Wei Liu
<wei.liu@...nel.org>, Dexuan Cui <DECUI@...rosoft.com>, Andrew Lunn
<andrew+netdev@...n.ch>, "David S. Miller" <davem@...emloft.net>, Eric
Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
<pabeni@...hat.com>, Konstantin Taranov <kotaranov@...rosoft.com>, Simon
Horman <horms@...nel.org>, Erni Sri Satya Vennela
<ernis@...ux.microsoft.com>, Shradha Gupta
<shradhagupta@...ux.microsoft.com>, Saurabh Sengar
<ssengar@...ux.microsoft.com>, Aditya Garg <gargaditya@...ux.microsoft.com>,
Dipayaan Roy <dipayanroy@...ux.microsoft.com>, Shiraz Saleem
<shirazsaleem@...rosoft.com>, "linux-kernel@...r.kernel.org"
<linux-kernel@...r.kernel.org>, "linux-rdma@...r.kernel.org"
<linux-rdma@...r.kernel.org>
CC: Paul Rosswurm <paulros@...rosoft.com>
Subject: RE: [PATCH V2,net-next, 2/2] net: mana: Add ethtool counters for RX
CQEs in coalesced type
> Subject: [PATCH V2,net-next, 2/2] net: mana: Add ethtool counters for RX
> CQEs in coalesced type
>
> From: Haiyang Zhang <haiyangz@...rosoft.com>
>
> For RX CQEs with type CQE_RX_COALESCED_4, to measure the coalescing
> efficiency, add counters to count how many contains 2, 3, 4 packets
> respectively.
> Also, add a counter for the error case of first packet with length == 0.
>
> Signed-off-by: Haiyang Zhang <haiyangz@...rosoft.com>
Reviewed-by: Long Li <longli@...rosoft.com>
> ---
> drivers/net/ethernet/microsoft/mana/mana_en.c | 25
> +++++++++++++++++--
> .../ethernet/microsoft/mana/mana_ethtool.c | 17 ++++++++++---
> include/net/mana/mana.h | 10 +++++---
> 3 files changed, 42 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c
> b/drivers/net/ethernet/microsoft/mana/mana_en.c
> index a46a1adf83bc..78824567d80b 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_en.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
> @@ -2083,8 +2083,22 @@ static void mana_process_rx_cqe(struct
> mana_rxq *rxq, struct mana_cq *cq,
>
> nextpkt:
> pktlen = oob->ppi[i].pkt_len;
> - if (pktlen == 0)
> + if (pktlen == 0) {
> + /* Collect coalesced CQE count based on packets processed.
> + * Coalesced CQEs have at least 2 packets, so index is i - 2.
> + */
> + if (i > 1) {
> + u64_stats_update_begin(&rxq->stats.syncp);
> + rxq->stats.coalesced_cqe[i - 2]++;
> + u64_stats_update_end(&rxq->stats.syncp);
> + } else if (i == 0) {
> + /* Error case stat */
> + u64_stats_update_begin(&rxq->stats.syncp);
> + rxq->stats.pkt_len0_err++;
> + u64_stats_update_end(&rxq->stats.syncp);
> + }
> return;
> + }
>
> curr = rxq->buf_index;
> rxbuf_oob = &rxq->rx_oobs[curr];
> @@ -2102,8 +2116,15 @@ static void mana_process_rx_cqe(struct
> mana_rxq *rxq, struct mana_cq *cq,
>
> mana_post_pkt_rxq(rxq);
>
> - if (coalesced && (++i < MANA_RXCOMP_OOB_NUM_PPI))
> + if (!coalesced)
> + return;
> +
> + if (++i < MANA_RXCOMP_OOB_NUM_PPI)
> goto nextpkt;
> +
> + u64_stats_update_begin(&rxq->stats.syncp);
> + rxq->stats.coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 2]++;
> + u64_stats_update_end(&rxq->stats.syncp);
> }
>
> static void mana_poll_rx_cq(struct mana_cq *cq) diff --git
> a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> index b2b9bfb50396..635796bfdaf1 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
> @@ -20,8 +20,6 @@ static const struct mana_stats_desc mana_eth_stats[] =
> {
> tx_cqe_unknown_type)},
> {"tx_linear_pkt_cnt", offsetof(struct mana_ethtool_stats,
> tx_linear_pkt_cnt)},
> - {"rx_coalesced_err", offsetof(struct mana_ethtool_stats,
> - rx_coalesced_err)},
> {"rx_cqe_unknown_type", offsetof(struct mana_ethtool_stats,
> rx_cqe_unknown_type)},
> };
> @@ -151,7 +149,7 @@ static void mana_get_strings(struct net_device *ndev,
> u32 stringset, u8 *data) {
> struct mana_port_context *apc = netdev_priv(ndev);
> unsigned int num_queues = apc->num_queues;
> - int i;
> + int i, j;
>
> if (stringset != ETH_SS_STATS)
> return;
> @@ -170,6 +168,9 @@ static void mana_get_strings(struct net_device *ndev,
> u32 stringset, u8 *data)
> ethtool_sprintf(&data, "rx_%d_xdp_drop", i);
> ethtool_sprintf(&data, "rx_%d_xdp_tx", i);
> ethtool_sprintf(&data, "rx_%d_xdp_redirect", i);
> + ethtool_sprintf(&data, "rx_%d_pkt_len0_err", i);
> + for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1; j++)
> + ethtool_sprintf(&data, "rx_%d_coalesced_cqe_%d", i,
> j + 2);
> }
>
> for (i = 0; i < num_queues; i++) {
> @@ -203,6 +204,8 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
> u64 xdp_xmit;
> u64 xdp_drop;
> u64 xdp_tx;
> + u64 pkt_len0_err;
> + u64 coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 1];
> u64 tso_packets;
> u64 tso_bytes;
> u64 tso_inner_packets;
> @@ -211,7 +214,7 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
> u64 short_pkt_fmt;
> u64 csum_partial;
> u64 mana_map_err;
> - int q, i = 0;
> + int q, i = 0, j;
>
> if (!apc->port_is_up)
> return;
> @@ -241,6 +244,9 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
> xdp_drop = rx_stats->xdp_drop;
> xdp_tx = rx_stats->xdp_tx;
> xdp_redirect = rx_stats->xdp_redirect;
> + pkt_len0_err = rx_stats->pkt_len0_err;
> + for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1;
> j++)
> + coalesced_cqe[j] = rx_stats->coalesced_cqe[j];
> } while (u64_stats_fetch_retry(&rx_stats->syncp, start));
>
> data[i++] = packets;
> @@ -248,6 +254,9 @@ static void mana_get_ethtool_stats(struct net_device
> *ndev,
> data[i++] = xdp_drop;
> data[i++] = xdp_tx;
> data[i++] = xdp_redirect;
> + data[i++] = pkt_len0_err;
> + for (j = 0; j < MANA_RXCOMP_OOB_NUM_PPI - 1; j++)
> + data[i++] = coalesced_cqe[j];
> }
>
> for (q = 0; q < num_queues; q++) {
> diff --git a/include/net/mana/mana.h b/include/net/mana/mana.h index
> 51d26ebeff6c..f8dd19860103 100644
> --- a/include/net/mana/mana.h
> +++ b/include/net/mana/mana.h
> @@ -61,8 +61,11 @@ enum TRI_STATE {
>
> #define MAX_PORTS_IN_MANA_DEV 256
>
> +/* Maximum number of packets per coalesced CQE */ #define
> +MANA_RXCOMP_OOB_NUM_PPI 4
> +
> /* Update this count whenever the respective structures are changed */ -
> #define MANA_STATS_RX_COUNT 5
> +#define MANA_STATS_RX_COUNT (6 + MANA_RXCOMP_OOB_NUM_PPI - 1)
> #define MANA_STATS_TX_COUNT 11
>
> #define MANA_RX_FRAG_ALIGNMENT 64
> @@ -73,6 +76,8 @@ struct mana_stats_rx {
> u64 xdp_drop;
> u64 xdp_tx;
> u64 xdp_redirect;
> + u64 pkt_len0_err;
> + u64 coalesced_cqe[MANA_RXCOMP_OOB_NUM_PPI - 1];
> struct u64_stats_sync syncp;
> };
>
> @@ -227,8 +232,6 @@ struct mana_rxcomp_perpkt_info {
> u32 pkt_hash;
> }; /* HW DATA */
>
> -#define MANA_RXCOMP_OOB_NUM_PPI 4
> -
> /* Receive completion OOB */
> struct mana_rxcomp_oob {
> struct mana_cqe_header cqe_hdr;
> @@ -378,7 +381,6 @@ struct mana_ethtool_stats {
> u64 tx_cqe_err;
> u64 tx_cqe_unknown_type;
> u64 tx_linear_pkt_cnt;
> - u64 rx_coalesced_err;
> u64 rx_cqe_unknown_type;
> };
>
> --
> 2.34.1
Powered by blists - more mailing lists