From nobody Mon Sep 18 14:59:57 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Rq7Hx6cpdz4tKPF; Mon, 18 Sep 2023 14:59:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Rq7Hx5RqVz4fdb; Mon, 18 Sep 2023 14:59:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695049197; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bVyJuyRK7b+fWytTqBuM9p6vU7T1sLl2qMfA/zqpoJY=; b=btV79FXSnUDdp/WehXV6iIkwnOckrb/0plX/oHv9Po4Hv8onsAfKK3D0hwyP0SqR9mFbj5 CGPKm2UBKBL+uWcg4P+c7eWZXEaiXUlsKFcyS/gNOL1KHRS8sXeDxBHRNpZ8+lNajeOYOG hpAOq71ysyH/VFgYTKovd8a74LHGNHnZQzr972qGrOSBeNo/MXELNYxO6m6wyifI2jLDyX tGT5QIKHJbfvY+rdTa54KnGfGdxTthpEedZWHYe7gAdVXbUalwp3ulV6/I7NvOiTGEdh9d Ov3OIvPgfKf154TbXITRXxCJyufutvsPz1fCoE2S3Kgxbv/g/skdOGQ5R9/1cA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1695049197; a=rsa-sha256; cv=none; b=xLUHfdXEKB6u8n7I6ru84YT+SzToN8Kb8RcN7iK/YG63C7JdU5eI1zEdodndfShEn/OWis gtj5GbX/GedAWAv272nMskiul0AF0aer7UpNE/6eIOJwNK6fYG1YeCPmfBArkAm8Pr81hw eeEimGo+c48C/6iHAN7Ofjy7DML3RS8rc9W//oCicYqZIq+NNK4fu9a71cpvBA33T5+0Sd W/73S+9tZ0NatcpvhuI8JvcxTc4u4qKdxyQBJk9i++QPyusycxH1hfiDzuJKWktvvN3CFV G6bIlIHt8NIrh5wUF/gMRcJXW7Zzzldi/oDbt32sjw8uJABd1ZlbIK5c4oRLXA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695049197; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bVyJuyRK7b+fWytTqBuM9p6vU7T1sLl2qMfA/zqpoJY=; b=PfXxlNoajdQeFeUosUyryMeBBUi5Nl6H1EKcXgjicg9o4VIfB1e4y3Dlla9G/OLJzxbv5C KndME5LoZrvhJHCtyNk6YNwDZmJPxrwBY77Yd38EqxEF0EptL38nv9FZHf2Cc4VbOLq974 bSfRBK1NDnapdayzh6gzsxNa601NIkSm9ysoontvFeRFyg4aBsvmpk2nCYSV/899HWjr9M K7nLJUGWPrilDZjU9EnhO8OMyuUUo8UyxvJ1IbHXgCWMvHNDST6jKC8m+zceKELrLw1LJm jUxzz2zZ4lmQwFDKB7Sma258OEi5lFD0H0aVlrHRHuLMpEHLSI/ioE9ogM/P8g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Rq7Hx4Xmtzbgg; Mon, 18 Sep 2023 14:59:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38IExv5j047303; Mon, 18 Sep 2023 14:59:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38IExvgH047300; Mon, 18 Sep 2023 14:59:57 GMT (envelope-from git) Date: Mon, 18 Sep 2023 14:59:57 GMT Message-Id: <202309181459.38IExvgH047300@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Wei Hu Subject: git: ebb74abbd8a2 - releng/14.0 - mana: add lro and tso stat counters List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: whu X-Git-Repository: src X-Git-Refname: refs/heads/releng/14.0 X-Git-Reftype: branch X-Git-Commit: ebb74abbd8a2f01640678ca09b58f725175f2b7d Auto-Submitted: auto-generated The branch releng/14.0 has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=ebb74abbd8a2f01640678ca09b58f725175f2b7d commit ebb74abbd8a2f01640678ca09b58f725175f2b7d Author: Wei Hu AuthorDate: 2023-09-14 11:56:20 +0000 Commit: Wei Hu CommitDate: 2023-09-18 14:58:13 +0000 mana: add lro and tso stat counters Add a few stat counters for tso and lro. Approved by: re (gjb) Sponsored by: Microsoft (cherry picked from commit b167e449c8db01f082691503fb5c1255ad5750eb) (cherry picked from commit a72a0af8194effa5f7e7a88d09673ed798819e88) --- sys/dev/mana/mana.h | 5 ++ sys/dev/mana/mana_en.c | 12 ++++ sys/dev/mana/mana_sysctl.c | 136 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 153 insertions(+) diff --git a/sys/dev/mana/mana.h b/sys/dev/mana/mana.h index 9a22ea87baa3..ab394f3203ad 100644 --- a/sys/dev/mana/mana.h +++ b/sys/dev/mana/mana.h @@ -170,6 +170,9 @@ struct mana_txq { struct mtx txq_mtx; char txq_mtx_name[16]; + uint64_t tso_pkts; + uint64_t tso_bytes; + struct task enqueue_task; struct taskqueue *enqueue_tq; @@ -423,6 +426,8 @@ struct mana_rxq { uint32_t buf_index; + uint64_t lro_tried; + uint64_t lro_failed; struct mana_stats stats; /* MUST BE THE LAST MEMBER: diff --git a/sys/dev/mana/mana_en.c b/sys/dev/mana/mana_en.c index 064b28fa94a4..812a42e51dfc 100644 --- a/sys/dev/mana/mana_en.c +++ b/sys/dev/mana/mana_en.c @@ -501,6 +501,7 @@ mana_xmit(struct mana_txq *txq) struct gdma_queue *gdma_sq; struct mana_cq *cq; int err, len; + bool is_tso; gdma_sq = txq->gdma_sq; cq = &apc->tx_qp[txq->idx].tx_cq; @@ -578,7 +579,10 @@ mana_xmit(struct mana_txq *txq) pkg.wqe_req.flags = 0; pkg.wqe_req.client_data_unit = 0; + is_tso = false; if (mbuf->m_pkthdr.csum_flags & CSUM_TSO) { + is_tso = true; + if (MANA_L3_PROTO(mbuf) == ETHERTYPE_IP) pkg.tx_oob.s_oob.is_outer_ipv4 = 1; else @@ -641,6 +645,11 @@ mana_xmit(struct mana_txq *txq) packets++; bytes += len; + + if (is_tso) { + txq->tso_pkts++; + txq->tso_bytes += len; + } } counter_enter(); @@ -1697,9 +1706,12 @@ mana_rx_mbuf(struct mbuf *mbuf, struct mana_rxcomp_oob *cqe, do_if_input = true; if ((if_getcapenable(ndev) & IFCAP_LRO) && do_lro) { + rxq->lro_tried++; if (rxq->lro.lro_cnt != 0 && tcp_lro_rx(&rxq->lro, mbuf, 0) == 0) do_if_input = false; + else + rxq->lro_failed++; } if (do_if_input) { if_input(ndev, mbuf); diff --git a/sys/dev/mana/mana_sysctl.c b/sys/dev/mana/mana_sysctl.c index 79a4867a0abf..d03ebe44ab31 100644 --- a/sys/dev/mana/mana_sysctl.c +++ b/sys/dev/mana/mana_sysctl.c @@ -46,6 +46,96 @@ SYSCTL_INT(_hw_mana, OID_AUTO, log_level, CTLFLAG_RWTUN, SYSCTL_CONST_STRING(_hw_mana, OID_AUTO, driver_version, CTLFLAG_RD, DRV_MODULE_VERSION, "MANA driver version"); +static int +mana_sysctl_rx_stat_agg_u64(SYSCTL_HANDLER_ARGS) +{ + struct mana_port_context *apc = arg1; + int offset = arg2, i, err; + struct mana_rxq *rxq; + uint64_t stat; + + stat = 0; + for (i = 0; i < apc->num_queues; i++) { + rxq = apc->rxqs[i]; + stat += *((uint64_t *)((uint8_t *)rxq + offset)); + } + + err = sysctl_handle_64(oidp, &stat, 0, req); + if (err || req->newptr == NULL) + return err; + + for (i = 0; i < apc->num_queues; i++) { + rxq = apc->rxqs[i]; + *((uint64_t *)((uint8_t *)rxq + offset)) = 0; + } + return 0; +} + +static int +mana_sysctl_rx_stat_u16(SYSCTL_HANDLER_ARGS) +{ + struct mana_port_context *apc = arg1; + int offset = arg2, err; + struct mana_rxq *rxq; + uint64_t stat; + uint16_t val; + + rxq = apc->rxqs[0]; + val = *((uint16_t *)((uint8_t *)rxq + offset)); + stat = val; + + err = sysctl_handle_64(oidp, &stat, 0, req); + if (err || req->newptr == NULL) + return err; + else + return 0; +} + +static int +mana_sysctl_rx_stat_u32(SYSCTL_HANDLER_ARGS) +{ + struct mana_port_context *apc = arg1; + int offset = arg2, err; + struct mana_rxq *rxq; + uint64_t stat; + uint32_t val; + + rxq = apc->rxqs[0]; + val = *((uint32_t *)((uint8_t *)rxq + offset)); + stat = val; + + err = sysctl_handle_64(oidp, &stat, 0, req); + if (err || req->newptr == NULL) + return err; + else + return 0; +} + +static int +mana_sysctl_tx_stat_agg_u64(SYSCTL_HANDLER_ARGS) +{ + struct mana_port_context *apc = arg1; + int offset = arg2, i, err; + struct mana_txq *txq; + uint64_t stat; + + stat = 0; + for (i = 0; i < apc->num_queues; i++) { + txq = &apc->tx_qp[i].txq; + stat += *((uint64_t *)((uint8_t *)txq + offset)); + } + + err = sysctl_handle_64(oidp, &stat, 0, req); + if (err || req->newptr == NULL) + return err; + + for (i = 0; i < apc->num_queues; i++) { + txq = &apc->tx_qp[i].txq; + *((uint64_t *)((uint8_t *)txq + offset)) = 0; + } + return 0; +} + void mana_sysctl_add_port(struct mana_port_context *apc) { @@ -99,6 +189,52 @@ mana_sysctl_add_port(struct mana_port_context *apc) CTLFLAG_RD, &port_stats->rx_drops, "Receive packet drops"); SYSCTL_ADD_COUNTER_U64(ctx, stats_list, OID_AUTO, "tx_drops", CTLFLAG_RD, &port_stats->tx_drops, "Transmit packet drops"); + + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "rx_lro_queued", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_queued), + mana_sysctl_rx_stat_agg_u64, "LU", "LRO queued"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "rx_lro_flushed", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_flushed), + mana_sysctl_rx_stat_agg_u64, "LU", "LRO flushed"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "rx_lro_bad_csum", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_MPSAFE | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_bad_csum), + mana_sysctl_rx_stat_agg_u64, "LU", "LRO bad checksum"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "rx_lro_tried", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro_tried), + mana_sysctl_rx_stat_agg_u64, "LU", "LRO tried"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "rx_lro_failed", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro_failed), + mana_sysctl_rx_stat_agg_u64, "LU", "LRO failed"); + + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "lro_ackcnt_lim", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_ackcnt_lim), + mana_sysctl_rx_stat_u16, + "LU", "Max # of ACKs to be aggregated by LRO"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "lro_length_lim", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_length_lim), + mana_sysctl_rx_stat_u32, + "LU", "Max len of aggregated data in byte by LRO"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "lro_cnt", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_rxq, lro.lro_cnt), + mana_sysctl_rx_stat_u32, + "LU", "Max # or LRO packet count"); + + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "tx_tso_packets", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_txq, tso_pkts), + mana_sysctl_tx_stat_agg_u64, "LU", "TSO packets"); + SYSCTL_ADD_PROC(ctx, stats_list, OID_AUTO, "tx_tso_bytes", + CTLTYPE_U64 | CTLFLAG_RD | CTLFLAG_STATS, apc, + __offsetof(struct mana_txq, tso_bytes), + mana_sysctl_tx_stat_agg_u64, "LU", "TSO bytes"); } void