All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 11/13] port: added port_sched_writer stats
@ 2015-03-30 11:31 Maciej Gajdzica
  0 siblings, 0 replies; only message in thread
From: Maciej Gajdzica @ 2015-03-30 11:31 UTC (permalink / raw)
  To: dev-VfR2kkLFssw

---
 config/common_bsdapp             |    1 +
 config/common_linuxapp           |    1 +
 lib/librte_port/rte_port_sched.c |   57 ++++++++++++++++++++++++++++++++++----
 3 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/config/common_bsdapp b/config/common_bsdapp
index 4b1a877..f222cef 100644
--- a/config/common_bsdapp
+++ b/config/common_bsdapp
@@ -391,6 +391,7 @@ CONFIG_RTE_PORT_RING_READER_STATS_COLLECT=n
 CONFIG_RTE_PORT_RING_WRITER_STATS_COLLECT=n
 CONFIG_RTE_PORT_RING_WRITER_NODROP_STATS_COLLECT=n
 CONFIG_RTE_PORT_SCHED_READER_STATS_COLLECT=n
+CONFIG_RTE_PORT_SCHED_WRITER_STATS_COLLECT=n
 
 #
 # Compile librte_table
diff --git a/config/common_linuxapp b/config/common_linuxapp
index 055d06e..67233e9 100644
--- a/config/common_linuxapp
+++ b/config/common_linuxapp
@@ -398,6 +398,7 @@ CONFIG_RTE_PORT_RING_READER_STATS_COLLECT=n
 CONFIG_RTE_PORT_RING_WRITER_STATS_COLLECT=n
 CONFIG_RTE_PORT_RING_WRITER_NODROP_STATS_COLLECT=n
 CONFIG_RTE_PORT_SCHED_READER_STATS_COLLECT=n
+CONFIG_RTE_PORT_SCHED_WRITER_STATS_COLLECT=n
 
 #
 # Compile librte_table
diff --git a/lib/librte_port/rte_port_sched.c b/lib/librte_port/rte_port_sched.c
index f1cb435..93d7930 100644
--- a/lib/librte_port/rte_port_sched.c
+++ b/lib/librte_port/rte_port_sched.c
@@ -132,7 +132,23 @@ rte_port_sched_reader_stats_read(void *port,
 /*
  * Writer
  */
+#ifdef RTE_PORT_SCHED_WRITER_STATS_COLLECT
+
+#define RTE_PORT_SCHED_WRITER_STATS_PKTS_IN_ADD(port, val) \
+	port->stats.n_pkts_in += val
+#define RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(port, val) \
+	port->stats.n_pkts_drop += val
+
+#else
+
+#define RTE_PORT_SCHED_WRITER_STATS_PKTS_IN_ADD(port, val)
+#define RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(port, val)
+
+#endif
+
 struct rte_port_sched_writer {
+	struct rte_port_out_stats stats;
+
 	struct rte_mbuf *tx_buf[2 * RTE_PORT_IN_BURST_SIZE_MAX];
 	struct rte_sched_port *sched;
 	uint32_t tx_burst_sz;
@@ -180,8 +196,12 @@ rte_port_sched_writer_tx(void *port, struct rte_mbuf *pkt)
 	struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port;
 
 	p->tx_buf[p->tx_buf_count++] = pkt;
+	RTE_PORT_SCHED_WRITER_STATS_PKTS_IN_ADD(p, 1);
 	if (p->tx_buf_count >= p->tx_burst_sz) {
-		rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count);
+		__rte_unused uint32_t nb_tx;
+
+		nb_tx = rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count);
+		RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(p, p->tx_buf_count - nb_tx);
 		p->tx_buf_count = 0;
 	}
 
@@ -200,15 +220,18 @@ rte_port_sched_writer_tx_bulk(void *port,
 			((pkts_mask & bsz_mask) ^ bsz_mask);
 
 	if (expr == 0) {
+		__rte_unused uint32_t nb_tx;
 		uint64_t n_pkts = __builtin_popcountll(pkts_mask);
 
 		if (tx_buf_count) {
-			rte_sched_port_enqueue(p->sched, p->tx_buf,
+			nb_tx = rte_sched_port_enqueue(p->sched, p->tx_buf,
 				tx_buf_count);
+			RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(p, tx_buf_count - nb_tx);
 			p->tx_buf_count = 0;
 		}
 
-		rte_sched_port_enqueue(p->sched, pkts, n_pkts);
+		nb_tx = rte_sched_port_enqueue(p->sched, pkts, n_pkts);
+		RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(p, n_pkts - nb_tx);
 	} else {
 		for ( ; pkts_mask; ) {
 			uint32_t pkt_index = __builtin_ctzll(pkts_mask);
@@ -216,13 +239,17 @@ rte_port_sched_writer_tx_bulk(void *port,
 			struct rte_mbuf *pkt = pkts[pkt_index];
 
 			p->tx_buf[tx_buf_count++] = pkt;
+			RTE_PORT_SCHED_WRITER_STATS_PKTS_IN_ADD(p, 1);
 			pkts_mask &= ~pkt_mask;
 		}
 		p->tx_buf_count = tx_buf_count;
 
 		if (tx_buf_count >= p->tx_burst_sz) {
-			rte_sched_port_enqueue(p->sched, p->tx_buf,
+			__rte_unused uint32_t nb_tx;
+
+			nb_tx = rte_sched_port_enqueue(p->sched, p->tx_buf,
 				tx_buf_count);
+			RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(p, tx_buf_count - nb_tx);
 			p->tx_buf_count = 0;
 		}
 	}
@@ -236,7 +263,10 @@ rte_port_sched_writer_flush(void *port)
 	struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port;
 
 	if (p->tx_buf_count) {
-		rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count);
+		__rte_unused uint32_t nb_tx;
+
+		nb_tx = rte_sched_port_enqueue(p->sched, p->tx_buf, p->tx_buf_count);
+		RTE_PORT_SCHED_WRITER_STATS_PKTS_DROP_ADD(p, p->tx_buf_count - nb_tx);
 		p->tx_buf_count = 0;
 	}
 
@@ -257,6 +287,22 @@ rte_port_sched_writer_free(void *port)
 	return 0;
 }
 
+static int
+rte_port_sched_writer_stats_read(void *port,
+		struct rte_port_out_stats *stats, int clear)
+{
+	struct rte_port_sched_writer *p =
+		(struct rte_port_sched_writer *) port;
+
+	if (stats != NULL)
+		memcpy(stats, &p->stats, sizeof(p->stats));
+
+	if (clear)
+		memset(&p->stats, 0, sizeof(p->stats));
+
+	return 0;
+}
+
 /*
  * Summary of port operations
  */
@@ -273,4 +319,5 @@ struct rte_port_out_ops rte_port_sched_writer_ops = {
 	.f_tx = rte_port_sched_writer_tx,
 	.f_tx_bulk = rte_port_sched_writer_tx_bulk,
 	.f_flush = rte_port_sched_writer_flush,
+	.f_stats = rte_port_sched_writer_stats_read,
 };
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-03-30 11:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-30 11:31 [PATCH 11/13] port: added port_sched_writer stats Maciej Gajdzica

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.