X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=VNFs%2FDPPD-PROX%2Fstats_latency.c;h=5b2989df36f0d3c4a8716d22f33f97809fa9b394;hb=7d46676d5d377dc9def2a266ebd9b6b86570e732;hp=59d005802d797d79f9b5f79cfc5fdbafe7ff34ca;hpb=d813669721c37f0dcbb8f12b950cde7362265c50;p=samplevnf.git diff --git a/VNFs/DPPD-PROX/stats_latency.c b/VNFs/DPPD-PROX/stats_latency.c index 59d00580..5b2989df 100644 --- a/VNFs/DPPD-PROX/stats_latency.c +++ b/VNFs/DPPD-PROX/stats_latency.c @@ -1,5 +1,5 @@ /* -// Copyright (c) 2010-2017 Intel Corporation +// Copyright (c) 2010-2019 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ struct stats_latency_manager_entry { struct task_lat *task; + uint32_t bucket_size; uint8_t lcore_id; uint8_t task_id; struct lat_test lat_test; @@ -32,6 +33,7 @@ struct stats_latency_manager_entry { struct stats_latency_manager { uint16_t n_latency; + uint32_t bucket_size; struct stats_latency_manager_entry entries[0]; /* copy of stats when running update stats. */ }; @@ -48,6 +50,11 @@ int stats_get_n_latency(void) return slm->n_latency; } +int stats_get_latency_bucket_size(void) +{ + return slm->bucket_size; +} + uint32_t stats_latency_get_core_id(uint32_t i) { return slm->entries[i].lcore_id; @@ -63,6 +70,16 @@ struct stats_latency *stats_latency_get(uint32_t i) return &slm->entries[i].stats; } +uint64_t *stats_latency_get_bucket(uint32_t i) +{ + return slm->entries[i].lat_test.buckets; +} + +uint64_t *stats_latency_get_tot_bucket(uint32_t i) +{ + return slm->entries[i].tot_lat_test.buckets; +} + struct stats_latency *stats_latency_tot_get(uint32_t i) { return &slm->entries[i].tot; @@ -104,11 +121,11 @@ struct stats_latency *stats_latency_find(uint32_t lcore_id, uint32_t task_id) static int task_runs_observable_latency(struct task_args *targ) { - /* TODO: make this work with multiple ports and with - rings. Currently, only showing lat tasks which have 1 RX - port. */ + /* Note that multiple ports or rings are only supported + if they all receive packets configured in the same way + e.g. same timestamp pos. */ return !strcmp(targ->task_init->mode_str, "lat") && - (targ->nb_rxports == 1 || targ->nb_rxrings == 1); + (targ->nb_rxports >= 1 || targ->nb_rxrings >= 1); } static struct stats_latency_manager *alloc_stats_latency_manager(void) @@ -140,9 +157,14 @@ static void stats_latency_add_task(struct lcore_cfg *lconf, struct task_args *ta struct stats_latency_manager_entry *new_entry = &slm->entries[slm->n_latency]; new_entry->task = (struct task_lat *)targ->tbase; + new_entry->bucket_size = task_lat_get_latency_bucket_size(new_entry->task); new_entry->lcore_id = lconf->id; new_entry->task_id = targ->id; new_entry->tot_lat_test.min_lat = -1; + if (slm->bucket_size == 0) + slm->bucket_size = new_entry->bucket_size; + else if (slm->bucket_size != new_entry->bucket_size) + plog_err("Latency bucket size does not support different bucket sizes per task - using bucket size from first task (%d)\n", slm->bucket_size); slm->n_latency++; } @@ -206,6 +228,9 @@ static void stats_latency_from_lat_test(struct stats_latency *dst, struct lat_te dst->tot_packets = src->tot_pkts; dst->tot_all_packets = src->tot_all_pkts; dst->lost_packets = src->lost_packets; + dst->mis_ordered = src->mis_ordered; + dst->extent = src->extent; + dst->duplicate = src->duplicate; } static void stats_latency_update_entry(struct stats_latency_manager_entry *entry)