From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Reshma Pattan <reshma.pattan@intel.com>
Subject: [PATCH v3 5/5] latencystats: include file cleanup
Date: Wed, 17 Apr 2024 10:07:27 -0700 [thread overview]
Message-ID: <20240417170908.76701-6-stephen@networkplumber.org> (raw)
In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org>
Include what is used here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/latencystats/rte_latencystats.c | 85 ++++++++++++++++++-----------
1 file changed, 52 insertions(+), 33 deletions(-)
diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c
index 62038a9f5d..31e7a6eb88 100644
--- a/lib/latencystats/rte_latencystats.c
+++ b/lib/latencystats/rte_latencystats.c
@@ -2,16 +2,25 @@
* Copyright(c) 2018 Intel Corporation
*/
+#include <errno.h>
#include <math.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <string.h>
-#include <rte_string_fns.h>
-#include <rte_mbuf_dyn.h>
-#include <rte_log.h>
+#include <rte_common.h>
#include <rte_cycles.h>
+#include <rte_eal.h>
+#include <rte_errno.h>
#include <rte_ethdev.h>
-#include <rte_metrics.h>
-#include <rte_memzone.h>
#include <rte_lcore.h>
+#include <rte_log.h>
+#include <rte_mbuf.h>
+#include <rte_mbuf_dyn.h>
+#include <rte_memzone.h>
+#include <rte_metrics.h>
+#include <rte_spinlock.h>
+#include <rte_string_fns.h>
#include "rte_latencystats.h"
@@ -148,14 +157,15 @@ add_time_stamps(uint16_t pid __rte_unused,
static uint16_t
calc_latency(uint16_t pid __rte_unused,
- uint16_t qid __rte_unused,
- struct rte_mbuf **pkts,
- uint16_t nb_pkts,
- void *_ __rte_unused)
+ uint16_t qid __rte_unused,
+ struct rte_mbuf **pkts,
+ uint16_t nb_pkts,
+ void *_ __rte_unused)
{
unsigned int i;
uint64_t now, latency;
static uint64_t prev_latency;
+ static bool first_sample = true;
now = rte_rdtsc();
@@ -166,32 +176,41 @@ calc_latency(uint16_t pid __rte_unused,
latency = now - *timestamp_dynfield(pkts[i]);
- /*
- * The jitter is calculated as statistical mean of interpacket
- * delay variation. The "jitter estimate" is computed by taking
- * the absolute values of the ipdv sequence and applying an
- * exponential filter with parameter 1/16 to generate the
- * estimate. i.e J=J+(|D(i-1,i)|-J)/16. Where J is jitter,
- * D(i-1,i) is difference in latency of two consecutive packets
- * i-1 and i.
- * Reference: Calculated as per RFC 5481, sec 4.1,
- * RFC 3393 sec 4.5, RFC 1889 sec.
- */
- glob_stats->jitter += ((prev_latency - latency) - glob_stats->jitter) / 16;
- if (glob_stats->min_latency == 0)
- glob_stats->min_latency = latency;
- else if (latency < glob_stats->min_latency)
+ if (first_sample) {
+ first_sample = false;
+
glob_stats->min_latency = latency;
- else if (latency > glob_stats->max_latency)
glob_stats->max_latency = latency;
- /*
- * The average latency is measured using exponential moving
- * average, i.e. using EWMA
- * https://en.wikipedia.org/wiki/Moving_average
- *
- * Alpha is .25
- */
- glob_stats->avg_latency += (latency - glob_stats->avg_latency) / 4;
+ glob_stats->avg_latency = latency;
+ glob_stats->jitter = 0;
+ } else {
+ /*
+ * The jitter is calculated as statistical mean of interpacket
+ * delay variation. The "jitter estimate" is computed by taking
+ * the absolute values of the ipdv sequence and applying an
+ * exponential filter with parameter 1/16 to generate the
+ * estimate. i.e J=J+(|D(i-1,i)|-J)/16. Where J is jitter,
+ * D(i-1,i) is difference in latency of two consecutive packets
+ * i-1 and i.
+ * Reference: Calculated as per RFC 5481, sec 4.1,
+ * RFC 3393 sec 4.5, RFC 1889 sec.
+ */
+ glob_stats->jitter += ((prev_latency - latency)
+ - glob_stats->jitter) / 16;
+ if (latency < glob_stats->min_latency)
+ glob_stats->min_latency = latency;
+ if (latency > glob_stats->max_latency)
+ glob_stats->max_latency = latency;
+ /*
+ * The average latency is measured using exponential moving
+ * average, i.e. using EWMA
+ * https://en.wikipedia.org/wiki/Moving_average
+ *
+ * Alpha is .25
+ */
+ glob_stats->avg_latency += (latency - glob_stats->avg_latency) / 4;
+ }
+
prev_latency = latency;
}
rte_spinlock_unlock(&glob_stats->lock);
--
2.43.0
next prev parent reply other threads:[~2024-04-17 17:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <0240408195036.182545-1-stephen@networkplumber.org>
2024-04-17 17:07 ` [PATCH v3 0/5] latencystats: cleanups Stephen Hemminger
2024-04-17 17:07 ` [PATCH v3 1/5] latencystats: replace use of VLA Stephen Hemminger
2024-04-17 18:03 ` Morten Brørup
2024-04-17 18:13 ` Stephen Hemminger
2024-04-18 0:00 ` Tyler Retzlaff
2024-04-17 17:07 ` [PATCH v3 2/5] latencystats: handle fractional cycles per ns Stephen Hemminger
2024-04-18 0:03 ` Tyler Retzlaff
2024-04-17 17:07 ` [PATCH v3 3/5] latencystats: do not use floating point Stephen Hemminger
2024-04-18 0:10 ` Tyler Retzlaff
2024-04-17 17:07 ` [PATCH v3 4/5] latencystats: fix log messages Stephen Hemminger
2024-04-18 0:13 ` Tyler Retzlaff
2024-04-17 17:07 ` Stephen Hemminger [this message]
2024-04-17 17:30 ` [PATCH v3 5/5] latencystats: include file cleanup Bruce Richardson
2024-04-17 18:13 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240417170908.76701-6-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=reshma.pattan@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.