git: 223c8cb12e95 - main - ena: Add missing statistics

Marcin Wojtas mw at FreeBSD.org
Wed Sep 1 23:07:43 UTC 2021


The branch main has been updated by mw:

URL: https://cgit.FreeBSD.org/src/commit/?id=223c8cb12e951c63807300a0cbdc4a1569520b4b

commit 223c8cb12e951c63807300a0cbdc4a1569520b4b
Author:     Artur Rojek <ar at semihalf.com>
AuthorDate: 2021-08-12 08:34:29 +0000
Commit:     Marcin Wojtas <mw at FreeBSD.org>
CommitDate: 2021-09-01 23:06:47 +0000

    ena: Add missing statistics
    
    Provide the following sysctl statistics in order to stay aligned with
    the Linux driver:
    * rx_ring.csum_good
    * tx_ring.unmask_interrupt_num
    
    Also rename the 'bad_csum' statistic name to 'csum_bad' for alignment.
    
    Obtained from: Semihalf
    MFC after: 2 weeks
    Sponsored by: Amazon, Inc.
---
 sys/dev/ena/ena.c          |  3 +++
 sys/dev/ena/ena.h          |  4 +++-
 sys/dev/ena/ena_datapath.c |  6 ++++--
 sys/dev/ena/ena_sysctl.c   | 11 +++++++++--
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
index c1b770926b0f..91ddc7733b9f 100644
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -1874,6 +1874,7 @@ ena_unmask_all_io_irqs(struct ena_adapter *adapter)
 {
 	struct ena_com_io_cq* io_cq;
 	struct ena_eth_io_intr_reg intr_reg;
+	struct ena_ring *tx_ring;
 	uint16_t ena_qid;
 	int i;
 
@@ -1882,6 +1883,8 @@ ena_unmask_all_io_irqs(struct ena_adapter *adapter)
 		ena_qid = ENA_IO_TXQ_IDX(i);
 		io_cq = &adapter->ena_dev->io_cq_queues[ena_qid];
 		ena_com_update_intr_reg(&intr_reg, 0, 0, true);
+		tx_ring = &adapter->tx_ring[i];
+		counter_u64_add(tx_ring->tx_stats.unmask_interrupt_num, 1);
 		ena_com_unmask_intr(io_cq, &intr_reg);
 	}
 }
diff --git a/sys/dev/ena/ena.h b/sys/dev/ena/ena.h
index 0e85cb39b001..bc0f59a6f711 100644
--- a/sys/dev/ena/ena.h
+++ b/sys/dev/ena/ena.h
@@ -280,19 +280,21 @@ struct ena_stats_tx {
 	counter_u64_t queue_wakeup;
 	counter_u64_t queue_stop;
 	counter_u64_t llq_buffer_copy;
+	counter_u64_t unmask_interrupt_num;
 };
 
 struct ena_stats_rx {
 	counter_u64_t cnt;
 	counter_u64_t bytes;
 	counter_u64_t refil_partial;
-	counter_u64_t bad_csum;
+	counter_u64_t csum_bad;
 	counter_u64_t mjum_alloc_fail;
 	counter_u64_t mbuf_alloc_fail;
 	counter_u64_t dma_mapping_err;
 	counter_u64_t bad_desc_num;
 	counter_u64_t bad_req_id;
 	counter_u64_t empty_rx_ring;
+	counter_u64_t csum_good;
 };
 
 struct ena_ring {
diff --git a/sys/dev/ena/ena_datapath.c b/sys/dev/ena/ena_datapath.c
index 6506c808e4cb..e1993a714fa0 100644
--- a/sys/dev/ena/ena_datapath.c
+++ b/sys/dev/ena/ena_datapath.c
@@ -103,6 +103,7 @@ ena_cleanup(void *arg, int pending)
 	    RX_IRQ_INTERVAL,
 	    TX_IRQ_INTERVAL,
 	    true);
+	counter_u64_add(tx_ring->tx_stats.unmask_interrupt_num, 1);
 	ena_com_unmask_intr(io_cq, &intr_reg);
 }
 
@@ -516,7 +517,7 @@ ena_rx_checksum(struct ena_ring *rx_ring, struct ena_com_rx_ctx *ena_rx_ctx,
 	    ena_rx_ctx->l3_csum_err)) {
 		/* ipv4 checksum error */
 		mbuf->m_pkthdr.csum_flags = 0;
-		counter_u64_add(rx_ring->rx_stats.bad_csum, 1);
+		counter_u64_add(rx_ring->rx_stats.csum_bad, 1);
 		ena_log_io(pdev, DBG, "RX IPv4 header checksum error\n");
 		return;
 	}
@@ -527,11 +528,12 @@ ena_rx_checksum(struct ena_ring *rx_ring, struct ena_com_rx_ctx *ena_rx_ctx,
 		if (ena_rx_ctx->l4_csum_err) {
 			/* TCP/UDP checksum error */
 			mbuf->m_pkthdr.csum_flags = 0;
-			counter_u64_add(rx_ring->rx_stats.bad_csum, 1);
+			counter_u64_add(rx_ring->rx_stats.csum_bad, 1);
 			ena_log_io(pdev, DBG, "RX L4 checksum error\n");
 		} else {
 			mbuf->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
 			mbuf->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			counter_u64_add(rx_ring->rx_stats.csum_good, 1);
 		}
 	}
 }
diff --git a/sys/dev/ena/ena_sysctl.c b/sys/dev/ena/ena_sysctl.c
index cc8dff4af0c0..91bd0f74b341 100644
--- a/sys/dev/ena/ena_sysctl.c
+++ b/sys/dev/ena/ena_sysctl.c
@@ -238,6 +238,10 @@ ena_sysctl_add_stats(struct ena_adapter *adapter)
 		    "llq_buffer_copy", CTLFLAG_RD,
 		    &tx_stats->llq_buffer_copy,
 		    "Header copies for llq transaction");
+		SYSCTL_ADD_COUNTER_U64(ctx, tx_list, OID_AUTO,
+		    "unmask_interrupt_num", CTLFLAG_RD,
+		    &tx_stats->unmask_interrupt_num,
+		    "Unmasked interrupt count");
 
 		/* RX specific stats */
 		rx_node = SYSCTL_ADD_NODE(ctx, queue_list, OID_AUTO,
@@ -256,8 +260,8 @@ ena_sysctl_add_stats(struct ena_adapter *adapter)
 		    "refil_partial", CTLFLAG_RD,
 		    &rx_stats->refil_partial, "Partial refilled mbufs");
 		SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO,
-		    "bad_csum", CTLFLAG_RD,
-		    &rx_stats->bad_csum, "Bad RX checksum");
+		    "csum_bad", CTLFLAG_RD,
+		    &rx_stats->csum_bad, "Bad RX checksum");
 		SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO,
 		    "mbuf_alloc_fail", CTLFLAG_RD,
 		    &rx_stats->mbuf_alloc_fail, "Failed mbuf allocs");
@@ -276,6 +280,9 @@ ena_sysctl_add_stats(struct ena_adapter *adapter)
 		SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO,
 		    "empty_rx_ring", CTLFLAG_RD,
 		    &rx_stats->empty_rx_ring, "RX descriptors depletion count");
+		SYSCTL_ADD_COUNTER_U64(ctx, rx_list, OID_AUTO,
+		    "csum_good", CTLFLAG_RD,
+		    &rx_stats->csum_good, "Valid RX checksum calculations");
 	}
 
 	/* Stats read from device */


More information about the dev-commits-src-main mailing list