From patchwork Wed Apr 17 17:07:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139456 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8F3CA43E94; Wed, 17 Apr 2024 19:09:19 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 485F8427DB; Wed, 17 Apr 2024 19:09:15 +0200 (CEST) Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by mails.dpdk.org (Postfix) with ESMTP id 5A24140DDA for ; Wed, 17 Apr 2024 19:09:12 +0200 (CEST) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1e65b29f703so32053865ad.3 for ; Wed, 17 Apr 2024 10:09:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373751; x=1713978551; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=09UyrYX1Vh02PraxkSf5Xu2VMzlVl81VvnMGrlBxTxw=; b=GlwPLgFM41wqVhvIYODY37nYnF3jFXSXRO5mjZH4CDT9SacJPKmEzPKqvdryFynq88 18gv7QrU6fuy5CXJcAZZ1n9YfYc/c2O47FByCoOKMNndmewo8KlMQpT8KBJNxlWfwq7k zX0cG6wWTVVxfZvad217OTgiHKBKxQGYNT4odL84p80YzSiVMYExxfXm8zT+eBjQKdb7 h9lT9sXyG3/+zXIm8fSMGVNMwo4JBZDIvlg0h+omhkR35ehHpBTW/zwqwL91rmPC4LpL V4Ej1Zb7O1fZZRuP32aRNof1COMU/r3TzpuZ1Uhf0J4TYNbwsXmkVx27U4399NjtkxKi fLSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713373751; x=1713978551; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=09UyrYX1Vh02PraxkSf5Xu2VMzlVl81VvnMGrlBxTxw=; b=HJ2DCsvH9DvzRkdnWCiw2cWVhw+Uae5aU9K6/bufvKSLQKEbn4Es2lCqjp4rAnBRuU 8ELWCziwwu7fCUPX6cXGepp91c+Tay8Hg6iupAFMrt68TSYl9aIwc2yvSrFkDeRQxNmr GStpeHHS3NBeTJvr4rKsptS9gP1DE2TrJZh83qCwBfPTggRkFHmX6bvyw7pxmbebvf2Z E4ncNVx5A64TtIN4DH5pc9HB6o92UME20cjQMDLuomrwttr8IWhThabd+76Dc5t1Gic0 kyGxkpak2XLnPfUpQKSPOInQFN2e+S95IGrZNmGSOPAQn8Io7VpOMnEq+2kFiM/rJpp5 Jdkw== X-Gm-Message-State: AOJu0YyYtwtClxX+JNtrXbCdUFGI9Mp4CJsusCsrn12oiN/Mk45AiZz3 rZfo7MIwUAyxgVxIUotf5p7Zhr19vtWlrm9CHUsDCXeihp6dyXqZ/9QR6moaBL0mHvFd4rOyyCj e X-Google-Smtp-Source: AGHT+IFYwn+vOt+uax703s4Mgo51/1oMquSccnGY1kZKhsAo1VzXO+7c73ZWHRDbbYtBP/4erSg9xw== X-Received: by 2002:a17:902:8c94:b0:1e2:bf94:487 with SMTP id t20-20020a1709028c9400b001e2bf940487mr76871plo.57.1713373751411; Wed, 17 Apr 2024 10:09:11 -0700 (PDT) Received: from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 10:09:11 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v3 1/5] latencystats: replace use of VLA Date: Wed, 17 Apr 2024 10:07:23 -0700 Message-ID: <20240417170908.76701-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org> References: <0240408195036.182545-1-stephen@networkplumber.org> <20240417170908.76701-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The temporary array latencystats is not needed if the algorithm is converted into one pass. Signed-off-by: Stephen Hemminger Acked-by: Morten Brørup Acked-by: Tyler Retzlaff --- lib/latencystats/rte_latencystats.c | 31 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 4ea9b0d75b..9b345bfb33 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -157,9 +157,9 @@ calc_latency(uint16_t pid __rte_unused, uint16_t nb_pkts, void *_ __rte_unused) { - unsigned int i, cnt = 0; + unsigned int i; uint64_t now; - float latency[nb_pkts]; + float latency; static float prev_latency; /* * Alpha represents degree of weighting decrease in EWMA, @@ -169,13 +169,14 @@ calc_latency(uint16_t pid __rte_unused, const float alpha = 0.2; now = rte_rdtsc(); - for (i = 0; i < nb_pkts; i++) { - if (pkts[i]->ol_flags & timestamp_dynflag) - latency[cnt++] = now - *timestamp_dynfield(pkts[i]); - } rte_spinlock_lock(&glob_stats->lock); - for (i = 0; i < cnt; i++) { + for (i = 0; i < nb_pkts; i++) { + if (!(pkts[i]->ol_flags & timestamp_dynflag)) + continue; + + latency = now - *timestamp_dynfield(pkts[i]); + /* * The jitter is calculated as statistical mean of interpacket * delay variation. The "jitter estimate" is computed by taking @@ -187,22 +188,22 @@ calc_latency(uint16_t pid __rte_unused, * Reference: Calculated as per RFC 5481, sec 4.1, * RFC 3393 sec 4.5, RFC 1889 sec. */ - glob_stats->jitter += (fabsf(prev_latency - latency[i]) + glob_stats->jitter += (fabsf(prev_latency - latency) - glob_stats->jitter)/16; if (glob_stats->min_latency == 0) - glob_stats->min_latency = latency[i]; - else if (latency[i] < glob_stats->min_latency) - glob_stats->min_latency = latency[i]; - else if (latency[i] > glob_stats->max_latency) - glob_stats->max_latency = latency[i]; + glob_stats->min_latency = latency; + else if (latency < glob_stats->min_latency) + 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 */ glob_stats->avg_latency += - alpha * (latency[i] - glob_stats->avg_latency); - prev_latency = latency[i]; + alpha * (latency - glob_stats->avg_latency); + prev_latency = latency; } rte_spinlock_unlock(&glob_stats->lock); From patchwork Wed Apr 17 17:07:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139457 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EE6C543E94; Wed, 17 Apr 2024 19:09:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 996B2427E0; Wed, 17 Apr 2024 19:09:16 +0200 (CEST) Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by mails.dpdk.org (Postfix) with ESMTP id 0754140DDA for ; Wed, 17 Apr 2024 19:09:13 +0200 (CEST) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1e51398cc4eso54155155ad.2 for ; Wed, 17 Apr 2024 10:09:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373752; x=1713978552; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xYrob5Igy97bVmNali5cqA6qBua8Lq4/b+oiBXDUq0Y=; b=Wz6eDsikRSevaWdBLk/cmYfQCUadl1RiuympMEtFgharKXDNxAEOeMfvz7FRVYrhCS fMOVAX6iUfkA34BOA/PnHqdmba5+W00RHDRtgUt9+s3SVfkAOvv4u5ZMOoSi6lmyhrNY HnHiGrt4PbbUmSJrq2p6cJRysduLSCOrUsOCUF70i/pNdk0GOnkom8A+Cqo3Ms5dVwqg sb/NuTsLxKjM6s+RZpdXCIeXKfo1YPYwZEDYhhTfHU4/Z/6KfEnQdS9YWI0Q/N3WyRha ZSwPJndQ1s/sOu0VTkfwiTYi1xl1qStip823FcL7lCbThxRMSfxoiunRlt/Fesc/Ya1w xqpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713373752; x=1713978552; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xYrob5Igy97bVmNali5cqA6qBua8Lq4/b+oiBXDUq0Y=; b=rcMVSi3tSHsJDBELkhFCyP1Gn4z+vkHPK5kZ+FcHOW5wh5/TqTc9w1PMFFI+nKu2Mr a05tBuaS6HvmZr9jd5ShW/ssuyCeGLxLHFNAo65unjn3cGoGuRhXsNb7rOlVsH3l5JOp 2Cj6jmk3T3iHIAR0hm6WPwWPxsilVaCep43PTAdIguYeqM8IX0XA6JYiRIj1Oi0VW8hI h2rAHEzSB0NK9OdsXVUhRVAwNMGrNw1wMyIRWzrKh7bZAuSySX5fL8U6d/ySwDPmhgUJ E7NlQXncpUEIcbnctLr1RK3Zw6jv82Qx1fUGKmCV4zMYQuhQuVjbKypUtnXDvHQKiADz ZvPg== X-Gm-Message-State: AOJu0Yy2hkBH4g/ujwobjxfP0vkUubWu9C2Aob2UsjLk5GgDdS3HX8bR FqO6qwKDwaXnQUQscEjjEHncOEyphXFfNtErOLjm73QGZJAXb5PZVVRNMA2UlwPQz7/v5hJ4XJJ g X-Google-Smtp-Source: AGHT+IE0RtU9OFX2rxjrZ7ebkMLw9SdSOKhmowmXa8RqjGR+8z53vWNsyjeGPl9nK3Mmk+VTkLGaAw== X-Received: by 2002:a17:902:cecb:b0:1e4:51ab:fffb with SMTP id d11-20020a170902cecb00b001e451abfffbmr101069plg.25.1713373752194; Wed, 17 Apr 2024 10:09:12 -0700 (PDT) Received: from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 10:09:11 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v3 2/5] latencystats: handle fractional cycles per ns Date: Wed, 17 Apr 2024 10:07:24 -0700 Message-ID: <20240417170908.76701-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org> References: <0240408195036.182545-1-stephen@networkplumber.org> <20240417170908.76701-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The timer_hz is not always an integral number of nanoseconds. For examples, cycles per nanoseconds on my test system is 2.8. Fix by using floating point where needed. Signed-off-by: Stephen Hemminger --- lib/latencystats/rte_latencystats.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 9b345bfb33..fe8c3c563a 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -19,10 +19,10 @@ #define NS_PER_SEC 1E9 /** Clock cycles per nano second */ -static uint64_t +static float latencystat_cycles_per_ns(void) { - return rte_get_timer_hz() / NS_PER_SEC; + return (double)rte_get_timer_hz() / NS_PER_SEC; } RTE_LOG_REGISTER_DEFAULT(latencystat_logtype, INFO); @@ -89,8 +89,7 @@ rte_latencystats_update(void) for (i = 0; i < NUM_LATENCY_STATS; i++) { stats_ptr = RTE_PTR_ADD(glob_stats, lat_stats_strings[i].offset); - values[i] = (uint64_t)floor((*stats_ptr)/ - latencystat_cycles_per_ns()); + values[i] = floor(*stats_ptr / latencystat_cycles_per_ns()); } ret = rte_metrics_update_values(RTE_METRICS_GLOBAL, @@ -112,8 +111,7 @@ rte_latencystats_fill_values(struct rte_metric_value *values) stats_ptr = RTE_PTR_ADD(glob_stats, lat_stats_strings[i].offset); values[i].key = i; - values[i].value = (uint64_t)floor((*stats_ptr)/ - latencystat_cycles_per_ns()); + values[i].value = floor(*stats_ptr / latencystat_cycles_per_ns()); } } @@ -237,7 +235,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, glob_stats = mz->addr; rte_spinlock_init(&glob_stats->lock); - samp_intvl = app_samp_intvl * latencystat_cycles_per_ns(); + samp_intvl = floor(app_samp_intvl * latencystat_cycles_per_ns()); /** Register latency stats with stats library */ for (i = 0; i < NUM_LATENCY_STATS; i++) From patchwork Wed Apr 17 17:07:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139458 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA75543E94; Wed, 17 Apr 2024 19:09:32 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1929B427E6; Wed, 17 Apr 2024 19:09:18 +0200 (CEST) Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by mails.dpdk.org (Postfix) with ESMTP id D72B640DDD for ; Wed, 17 Apr 2024 19:09:13 +0200 (CEST) Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1e5aa82d1f6so6995055ad.0 for ; Wed, 17 Apr 2024 10:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373753; x=1713978553; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CUdEJ0A0hLHDbZgXocEGwXmdOHskbeMSv840NwkxBf8=; b=Q8X1BBhdGDbAbEzwy9L0w9OeZv/+QeAcdSUk8mPW4GNFKEU3OmKnsx03BDRD2DDJ0p 228MoVPWfv4tMB21kjkOkswu6EQKGjPl6k6qq4cOsNUe0M0jbVr+8HbB8MAljTKzxcjA gpQ+i5+OpEmZhtzxbV7bjh+UvWcm9qSOGmdscsBs2BMOfK6V/odqXOT/Xyewmu8EdVVl O3AjYZTZK2r36eic03oDAerwUbAo3gljsrzGAWTSI+xHWtYccNo46DASNV9SwzOfG/gv LVvE/JGf+WKQAoILhYtSTacsiORprdMNxy+JuNGnrjBPvHN5w2VjlNvvZnKPJZYHOrCv FUkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713373753; x=1713978553; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CUdEJ0A0hLHDbZgXocEGwXmdOHskbeMSv840NwkxBf8=; b=wuuWgPu28cb5oW8FQ4Oe9wban5CMEQsdUJZLaiFJmdM6cjI6LE3hIg/GKhW7zVRo9H jp97v293PnTUKndZSyHRyOz6OKccRGw/ZlBeUULP8eYp6chH8jZbbze781N0HeExwsoe CUhDrUWucomcBB/P1Uvb6cSlUHXVuMtrpiONMLUO9hIC4lmW3ia8StAkh9yduBYEaycp 2YWwpEuVXpSVGazEwNZa6HAirAi5ACUAoSZUv8sePtpBu1VDEDonz3rEaS9i4qhL7PgD B8J8few6nmY7WGqkbCQSlnh+YFLAd29uQS9HXLCiTo/Nb0vjDRk/+DpibZzJLsBlFXTo Z6Cg== X-Gm-Message-State: AOJu0Yylbu0O+eDvg4Bwz2gHce2F1793WrCBKH89X5BfXGVZhHCJ0amj 6VMSQNxlmQmPdWodXECGdbULRmH4WZb0vwxbROC1hW0BfCC8oo4gaDARYT7tulwHAL9blj26ijH P X-Google-Smtp-Source: AGHT+IHyuvHB2TQXiluzn8KUjrmxn8B0pYht7btHDY6XOsHi9g4RMJp1VU1Nh6yOeA6idNbXwTFLtg== X-Received: by 2002:a17:902:e883:b0:1e3:e249:41eb with SMTP id w3-20020a170902e88300b001e3e24941ebmr1466plg.32.1713373752936; Wed, 17 Apr 2024 10:09:12 -0700 (PDT) Received: from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 10:09:12 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v3 3/5] latencystats: do not use floating point Date: Wed, 17 Apr 2024 10:07:25 -0700 Message-ID: <20240417170908.76701-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org> References: <0240408195036.182545-1-stephen@networkplumber.org> <20240417170908.76701-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The cycle counts do not need to be stored as floating point. Instead keep track of latency in cycles, and convert to nanoseconds when read. Change Exponential Weighted Moving Average weight from .2 to .25 to avoid use of floating point for that. Signed-off-by: Stephen Hemminger Acked-by: Tyler Retzlaff --- lib/latencystats/rte_latencystats.c | 37 +++++++++++------------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index fe8c3c563a..11bd0ea4ae 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -47,10 +47,10 @@ static uint64_t timer_tsc; static uint64_t prev_tsc; struct rte_latency_stats { - float min_latency; /**< Minimum latency in nano seconds */ - float avg_latency; /**< Average latency in nano seconds */ - float max_latency; /**< Maximum latency in nano seconds */ - float jitter; /** Latency variation */ + uint64_t min_latency; /**< Minimum latency */ + uint64_t avg_latency; /**< Average latency */ + uint64_t max_latency; /**< Maximum latency */ + uint64_t jitter; /** Latency variation */ rte_spinlock_t lock; /** Latency calculation lock */ }; @@ -82,13 +82,12 @@ int32_t rte_latencystats_update(void) { unsigned int i; - float *stats_ptr = NULL; uint64_t values[NUM_LATENCY_STATS] = {0}; int ret; for (i = 0; i < NUM_LATENCY_STATS; i++) { - stats_ptr = RTE_PTR_ADD(glob_stats, - lat_stats_strings[i].offset); + const uint64_t *stats_ptr = RTE_PTR_ADD(glob_stats, + lat_stats_strings[i].offset); values[i] = floor(*stats_ptr / latencystat_cycles_per_ns()); } @@ -105,11 +104,10 @@ static void rte_latencystats_fill_values(struct rte_metric_value *values) { unsigned int i; - float *stats_ptr = NULL; for (i = 0; i < NUM_LATENCY_STATS; i++) { - stats_ptr = RTE_PTR_ADD(glob_stats, - lat_stats_strings[i].offset); + const uint64_t *stats_ptr = RTE_PTR_ADD(glob_stats, + lat_stats_strings[i].offset); values[i].key = i; values[i].value = floor(*stats_ptr / latencystat_cycles_per_ns()); } @@ -156,15 +154,8 @@ calc_latency(uint16_t pid __rte_unused, void *_ __rte_unused) { unsigned int i; - uint64_t now; - float latency; - static float prev_latency; - /* - * Alpha represents degree of weighting decrease in EWMA, - * a constant smoothing factor between 0 and 1. The value - * is used below for measuring average latency. - */ - const float alpha = 0.2; + uint64_t now, latency; + static uint64_t prev_latency; now = rte_rdtsc(); @@ -186,8 +177,7 @@ calc_latency(uint16_t pid __rte_unused, * Reference: Calculated as per RFC 5481, sec 4.1, * RFC 3393 sec 4.5, RFC 1889 sec. */ - glob_stats->jitter += (fabsf(prev_latency - latency) - - glob_stats->jitter)/16; + 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) @@ -198,9 +188,10 @@ calc_latency(uint16_t pid __rte_unused, * 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 += - alpha * (latency - glob_stats->avg_latency); + glob_stats->avg_latency += (latency - glob_stats->avg_latency) / 4; prev_latency = latency; } rte_spinlock_unlock(&glob_stats->lock); From patchwork Wed Apr 17 17:07:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139459 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5606A43E94; Wed, 17 Apr 2024 19:09:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A9E174281D; Wed, 17 Apr 2024 19:09:19 +0200 (CEST) Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by mails.dpdk.org (Postfix) with ESMTP id 80A4D427D9 for ; Wed, 17 Apr 2024 19:09:14 +0200 (CEST) Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1e5b6e8f662so44721795ad.0 for ; Wed, 17 Apr 2024 10:09:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373754; x=1713978554; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dONGRsVr9t79ONbmDKjHuRqpBb+5qzOoIok5RkRuGXE=; b=fdw5Hb9epOUcsGKD/PO8HmoOOhFHr9ZrdiGaTVtfocCtyMx/KciZuVh0r9Ad1mDs9P hGC0HlqtnEnII7gTXJONZO3jg8yjJUb6so7FTEFcOPM2UGkjcqp61JXevjgx5NKKdGom 1LSQFIFPtQ8RksCrddnwAqYXaLrjHMAF7s1bKPDlm1jl2dFRn0quNZJTQFOl/e0ip0rS MTdHY7pwSvJpEln9iCUaahM+R4rPOD5rbpfGQdzta2b9z05CP1X5CGIRIWY0uJGZJCA7 KY6g58nw33maojXF0/ycZaNmuYpJW2JdJvZShtitHOMuNxpnrU+zrjhiGA1ygu0jL1tH 38tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713373754; x=1713978554; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dONGRsVr9t79ONbmDKjHuRqpBb+5qzOoIok5RkRuGXE=; b=cxVfnqn5gcgcG90CWFXkkriAsAtig4Mhq5gGG5zZ56hxYSCbyFm5g0KTugFCxWPuhY noPOYByPG7ViRXeUA/Q8QPEwGjsJS5z29xgbjmqT4G5IFYe7W/gNOBN7mJ7iUOGCv1Es pqdW082hrdi7jyLoLIfeuudrQzhan4pjdh1wYQVhSk2jzPcdpDrpQeh9odjfjHeLxYHu vbd+hjWoPoCoBkuxlMk5TDhWPlco0SILeoAfdEICo8qvaWVgGdtkwJEK8olEOdkOKlNX upPWKwT2LN+O9Ha/age0Aw4b2qlEI61h8Qx/4T/6gou3lhP8Rs56sHGQkDlhr/qhIG6V M1UQ== X-Gm-Message-State: AOJu0YzMGHTWWxbKxpMkXwzY5+B77CKt69fUU+YCnwkRAjMOrwssQW+q OyZHuOz6ZkciNLBbD+PyDZ0osY17XSLZFob8VIuxxhdD5wWvWRrGbok43QNOjJHmcSWmYw3GZ4p C X-Google-Smtp-Source: AGHT+IHqRU+AVpdZbh8EhvI7ClewaJbOdtZk3JOmKt0oGDDvC4SgkFA3NlVa0izH6hc8I9kpzWeLRg== X-Received: by 2002:a17:902:7b82:b0:1e6:413:9df1 with SMTP id w2-20020a1709027b8200b001e604139df1mr71465pll.41.1713373753773; Wed, 17 Apr 2024 10:09:13 -0700 (PDT) Received: from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 10:09:13 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v3 4/5] latencystats: fix log messages Date: Wed, 17 Apr 2024 10:07:26 -0700 Message-ID: <20240417170908.76701-5-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org> References: <0240408195036.182545-1-stephen@networkplumber.org> <20240417170908.76701-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org All messages that because of an error should be at log level NOTICE or above. Do not break log messages across lines. Signed-off-by: Stephen Hemminger Acked-by: Tyler Retzlaff --- lib/latencystats/rte_latencystats.c | 30 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 11bd0ea4ae..62038a9f5d 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -235,7 +235,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, latency_stats_index = rte_metrics_reg_names(ptr_strings, NUM_LATENCY_STATS); if (latency_stats_index < 0) { - LATENCY_STATS_LOG(DEBUG, + LATENCY_STATS_LOG(ERR, "Failed to register latency stats names"); return -1; } @@ -255,7 +255,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { - LATENCY_STATS_LOG(INFO, + LATENCY_STATS_LOG(NOTICE, "Error during getting device (port %u) info: %s", pid, strerror(-ret)); @@ -267,18 +267,18 @@ rte_latencystats_init(uint64_t app_samp_intvl, cbs->cb = rte_eth_add_first_rx_callback(pid, qid, add_time_stamps, user_cb); if (!cbs->cb) - LATENCY_STATS_LOG(INFO, "Failed to " - "register Rx callback for pid=%d, " - "qid=%d", pid, qid); + LATENCY_STATS_LOG(NOTICE, + "Failed to register Rx callback for pid=%u, qid=%u", + pid, qid); } for (qid = 0; qid < dev_info.nb_tx_queues; qid++) { cbs = &tx_cbs[pid][qid]; cbs->cb = rte_eth_add_tx_callback(pid, qid, calc_latency, user_cb); if (!cbs->cb) - LATENCY_STATS_LOG(INFO, "Failed to " - "register Tx callback for pid=%d, " - "qid=%d", pid, qid); + LATENCY_STATS_LOG(NOTICE, + "Failed to register Tx callback for pid=%u, qid=%u", + pid, qid); } } return 0; @@ -299,7 +299,7 @@ rte_latencystats_uninit(void) ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { - LATENCY_STATS_LOG(INFO, + LATENCY_STATS_LOG(NOTICE, "Error during getting device (port %u) info: %s", pid, strerror(-ret)); @@ -310,17 +310,17 @@ rte_latencystats_uninit(void) cbs = &rx_cbs[pid][qid]; ret = rte_eth_remove_rx_callback(pid, qid, cbs->cb); if (ret) - LATENCY_STATS_LOG(INFO, "failed to " - "remove Rx callback for pid=%d, " - "qid=%d", pid, qid); + LATENCY_STATS_LOG(NOTICE, + "Failed to remove Rx callback for pid=%u, qid=%u", + pid, qid); } for (qid = 0; qid < dev_info.nb_tx_queues; qid++) { cbs = &tx_cbs[pid][qid]; ret = rte_eth_remove_tx_callback(pid, qid, cbs->cb); if (ret) - LATENCY_STATS_LOG(INFO, "failed to " - "remove Tx callback for pid=%d, " - "qid=%d", pid, qid); + LATENCY_STATS_LOG(NOTICE, + "Failed to remove Tx callback for pid=%u, qid=%u", + pid, qid); } } From patchwork Wed Apr 17 17:07:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139460 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A65D343E94; Wed, 17 Apr 2024 19:09:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2D911427DA; Wed, 17 Apr 2024 19:09:21 +0200 (CEST) Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by mails.dpdk.org (Postfix) with ESMTP id 5EE0E427DD for ; Wed, 17 Apr 2024 19:09:15 +0200 (CEST) Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1e2178b2cf2so52764335ad.0 for ; Wed, 17 Apr 2024 10:09:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373754; x=1713978554; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eWXQpRBTA/1MVLUFmfw6CtiM8QVScfWJV0ddb94LcXQ=; b=QiL8o1LSgxDf8HG2P9ai+EGxvW7zLTeYenTC/oLRWsIG+/vAm0SFFDbtuAR5RfnrsJ wol4eGu4JX0ZBriIAJt6gUXlTCFmr59eshqBiXZK4LHdTahDJ0yz/3sJEX5x31G4p+Ji 2ULy6ZBm4enctbC2URKfgJKoGAQe2jBXeRr1XKNKbFgXQaMLLvv8N75Naqji5OS45YlC jvchlyCl1UbBjbSbShZEUvfP6E3O9pgTe2a24C4gdCOfh/Ez9KVfhSERh+/vNmcLKAg3 UWT37M6xRwEM2fHBC+VnaiYnBTBWzosUkF7NO9MKVPeftlRQbsWRNndGQ5EQkTTlymFg /MBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713373754; x=1713978554; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eWXQpRBTA/1MVLUFmfw6CtiM8QVScfWJV0ddb94LcXQ=; b=hKRNuiheKptUKqXXjEuBg6/25c+M1jNWtrFo4l/KxneYNGyp0dQ+Wot69pXF3h+XTU nH0sO+O2wSLo8qFSZeuTlPXemp8m579k6KOim4XtLkZAIlj0x0fvzflxOPYSnIgk+eTE fnDFHJRjAZV2M3/HNoiZ3bVR8tMCa7zBuLu1DRa0QKNhHPWTZkk3hvmFkstIj5sQDNAo t8Wc8uZvWK8FqqW9wmXB492ogFNSlrfxWiMMYEmUJudFA5mUkqRjgep+uRDzTuVEKLB5 RMezhoLl/YI50ELElZ2rSdz4CKSSYwFmyUodf4z6eksSriDOwaT355hAcRrgCjZu0YLJ Djtg== X-Gm-Message-State: AOJu0YyBK3orujOO/vipnIf1wNjNBn9BYTiIDbtJu0v4XQT7VucvxWKv yLYHvVCAUqsOBOtTWBlnSKvI6D/pnoMWxp6bAthYKS/2aK4YbaK127u3vog4SwYhTbxExQ/ZjeF P X-Google-Smtp-Source: AGHT+IHBUjviD11CWpvmlRw+m2IlxLIhjty70mTBAhysOJrWd06EwMl42h5Kx3fz8406cagdUcZqQw== X-Received: by 2002:a17:902:e807:b0:1e7:d482:9e07 with SMTP id u7-20020a170902e80700b001e7d4829e07mr144097plg.12.1713373754501; Wed, 17 Apr 2024 10:09:14 -0700 (PDT) Received: from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 10:09:14 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v3 5/5] latencystats: include file cleanup Date: Wed, 17 Apr 2024 10:07:27 -0700 Message-ID: <20240417170908.76701-6-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240417170908.76701-1-stephen@networkplumber.org> References: <0240408195036.182545-1-stephen@networkplumber.org> <20240417170908.76701-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Include what is used here. Signed-off-by: Stephen Hemminger --- 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 #include +#include +#include +#include -#include -#include -#include +#include #include +#include +#include #include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include #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);