[ovs-dev] [PATCH v9] dpif-netdev: Count sent packets and batches.
Ilya Maximets
i.maximets at samsung.com
Wed Dec 20 15:22:32 UTC 2017
New statistics for 'pmd-stats-show' command:
average number of packets per output batch.
Acked-by: Eelco Chaudron <echaudro at redhat.com>
Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
---
Version 9:
* rebased on top of [4/6].
lib/dpif-netdev.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index d7f6171..39f2940 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -337,6 +337,8 @@ enum dp_stat_type {
DP_STAT_LOST, /* Packets not passed up to the client. */
DP_STAT_LOOKUP_HIT, /* Number of subtable lookups for flow table
hits */
+ DP_STAT_SENT_PKTS, /* Packets that has been sent. */
+ DP_STAT_SENT_BATCHES, /* Number of batches sent. */
DP_N_STATS
};
@@ -508,6 +510,9 @@ struct dp_netdev_pmd_cycles {
atomic_ullong n[PMD_N_CYCLES];
};
+static void dp_netdev_count_packet(struct dp_netdev_pmd_thread *,
+ enum dp_stat_type type, int cnt);
+
struct polled_queue {
struct dp_netdev_rxq *rxq;
odp_port_t port_no;
@@ -834,6 +839,7 @@ pmd_info_show_stats(struct ds *reply,
{
unsigned long long total_packets;
uint64_t total_cycles = 0;
+ double lookups_per_hit = 0, packets_per_batch = 0;
int i;
/* These loops subtracts reference values ('*_zero') from the counters.
@@ -875,15 +881,23 @@ pmd_info_show_stats(struct ds *reply,
}
ds_put_cstr(reply, ":\n");
+ if (stats[DP_STAT_MASKED_HIT] > 0) {
+ lookups_per_hit = stats[DP_STAT_LOOKUP_HIT]
+ / (double) stats[DP_STAT_MASKED_HIT];
+ }
+ if (stats[DP_STAT_SENT_BATCHES] > 0) {
+ packets_per_batch = stats[DP_STAT_SENT_PKTS]
+ / (double) stats[DP_STAT_SENT_BATCHES];
+ }
+
ds_put_format(reply,
"\temc hits:%llu\n\tmegaflow hits:%llu\n"
"\tavg. subtable lookups per hit:%.2f\n"
- "\tmiss:%llu\n\tlost:%llu\n",
+ "\tmiss:%llu\n\tlost:%llu\n"
+ "\tavg. packets per output batch: %.2f\n",
stats[DP_STAT_EXACT_HIT], stats[DP_STAT_MASKED_HIT],
- stats[DP_STAT_MASKED_HIT] > 0
- ? (1.0*stats[DP_STAT_LOOKUP_HIT])/stats[DP_STAT_MASKED_HIT]
- : 0,
- stats[DP_STAT_MISS], stats[DP_STAT_LOST]);
+ lookups_per_hit, stats[DP_STAT_MISS], stats[DP_STAT_LOST],
+ packets_per_batch);
if (total_cycles == 0) {
return;
@@ -3259,6 +3273,7 @@ dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
struct tx_port *p)
{
int tx_qid;
+ int output_cnt;
bool dynamic_txqs;
dynamic_txqs = p->port->dynamic_txqs;
@@ -3268,8 +3283,13 @@ dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
tx_qid = pmd->static_tx_qid;
}
+ output_cnt = dp_packet_batch_size(&p->output_pkts);
+
netdev_send(p->port->netdev, tx_qid, &p->output_pkts, dynamic_txqs);
dp_packet_batch_init(&p->output_pkts);
+
+ dp_netdev_count_packet(pmd, DP_STAT_SENT_PKTS, output_cnt);
+ dp_netdev_count_packet(pmd, DP_STAT_SENT_BATCHES, 1);
}
static void
--
2.7.4
More information about the dev
mailing list