From patchwork Mon Apr 22 15:21:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139612 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 3FF3F43EDB; Mon, 22 Apr 2024 17:23:53 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 095E0409FA; Mon, 22 Apr 2024 17:23:51 +0200 (CEST) Received: from mail-il1-f170.google.com (mail-il1-f170.google.com [209.85.166.170]) by mails.dpdk.org (Postfix) with ESMTP id 9CA7B40265 for ; Mon, 22 Apr 2024 17:23:47 +0200 (CEST) Received: by mail-il1-f170.google.com with SMTP id e9e14a558f8ab-36c00924fc1so12998825ab.2 for ; Mon, 22 Apr 2024 08:23:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799427; x=1714404227; 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=1iMXXGjOoTwNd9pOuzO/FsZahJFsBN6I19d6MX2wr/Q=; b=Mzvff90E265up4jZ4XcI4E+lBam5XFhclXsYYqAfpzCumz+OMcoTPkgeeqBDoQpI+F oKlsTUY1riL5gwY/bFbV2P310G0Ypfiv3yo9ZhYE2ro/4BY3yW0Z2v4OTLfToXjb2wCu lq6fZ+ARS9gIEKC7aAQu7J+Cz4RzGK3kJfSKsxqHAKmhTighQOD7ty9LG8tmWg2KVprl IPk4XvgTO++P4xrxv6JIGpQdDZqVyISoupnyDrm0iK+qoU7zbqUHORdcss1E47mn1ewl UN8xwDa5CpYc/rX6Lj0EyiV4T44wqAwyuz9kRp3OEbWOub4s7bLTBjuW+GN82MpJqtE8 S2og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799427; x=1714404227; 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=1iMXXGjOoTwNd9pOuzO/FsZahJFsBN6I19d6MX2wr/Q=; b=HpQT20p8vTMGuUkG17ylo4nrcZHBXFxteH5z+NSsrLpao5aN/B7PQL4f8MXFmsXjy5 xZFiR7Y/u/quHCjwugJvFZ4QRw8c1IRLfLdQ7BJbW4SYUBLLhSKSxoqh574PJ2nZnZsM mWzUp70qiDJ20obm/j5gwtxyjXh0AXs+FSMtWE0ZzO576uhjCrexlU4RKjoJTYPQ6wEF b/0IIthhWSW7O6k8Og+uxZ6j5EV5QZY9WJcAStFTasMrhKZ3JM02ffWJsfsbohf03lWk VoUNNLeemkg9opKeABEaTIWhBIDcU2OTe141KBdeG43AM4ZAcB6OMs5LMJgpLn2ycr5b CjFQ== X-Gm-Message-State: AOJu0YxK+P3lilotUJGAwRgp0cjXdfgRhYsG0P33DihAkk5q9WqONSNI lDv0zUCd9PlnWvZE0s1hasItRYADzktG89nJ42aKFEEhZYoEO0T9hdBNh/04xu7cNiC458dsR/d G X-Google-Smtp-Source: AGHT+IF6FYf/p7LJCAitcrAQ2HtL9rElVICoKZQaNWbqFb6jFumIVMcO5FpnmiS8rI4XWwMB0wGQlQ== X-Received: by 2002:a05:6e02:1609:b0:368:a724:f757 with SMTP id t9-20020a056e02160900b00368a724f757mr15310076ilu.6.1713799426951; Mon, 22 Apr 2024 08:23:46 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:46 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , =?utf-8?q?Morten_Br?= =?utf-8?q?=C3=B8rup?= , Tyler Retzlaff , Reshma Pattan Subject: [PATCH v5 1/9] latencystats: replace use of VLA Date: Mon, 22 Apr 2024 08:21:31 -0700 Message-ID: <20240422152336.147553-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 Mon Apr 22 15:21:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139613 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 664F943EDB; Mon, 22 Apr 2024 17:23:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 84273406B8; Mon, 22 Apr 2024 17:23:52 +0200 (CEST) Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by mails.dpdk.org (Postfix) with ESMTP id E0655406B7 for ; Mon, 22 Apr 2024 17:23:48 +0200 (CEST) Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-6ed20fb620fso3771960b3a.2 for ; Mon, 22 Apr 2024 08:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799428; x=1714404228; 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=ocyY0DhAG7lN0AWqTRQZr22OaiU0tcYLefQmVVvcZvc=; b=CD8udf6cPqQAUrskSbGzVcMt//Q3aGmSFqZWrB5SZnFTHsfvrLXx8Nah2sdJ881DQi 6CRr0ZLKaEE8pcffqjPM0O2A0BFulGOYkkFyixkbrNGzFsMpRf2z7rYFGOvl8odtS4er TR+WCPhFpcPfgWzyCz6CBnipK8R4FsARkQCt1r3jtUYgB4PZuRG4jbFwSN/a+HxfdfcZ vPobNpkcTFmcMkwxg9PK5PtMN+IUz8+ZjALTpq38ZnV+ZuC19WVsX1/XUHzEZczAicNN aIWsWm4x1vw+bXAIE+H6QLnGsB/uqfb/Ut2bD1W1945sVH+xuZZhvh+imFAcGPT0iVuH IAwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799428; x=1714404228; 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=ocyY0DhAG7lN0AWqTRQZr22OaiU0tcYLefQmVVvcZvc=; b=Hf0V4I7yXHU3tNVkBY9ye4Fo1bODfvI9Ej9qmXSDrDlW2q4Z+lz4Q61Lmfp1QI08AJ AWYYX3Vo1RGk8fgJG5ggaaTJrh13zwAgJ+VxlxBO46isAqcye5KRZVG6VApwySGyrK4+ bGqLmqsb/E3eU6SQJoOfJNtprjwC28uHar4guh58Hd2PulWXMPUbsl+AHK9HJDHdlgu/ uA2cjmskS+o12XPqJulj3SYaOrkC6QyAHsH5iVsjS2Yw7DydOKFlv+oZx30deZn9YNvl /+BAu4ASuGp/RcS/xHk4Ey9V47cNZ1zQXbRzuGr50pxm+pLJxXxmO4b1XJjK88BWl1Hg ygZA== X-Gm-Message-State: AOJu0YxBPKBCNS2dfs1L2NTmBF3wRagM3qgXWHsB1SSeNZY9tS3MKqhu ljAmtLDIfYya0rIV/n5ClPDN3VrS9f+cq0gBL/nwz8jcSbTAUygW2qnKAgQ/TiNWPkv8+NYBQt+ q X-Google-Smtp-Source: AGHT+IHf/IPgv7Fr7fG1/16WlMz7j3a6w8IGahgPyD7+3uV5lNlJRQ30BKNIt1/u7Az2yknaMK5Xbw== X-Received: by 2002:a05:6a20:c70e:b0:1a9:c214:b7d with SMTP id hi14-20020a056a20c70e00b001a9c2140b7dmr10458338pzb.2.1713799428106; Mon, 22 Apr 2024 08:23:48 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:47 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 2/9] latencystats: handle fractional cycles per ns Date: Mon, 22 Apr 2024 08:21:32 -0700 Message-ID: <20240422152336.147553-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 TSC frequency 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 and calculate value once. Signed-off-by: Stephen Hemminger --- lib/latencystats/rte_latencystats.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 9b345bfb33..3152256066 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -18,12 +18,7 @@ /** Nano seconds per second */ #define NS_PER_SEC 1E9 -/** Clock cycles per nano second */ -static uint64_t -latencystat_cycles_per_ns(void) -{ - return rte_get_timer_hz() / NS_PER_SEC; -} +static double cycles_per_ns; RTE_LOG_REGISTER_DEFAULT(latencystat_logtype, INFO); #define RTE_LOGTYPE_LATENCY_STATS latencystat_logtype @@ -89,8 +84,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 / cycles_per_ns); } ret = rte_metrics_update_values(RTE_METRICS_GLOBAL, @@ -112,8 +106,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 / cycles_per_ns); } } @@ -235,9 +228,11 @@ rte_latencystats_init(uint64_t app_samp_intvl, return -ENOMEM; } + cycles_per_ns = (double)rte_get_tsc_hz() / NS_PER_SEC; + glob_stats = mz->addr; rte_spinlock_init(&glob_stats->lock); - samp_intvl = app_samp_intvl * latencystat_cycles_per_ns(); + samp_intvl = (uint64_t)(app_samp_intvl * cycles_per_ns); /** Register latency stats with stats library */ for (i = 0; i < NUM_LATENCY_STATS; i++) From patchwork Mon Apr 22 15:21:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139614 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 D5F7043EDB; Mon, 22 Apr 2024 17:24:05 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3591E40A77; Mon, 22 Apr 2024 17:23:54 +0200 (CEST) Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by mails.dpdk.org (Postfix) with ESMTP id B1D9D406B7 for ; Mon, 22 Apr 2024 17:23:49 +0200 (CEST) Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1e8fce77bb2so20279565ad.0 for ; Mon, 22 Apr 2024 08:23:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799429; x=1714404229; 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=5HM/cXHYCXkBcg/q7AXiLDL3B7YhqPX/DI3zJV9tOpE=; b=boWrbkMEXIuPsSrNv0r4HONNSJP/FSIFuTjM8B4RuZ6nxtEdA0FePocg+LCytWUej+ x/+SL7dbHSTqfFMvT4ogHB6sRTjmf2DH+ws01FlX6Lqz5oLJvXvOYi+Lnq4tp7z0OMyA ivMGZD0AKqNk5Ju12r2LU6ptXKQY/eGuUtz3wi4Y9gNsTBKhyskXaGWtDnbbMETMtTic vWGZDVWCOPRQMfw5/mdebb9NUqACMOUhGPqYYZLBAPffzeYgphzUesxmMaU7NadeUGS0 wUqj5IAPlRUs1xTo9G4unDPZJA1qsBVB/qB2R0AGWbMm/xpBbe1jguVOq6QsYRE/UI7I gsiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799429; x=1714404229; 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=5HM/cXHYCXkBcg/q7AXiLDL3B7YhqPX/DI3zJV9tOpE=; b=ESqa8AbI3wQ7kfBFrXfA3em5+1xI20CJ9yW8sPzL5FTVrm0IxLwAuwJiki13WfNcZb +Cw5trioVlr36h/Gq8b3sWGql/zkwYoHKlHSyysAGR4lu9GrWbY1ThBwV+pdIxMPASfB E7ezza4MaxUXiVjtJoaeTSSr8yb8yRvqObghdiMmcuCvZatJTTjp4eiStC6293p0pdjp 6RhRbQBG0g9yzzxm02kdMU8F1GZkzRX9bml0h2/AUzHqc7lOFp+n/j2/wZQWnetWDLoN gdi7ygmSiQKlOTQySks3ZbA7wttJjEP4qXDPEySQH27/S0FcgN5W2jktlH2499J/pXo1 KaFg== X-Gm-Message-State: AOJu0Yz0jaRzk6TxU+8RXNwSnsrkBz9eI7kgcDr4rFQfRF1rZTNz7Xfy TwG+al5Nn7CKPs+x4Ae5Ce9GuRy4O81TQKwUL0fh8y+UXgWltEFFn9DzPDi7LzwYqDThfJYFsYI I X-Google-Smtp-Source: AGHT+IFf+TPWXIsHplFtuENczBwtefH0cCac8ErVNWe4A8iQIE9HJlWyTYcGr/b84zdNly0za1+++Q== X-Received: by 2002:a17:902:e742:b0:1ea:cc:b59e with SMTP id p2-20020a170902e74200b001ea00ccb59emr425712plf.19.1713799428904; Mon, 22 Apr 2024 08:23:48 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:48 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Reshma Pattan Subject: [PATCH v5 3/9] latencystats: do not use floating point Date: Mon, 22 Apr 2024 08:21:33 -0700 Message-ID: <20240422152336.147553-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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. Use scaled math with exponential Weighted Moving Average weight of .25 to avoid use of floating point for that. The average latency took too long to "warm up". Do what RFC 6298 suggests and initialize on first sample. Signed-off-by: Stephen Hemminger Acked-by: Tyler Retzlaff Acked-by: Morten Brørup --- lib/latencystats/rte_latencystats.c | 128 ++++++++++++++++------------ 1 file changed, 73 insertions(+), 55 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 3152256066..2140ab87c4 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -4,6 +4,7 @@ #include +#include #include #include #include @@ -41,11 +42,14 @@ static uint64_t samp_intvl; static uint64_t timer_tsc; static uint64_t prev_tsc; +#define LATENCY_AVG_SCALE 4 +#define LATENCY_JITTER_SCALE 16 + 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 */ }; @@ -61,31 +65,38 @@ static struct rxtx_cbs tx_cbs[RTE_MAX_ETHPORTS][RTE_MAX_QUEUES_PER_PORT]; struct latency_stats_nameoff { char name[RTE_ETH_XSTATS_NAME_SIZE]; unsigned int offset; + unsigned int scale; }; static const struct latency_stats_nameoff lat_stats_strings[] = { - {"min_latency_ns", offsetof(struct rte_latency_stats, min_latency)}, - {"avg_latency_ns", offsetof(struct rte_latency_stats, avg_latency)}, - {"max_latency_ns", offsetof(struct rte_latency_stats, max_latency)}, - {"jitter_ns", offsetof(struct rte_latency_stats, jitter)}, + {"min_latency_ns", offsetof(struct rte_latency_stats, min_latency), 1}, + {"avg_latency_ns", offsetof(struct rte_latency_stats, avg_latency), LATENCY_AVG_SCALE}, + {"max_latency_ns", offsetof(struct rte_latency_stats, max_latency), 1}, + {"jitter_ns", offsetof(struct rte_latency_stats, jitter), LATENCY_JITTER_SCALE}, }; #define NUM_LATENCY_STATS (sizeof(lat_stats_strings) / \ sizeof(lat_stats_strings[0])) -int32_t -rte_latencystats_update(void) +static void +latencystats_collect(uint64_t values[]) { unsigned int i; - float *stats_ptr = NULL; - uint64_t values[NUM_LATENCY_STATS] = {0}; - int ret; + const uint64_t *stats; for (i = 0; i < NUM_LATENCY_STATS; i++) { - stats_ptr = RTE_PTR_ADD(glob_stats, - lat_stats_strings[i].offset); - values[i] = floor(*stats_ptr / cycles_per_ns); + stats = RTE_PTR_ADD(glob_stats, lat_stats_strings[i].offset); + values[i] = floor(*stats / (cycles_per_ns * lat_stats_strings[i].scale)); } +} + +int32_t +rte_latencystats_update(void) +{ + uint64_t values[NUM_LATENCY_STATS]; + int ret; + + latencystats_collect(values); ret = rte_metrics_update_values(RTE_METRICS_GLOBAL, latency_stats_index, @@ -97,16 +108,16 @@ rte_latencystats_update(void) } static void -rte_latencystats_fill_values(struct rte_metric_value *values) +rte_latencystats_fill_values(struct rte_metric_value *metrics) { + uint64_t values[NUM_LATENCY_STATS]; unsigned int i; - float *stats_ptr = NULL; + + latencystats_collect(values); for (i = 0; i < NUM_LATENCY_STATS; i++) { - stats_ptr = RTE_PTR_ADD(glob_stats, - lat_stats_strings[i].offset); - values[i].key = i; - values[i].value = floor(*stats_ptr / cycles_per_ns); + metrics[i].key = i; + metrics[i].value = values[i]; } } @@ -151,15 +162,9 @@ 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; + static bool first_sample = true; now = rte_rdtsc(); @@ -170,32 +175,45 @@ 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 += (fabsf(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 (unlikely(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 - */ - glob_stats->avg_latency += - alpha * (latency - glob_stats->avg_latency); + glob_stats->avg_latency = latency * 4; + /* start ad if previous sample had 0 latency */ + glob_stats->jitter = latency / LATENCY_JITTER_SCALE; + } 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. Jitter is scaled by 16. + * Reference: Calculated as per RFC 5481, sec 4.1, + * RFC 3393 sec 4.5, RFC 1889 sec. + */ + long long delta = prev_latency - latency; + glob_stats->jitter += llabs(delta) + - glob_stats->jitter / LATENCY_JITTER_SCALE; + + 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, avg_latency is scaled by 4. + */ + glob_stats->avg_latency += latency + - glob_stats->avg_latency / LATENCY_AVG_SCALE; + } + prev_latency = latency; } rte_spinlock_unlock(&glob_stats->lock); From patchwork Mon Apr 22 15:21:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139615 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 0B2BB43EDB; Mon, 22 Apr 2024 17:24:12 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B167540A81; Mon, 22 Apr 2024 17:23:55 +0200 (CEST) Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by mails.dpdk.org (Postfix) with ESMTP id 7690C406B7 for ; Mon, 22 Apr 2024 17:23:50 +0200 (CEST) Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-6ed01c63657so3957517b3a.2 for ; Mon, 22 Apr 2024 08:23:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799429; x=1714404229; 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=i3+egRrx4JI9E2plWMu17CiEVJ7H/AoXfNFkJLwKwko=; b=TP7bnMRYSz40M7kq+oseGHymVGMlj5EdkbpXL3iprMpj3RkBIfRJnj+Wl/67ZoHD4x lexv3H+w28G7TLyeMq0pWS6dV8FXYM3YsX3e5/IB8aDkeOWdD7rWaWQfkppAdqWCEK+w uwLysugcC+JZoVIHAX+jY0Q2/wSxsNDrmkF8Dibo479vrmHU9sZrtK/OYyDAcRxm4TXT 7oa1NlOuJYvUFIsx2gGTTS05lHmMikpIRCwgvNkDHHr8GoOQFQOl+3ysk47aqu2D8Kdn rH6ypanAQXERKIHVOoX+xu3eR2kKUIotXWRshkqVt/W7NsCt1UYPQl0WC2LkQtZA5AaE NDTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799429; x=1714404229; 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=i3+egRrx4JI9E2plWMu17CiEVJ7H/AoXfNFkJLwKwko=; b=nTvpcwUkJyPMgprkCu4Ffq7hnpA/dy55aLHxbJeUDQ4dvVNcMSp1qZd2bUBINH1oK7 l6x+MoEZyuIly38RubZemOOCbJy4BkQlZcqEOsL75ZSg7EnWUPXKISOzgN3LVoFHEBZi V8UTPPK1pxi5RRTDjItqM/yD6rpeZOkE4PmtRdBS5seRRYS5luAfUqSNmFvmQ9jNnYW4 /6x0SjjvgWyfX8CcPaNExn389n2xuqyXaO2RX7xc3fbDtwoEwDc3IkflQOGLB0hGeFzt fSg84yBmnjCTheSMWsMqmHKwF/DcTKqN0ausQiSrVGpLYfivihe7MPadu7jNzGal6rwW MJvA== X-Gm-Message-State: AOJu0Yye4IdcOH3ZkF9q6l4tpFf0z9BM9gNLEwgUKamud3+6uhISKjW1 m5pPPc1BtNrWmwwn5CaOwv5Vn2slcDQnnmg90gPPMQNuVIKNKLttDzsEB9fVhN0qp/scDSowJVn e X-Google-Smtp-Source: AGHT+IHHow9ot34WXg8/KPsgx1WBiJluvPuRXlUK5SuHpOa8GX9Fu7iBb6aXzq6KVRUQyD8mym1qOA== X-Received: by 2002:a05:6a20:6a1f:b0:1a9:b2a6:1d23 with SMTP id p31-20020a056a206a1f00b001a9b2a61d23mr11233977pzk.20.1713799429649; Mon, 22 Apr 2024 08:23:49 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:49 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Tyler Retzlaff , Reshma Pattan Subject: [PATCH v5 4/9] latencystats: fix log messages Date: Mon, 22 Apr 2024 08:21:34 -0700 Message-ID: <20240422152336.147553-5-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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. Reword message for the case where getting info about a port fails and it is skipped. Signed-off-by: Stephen Hemminger Acked-by: Tyler Retzlaff --- lib/latencystats/rte_latencystats.c | 35 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 2140ab87c4..c0ac60134f 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -259,7 +259,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; } @@ -279,8 +279,8 @@ rte_latencystats_init(uint64_t app_samp_intvl, ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { - LATENCY_STATS_LOG(INFO, - "Error during getting device (port %u) info: %s", + LATENCY_STATS_LOG(NOTICE, + "Can not get info for device (port %u): %s", pid, strerror(-ret)); continue; @@ -291,18 +291,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; @@ -323,10 +323,9 @@ rte_latencystats_uninit(void) ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { - LATENCY_STATS_LOG(INFO, - "Error during getting device (port %u) info: %s", + LATENCY_STATS_LOG(NOTICE, + "Can not get info for device (port %u): %s", pid, strerror(-ret)); - continue; } @@ -334,17 +333,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 Mon Apr 22 15:21:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139616 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 C6E6C43EDB; Mon, 22 Apr 2024 17:24:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CAC4640A8A; Mon, 22 Apr 2024 17:24:02 +0200 (CEST) Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by mails.dpdk.org (Postfix) with ESMTP id 4712B40A6D for ; Mon, 22 Apr 2024 17:23:51 +0200 (CEST) Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-6eff2be3b33so4389822b3a.2 for ; Mon, 22 Apr 2024 08:23:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799430; x=1714404230; 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=NLcIhuBFAGnFAgSH7Iuy+BgoNw13rLAjei8W7B5mHkc=; b=B3Z7Ryr2SxaU+G1C8cuhv6FQQHU15GYAqfwwNtVUZz39F8PS7Dh0yB/GKZ+H5OpaNO aOQU2MWh2xRrGhZrM+i7hcolFVrarbp8qae2LI/6/c77DAALCY+Dv3YuLkhlUq4GL56W IfhzBjddGEx9KFZV+Rvt7iqiZQNRXLrOifaMmaX6So6RLG3w9H+Y9ByX/DANM61ZAGfB 9F0ZB8rSl3F/f3DHfZjp20bQXuRzIukZK3vOmyWEVRB8J+5w8bsy08vfEzEWWUJ/vXOv YeJ8eWcAwXoMlfLHopi348xMusm6dGJwSAGFf6THQwrFe1EwY/lxBX4ODAuUVk4ejM/G ZXOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799430; x=1714404230; 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=NLcIhuBFAGnFAgSH7Iuy+BgoNw13rLAjei8W7B5mHkc=; b=c5/1Ek8Cp6RgiI1lflLi086xg9TKSfX+Soav8hiaK0LXd1j9knaqUmEzY4v6oOn4WR Stu6+vz8L5ETgxM7AEAKgTj/g1UkrZVPW7cSdGhsteM4MsKbzwO8mwNWpmorgLEw0DSE f7b7csfeMqemXG+4O8zI6RluFyviXPkMXMVl8QwjeLlZ+9FDZgiFPRuBCKuf6MQZheN4 bXAFBcb7KqoTl9ZGx3z3G14wml8Ty/yua6B5fyGIkMzlKYUyZU6ToKB0arJPhtZD6kzk K/EcdVKeo1TB4B4+TWx5uWYmjMmMRglWdhOHwsDW2PpUzHenuvKCnUTAe3o5EYup7reE 0ecA== X-Gm-Message-State: AOJu0YzkMRQYJ97a4m7wgiXYsIzI96Yjw2hqBVrz6KzOB5+mHYjXLVZL UYM4ShAx9Ycu389IMy322BJ3VYXgBRehzQ8A1aFkv2UjqXn5iJVI51xNQOnfoTwc6ekqVy6xLID v X-Google-Smtp-Source: AGHT+IFCL0ypByIorfbQdhs05DfYLAcMznXZXAuRHLQOuIH/+EJXZwshxx3LwcGpDYhWFyQnXL13RA== X-Received: by 2002:a05:6a20:c909:b0:1ad:22bd:d6d8 with SMTP id gx9-20020a056a20c90900b001ad22bdd6d8mr4113012pzb.4.1713799430498; Mon, 22 Apr 2024 08:23:50 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:50 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 5/9] latencystats: update include files Date: Mon, 22 Apr 2024 08:21:35 -0700 Message-ID: <20240422152336.147553-6-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index c0ac60134f..bd8fde2f0c 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -2,17 +2,26 @@ * 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 #include "rte_latencystats.h" From patchwork Mon Apr 22 15:21:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139617 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 17A1C43EDB; Mon, 22 Apr 2024 17:24:27 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 37A3240DCE; Mon, 22 Apr 2024 17:24:04 +0200 (CEST) Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by mails.dpdk.org (Postfix) with ESMTP id 0F48B406B8 for ; Mon, 22 Apr 2024 17:23:52 +0200 (CEST) Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-6eff9dc1821so4481210b3a.3 for ; Mon, 22 Apr 2024 08:23:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799431; x=1714404231; 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=Tbyh2BBDJylB3AYKzLsyjZ08dTesXypgKi0n1sS96uE=; b=ZAlamSzCyd37rEXw7BMa9g8WX7111M6ZNdaJ3MStE3ZZZk1EeVxSoXvwE4apsHEixs pJT+nAc5jipIdMRpe3Uup/k+g4TdQhkBetmG8pcPR6ikRMHgQOZJR8ANefhFM/4wOptJ q6zeC01wnhGiZPvnQ5UcKnOLANEmVdIuCSl3E2Sfj1qH/DYDPbia0xfBjV359qzOc4tW UpE+xdQ9V4r6ibiiL4CkWNJYLhPlzU4W5m/qIbOWvjMBsalxqJbIJxoY9OH0IOSZScWv KEqG1XlIJyMg4wmcjPo8DH36fqH2sP5y/bnO/PkPnuCQqZY6leJbbXo/NvvBWesuIiyq nFxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799431; x=1714404231; 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=Tbyh2BBDJylB3AYKzLsyjZ08dTesXypgKi0n1sS96uE=; b=vUXaNycENxVATQKe0nFoXGQ1g+iJqh0vVBEVbGFzZpWNs42dt0/YvP+Jnxb+7M87Lj nOpK+LokhcrCjZf8pCTrgN8+v6zMxtt9RttZp8TvivHjnPwFyHrX6hycAQYJyqyuWych 1O/KE5c2Y9qV4GSCDQNBmjyHnVwvjFj1iFFF4X8Uy5A++KCprit3pnqDvcmRsDgJQaZT lnibzlkOlMm1tLloqwv3gKo+7XbZ2Z123BeBh62NVgWSHdjRZGnSlSCYe4EEd5I+Ho5H jZ0T/5QvxYykkHhQHNw5A9E7QeVBCHNUqDiZr/bsp+BN8NuTb4RZCbp6kz0QpdW59rCR 6VKg== X-Gm-Message-State: AOJu0YxR0MJlV1u3vnULfo1Vy/kRNSV2g3KNkOZySKrQNhUhRrKl/EfL 9uRbYRQ4JmIDmvw8U1oTsnfj5N05ECTqVNgndDcLHGv5S0b2IuSRpzt915aO4J9OlqGNSjki1D2 G X-Google-Smtp-Source: AGHT+IE2Q5ImzJzpzMNyB9WjKUzEYoK/mzJ2c3gWPb0CXJpu0CZ8hPkHIzArLQ59UPQq6vZSaPi+PQ== X-Received: by 2002:a05:6a21:7884:b0:1a3:c515:202c with SMTP id bf4-20020a056a21788400b001a3c515202cmr11121669pzc.62.1713799431222; Mon, 22 Apr 2024 08:23:51 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:50 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 6/9] latencystats: enforce that unused callback function is NULL Date: Mon, 22 Apr 2024 08:21:36 -0700 Message-ID: <20240422152336.147553-7-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 ISO C does not allow casting function pointer to void *. Resolve by enforcing the reserved argument. The user_cb argument for rte_latencystats_init() was not implemented, and had to be NULL anyway. The log type is local to this function and therefore can be local to this file. Signed-off-by: Stephen Hemminger --- lib/latencystats/rte_latencystats.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index bd8fde2f0c..8311adb411 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -30,7 +30,7 @@ static double cycles_per_ns; -RTE_LOG_REGISTER_DEFAULT(latencystat_logtype, INFO); +static RTE_LOG_REGISTER_DEFAULT(latencystat_logtype, INFO); #define RTE_LOGTYPE_LATENCY_STATS latencystat_logtype #define LATENCY_STATS_LOG(level, ...) \ RTE_LOG_LINE(level, LATENCY_STATS, "" __VA_ARGS__) @@ -246,6 +246,10 @@ rte_latencystats_init(uint64_t app_samp_intvl, if (rte_memzone_lookup(MZ_RTE_LATENCY_STATS)) return -EEXIST; + /** Reserved for possible future use */ + if (user_cb != NULL) + return -ENOTSUP; + /** Allocate stats in shared memory fo multi process support */ mz = rte_memzone_reserve(MZ_RTE_LATENCY_STATS, sizeof(*glob_stats), rte_socket_id(), flags); @@ -298,7 +302,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, for (qid = 0; qid < dev_info.nb_rx_queues; qid++) { cbs = &rx_cbs[pid][qid]; cbs->cb = rte_eth_add_first_rx_callback(pid, qid, - add_time_stamps, user_cb); + add_time_stamps, NULL); if (!cbs->cb) LATENCY_STATS_LOG(NOTICE, "Failed to register Rx callback for pid=%u, qid=%u", @@ -307,7 +311,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, 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); + calc_latency, NULL); if (!cbs->cb) LATENCY_STATS_LOG(NOTICE, "Failed to register Tx callback for pid=%u, qid=%u", From patchwork Mon Apr 22 15:21:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139618 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 BE5CA43EDB; Mon, 22 Apr 2024 17:24:31 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 60D0A40DDD; Mon, 22 Apr 2024 17:24:05 +0200 (CEST) Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) by mails.dpdk.org (Postfix) with ESMTP id CDDB740A72 for ; Mon, 22 Apr 2024 17:23:52 +0200 (CEST) Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-6ee0642f718so3868380b3a.0 for ; Mon, 22 Apr 2024 08:23:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799432; x=1714404232; 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=uDckzPMoggt3O0PD6CzLT8GtY/9DAGBqZIMGwEjEdxs=; b=pGDKZg/6HkQOz9z73X3Yr7T2TL1zx/51RaJDunErswJNtQGpwDz7MODV0fosSMJXws z2gHeg3hZ0x8W10YzYGt/c6Mzpwj86q3Jx4WU1l2PfYVX6GgToF3L2ktJ2BQGTxwIwL5 LA8WeTreoh2DQVRYONAR29uColzQAXdr/8/HGLAwx4dX3iQlqANvn7I88CDWDbY+At6/ TYzkdtKC7g8xgrGvQlWPmqCrmSeiPaTpyGFoZE0M50QgtxjzCp4EygO085awUSR/+khZ wFkLjmQ0pp/Ppkc0aSJ96kAags5NXMreqIQlWBxKhe5++rn5+Ak6IsfpDJM57UYTJwqf s5lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799432; x=1714404232; 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=uDckzPMoggt3O0PD6CzLT8GtY/9DAGBqZIMGwEjEdxs=; b=IrtCQ/asHJieltsztflvqQ5CUdxeaszbaJj7qLbiU7GxjQs6pOCBjrc/28zV+N7j1X E2Kfya3ZeCqB7p9DfmCyZFOiSEOKSJ0PicxHKWwTbkMKzPe4Bc2/z4NFg6jjU+8he5ZV IdK3L6MfbNF5tqQlBJH9ApjK0ofoA2f0g5mzJJ8c1ILxD1X9L1rWrBDnn7xihEmdcq7V h8QkLj3kz8q3BgUG/G/PPsrEdi1uFx2VvMdgfAGnrwk5UxUSVVHuj9q0POPuUyVh4PZc NCGezx3DPR2YMz8IGgqD5vCmPgoZDewM7B9OZrgIiLnUF3FbsyFmoQvPqjxYkc6FRxmY OOJw== X-Gm-Message-State: AOJu0YzVQ2k6orQBFT1ykNeQNG7PVIZljSU/P+15AqotKoGle7KHh2rx vQX+FWqkMs59RVOx8u2dJGTK0nQuVj2HNuqUJFiCG+JEAj7sRWi5ftPTEvLqJDv6mVFAArBlKPL 2 X-Google-Smtp-Source: AGHT+IGzKj+IUuFC4n6R1TEB+eAtlHjyEWWGNe9lkWQY9gobcTgR9VkWh2SMqoyLhcJzULpVpgw3oA== X-Received: by 2002:a05:6a21:2723:b0:1ad:4978:adf4 with SMTP id rm35-20020a056a21272300b001ad4978adf4mr828574pzb.1.1713799431992; Mon, 22 Apr 2024 08:23:51 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:51 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 7/9] latencystats: add metric for number of samples Date: Mon, 22 Apr 2024 08:21:37 -0700 Message-ID: <20240422152336.147553-8-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 Keeping track of the number of samples is useful when doing debug and testing to make sure that samples are actually happening. Signed-off-by: Stephen Hemminger --- lib/latencystats/rte_latencystats.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 8311adb411..e5a84fbd92 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -59,6 +59,7 @@ struct rte_latency_stats { uint64_t avg_latency; /**< Average latency */ uint64_t max_latency; /**< Maximum latency */ uint64_t jitter; /** Latency variation */ + uint64_t samples; /** Number of latency samples */ rte_spinlock_t lock; /** Latency calculation lock */ }; @@ -82,20 +83,26 @@ static const struct latency_stats_nameoff lat_stats_strings[] = { {"avg_latency_ns", offsetof(struct rte_latency_stats, avg_latency), LATENCY_AVG_SCALE}, {"max_latency_ns", offsetof(struct rte_latency_stats, max_latency), 1}, {"jitter_ns", offsetof(struct rte_latency_stats, jitter), LATENCY_JITTER_SCALE}, + {"samples", offsetof(struct rte_latency_stats, samples), 0}, }; -#define NUM_LATENCY_STATS (sizeof(lat_stats_strings) / \ - sizeof(lat_stats_strings[0])) +#define NUM_LATENCY_STATS RTE_DIM(lat_stats_strings) static void latencystats_collect(uint64_t values[]) { - unsigned int i; + unsigned int i, scale; const uint64_t *stats; for (i = 0; i < NUM_LATENCY_STATS; i++) { stats = RTE_PTR_ADD(glob_stats, lat_stats_strings[i].offset); - values[i] = floor(*stats / (cycles_per_ns * lat_stats_strings[i].scale)); + scale = lat_stats_strings[i].scale; + + /* used to mark samples which are not a time interval */ + if (scale == 0) + values[i] = *stats; + else + values[i] = floor(*stats / (cycles_per_ns * scale)); } } @@ -173,7 +180,6 @@ calc_latency(uint16_t pid __rte_unused, unsigned int i; uint64_t now, latency; static uint64_t prev_latency; - static bool first_sample = true; now = rte_rdtsc(); @@ -184,9 +190,7 @@ calc_latency(uint16_t pid __rte_unused, latency = now - *timestamp_dynfield(pkts[i]); - if (unlikely(first_sample)) { - first_sample = false; - + if (glob_stats->samples++ == 0) { glob_stats->min_latency = latency; glob_stats->max_latency = latency; glob_stats->avg_latency = latency * 4; From patchwork Mon Apr 22 15:21:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139619 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 9A3D143EDB; Mon, 22 Apr 2024 17:24:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DDBF140DFB; Mon, 22 Apr 2024 17:24:06 +0200 (CEST) Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) by mails.dpdk.org (Postfix) with ESMTP id 974D440A72 for ; Mon, 22 Apr 2024 17:23:53 +0200 (CEST) Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-6ed691fb83eso3558147b3a.1 for ; Mon, 22 Apr 2024 08:23:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799433; x=1714404233; 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=MPx8Tq4z+i1E7ZA5J+6800hQ4t64aBB2SM01FOQj28E=; b=j2MvXtpR15DNbeyaM4/UXzI2PajJGFECqHEVs/+ZQE9DntHfRDySVLR8sJ4vQ4QHPW mqNTL9pM1nuIX5CAYxvgynlpdc96LhJNuNllVz8/J4aKIGUQDy//VLbXNkJxb8sYX4J9 mXmRRjeOQhi2u9HHaXyokgQUXgWMTm7mlpsrsIo81CQ+GJKOG2YIejkoQs0X+5MjLY+1 M5t//B1pU/lDrbQ62BKufzT4YkUqqI7rVGTi38emcqR2xxJUt+SXFdjvx0iLsWkARVWg IiULQWiUcvg5iH8ew+TYEki6+lL90LUgWBzaVotoXcXiyKN6BKBHPoa5BsO1tOcDnjO3 MLew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799433; x=1714404233; 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=MPx8Tq4z+i1E7ZA5J+6800hQ4t64aBB2SM01FOQj28E=; b=nyKV0wPNf0Wl7tjK703fZMGUMGnDxV73ixg95j+/NIDODuGB+3BvPrLdWORMltFx21 kX1o51tZZZwn6OCdsEfm2wLYMVfd3Jj4gqbF/Favdf46H6627++Do8EqiPs8UEqKiV7w PclIYYss82r+ee02KUV0/ohUq97fYdfl+6htnkCvg9UZe2QpCuvvCUY17oNZ/HqHEwy6 87cPy+dG8tWIsfc1GvTeJl6FLx0uInpy7+DOU0SrMb7yFqIp+JcNfZSW8H5kVg6nc53F +fpyWOvqI3SeuJT2SRe+JKL0wcshhUEWB/A3Mff+QnogOHjlLBGlq+HG3WEsSeSWbFJV FWlg== X-Gm-Message-State: AOJu0YwVUIo0yIK4/0gaf+bvhC6SYHkUC7ZJb80goeHSQyfxtnvCFEBW jRwF6uQsv1PAH6oB2hMXRIu6EmGBauQX34zVPIdn0cbg51gJL4Z5Q5l0MaeDxzDcvE4FvtkUjU2 T X-Google-Smtp-Source: AGHT+IEX3ZIUBbEs6BW2dRvkXhaWRvJHUQFSj5GAMPawlaY4t+EPK9MF50ejiBYJ0QKIITfPD8ARbg== X-Received: by 2002:a05:6a21:2d09:b0:1a9:8b4a:b84 with SMTP id tw9-20020a056a212d0900b001a98b4a0b84mr12417019pzb.18.1713799432775; Mon, 22 Apr 2024 08:23:52 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:52 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 8/9] test: use initialization in latencystats test Date: Mon, 22 Apr 2024 08:21:38 -0700 Message-ID: <20240422152336.147553-9-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 No need for loop and memset() here. Just use structure initialization. Remove unnecessary initializations. Signed-off-by: Stephen Hemminger --- app/test/test_latencystats.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/app/test/test_latencystats.c b/app/test/test_latencystats.c index c309ab194f..3369c8bb90 100644 --- a/app/test/test_latencystats.c +++ b/app/test/test_latencystats.c @@ -21,7 +21,7 @@ static uint16_t portid; static struct rte_ring *ring; -static struct rte_metric_name lat_stats_strings[] = { +static struct rte_metric_name lat_stats_strings[NUM_STATS] = { {"min_latency_ns"}, {"avg_latency_ns"}, {"max_latency_ns"}, @@ -70,13 +70,9 @@ static int test_latency_uninit(void) /* Test case to get names of latency stats */ static int test_latencystats_get_names(void) { - int ret = 0, i = 0; - int size = 0; - struct rte_metric_name names[NUM_STATS]; - - size_t m_size = sizeof(struct rte_metric_name); - for (i = 0; i < NUM_STATS; i++) - memset(&names[i], 0, m_size); + int ret, i; + uint16_t size; + struct rte_metric_name names[NUM_STATS] = { }; /* Success Test: Valid names and size */ size = NUM_STATS; @@ -106,13 +102,9 @@ static int test_latencystats_get_names(void) /* Test case to get latency stats values */ static int test_latencystats_get(void) { - int ret = 0, i = 0; - int size = 0; - struct rte_metric_value values[NUM_STATS]; - - size_t v_size = sizeof(struct rte_metric_value); - for (i = 0; i < NUM_STATS; i++) - memset(&values[i], 0, v_size); + int ret; + uint16_t size; + struct rte_metric_value values[NUM_STATS] = { }; /* Success Test: Valid values and valid size */ size = NUM_STATS; From patchwork Mon Apr 22 15:21:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 139620 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 279F643EDB; Mon, 22 Apr 2024 17:24:44 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6934D40E0F; Mon, 22 Apr 2024 17:24:08 +0200 (CEST) Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by mails.dpdk.org (Postfix) with ESMTP id 5580F40A7A for ; Mon, 22 Apr 2024 17:23:54 +0200 (CEST) Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-6eced6fd98aso4292315b3a.0 for ; Mon, 22 Apr 2024 08:23:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713799433; x=1714404233; 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=vUoWg1PmW5lW5J3wRKwEZ2HiqMBKq7APhRaCn0FUAC8=; b=oqZrNcbCyV8Dk2tgKGSK7stPCrNLnBQJgcNwJy2/ejB3Een5Amcriuy3Scr7MeXFHt ocmS4gx0g8brAACv/QjR01OUdFiFKocFGHdmeasaJ4KAkROicSubVe63ROsNfYVetNyj uI0Q607IABFDzfKLso4Dn8bvIAXaNP2QwlydPtZ+NUmsCMlJZ+Jwk+Q9hPxtmfxbpCmp A8Wo6VBeAUM54EdoPGVl/Yl+ZkQkZ9wrBtkqQL/n2iDQwLHdD9oGOBZmQ5zXmWPpPTQj HbCM6I8s2BrXFuVLmZNKlBUnV/T6K0AEjRz21Z+DAXJxH3vGyvQwz7THL7aV/iiTUUX3 dmyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713799433; x=1714404233; 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=vUoWg1PmW5lW5J3wRKwEZ2HiqMBKq7APhRaCn0FUAC8=; b=ubyxevOvx6a5LGL6NMc/mNMlqoeC7tlnWMz1atanzCwwbNKP603sFE2cU3LiSwhXi+ i7Q1Os37R2lq/GBLVYCGQHz5pLWBdCitf0/aDzg+Y//MmTZIcDik24mEPDN5L70mPOUh QV3lF2IKoCLPC/8i52zMa1AUFunnUAHn5foMXJemDq+aeRVmIzETc4w9onKXcdjAjcLJ 5NvEM1P/ffReuugeju2/RfOOQlNIDMWKgz2ZE5mIbnvWZx/N06/cgjWyqGpS+G3B+q77 jO17TlMuuiFWbebE0NDWa5u/Wb5Rtkrio2Rip2nAGc2qeMfowcUTDFgkMPN1CbVxpg9U BaFQ== X-Gm-Message-State: AOJu0Ywsubzlvk5SEVwkTnXQb3t1LZKNHsRRcDTGshXonHmXGz9Uzrcy Ovl0JY+fKoncGMvlCyQr873cxSBAxnMW108/j15GxdBOI2XnYb7d/E7LSsBBwSupAOXYG0Wu5Ee 9 X-Google-Smtp-Source: AGHT+IFlecSIlr/KWe7tHdfyocALerIlOsG4ocVGWVHcWJ7YXazTq9wSDC989H3rRNUuTS9mUyc/tw== X-Received: by 2002:a05:6a20:394e:b0:1a7:5780:1f4b with SMTP id r14-20020a056a20394e00b001a757801f4bmr16300750pzg.24.1713799433595; Mon, 22 Apr 2024 08:23:53 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id cb17-20020a056a02071100b0060063c4be3bsm1402783pgb.14.2024.04.22.08.23.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:23:53 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Reshma Pattan Subject: [PATCH v5 9/9] test: add more latencystats tests Date: Mon, 22 Apr 2024 08:21:39 -0700 Message-ID: <20240422152336.147553-10-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422152336.147553-1-stephen@networkplumber.org> References: <20240408195036.182545-1-stephen@networkplumber.org> <20240422152336.147553-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 Look at the number of samples, min, max and average numbers to make sure they look correct. Forward for to make sure multiple samples are taken. Signed-off-by: Stephen Hemminger --- app/test/test_latencystats.c | 62 +++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/app/test/test_latencystats.c b/app/test/test_latencystats.c index 3369c8bb90..676a99d385 100644 --- a/app/test/test_latencystats.c +++ b/app/test/test_latencystats.c @@ -14,7 +14,7 @@ #include "sample_packet_forward.h" #include "test.h" -#define NUM_STATS 4 +#define NUM_STATS 5 #define LATENCY_NUM_PACKETS 10 #define QUEUE_ID 0 @@ -26,6 +26,7 @@ static struct rte_metric_name lat_stats_strings[NUM_STATS] = { {"avg_latency_ns"}, {"max_latency_ns"}, {"jitter_ns"}, + {"samples"}, }; /* Test case for latency init with metrics init */ @@ -141,10 +142,14 @@ static void test_latency_ring_free(void) static int test_latency_packet_forward(void) { + unsigned int i; int ret; struct rte_mbuf *pbuf[LATENCY_NUM_PACKETS] = { }; struct rte_mempool *mp; char poolname[] = "mbuf_pool"; + uint64_t end_cycles; + struct rte_metric_value values[NUM_STATS] = { }; + struct rte_metric_name names[NUM_STATS] = { }; ret = test_get_mbuf_from_pool(&mp, pbuf, poolname); if (ret < 0) { @@ -158,9 +163,41 @@ static int test_latency_packet_forward(void) return TEST_FAILED; } - ret = test_packet_forward(pbuf, portid, QUEUE_ID); - if (ret < 0) - printf("send pkts Failed\n"); + ret = rte_latencystats_get_names(names, NUM_STATS); + TEST_ASSERT((ret == NUM_STATS), "Test Failed to get metrics names"); + + ret = rte_latencystats_get(values, NUM_STATS); + TEST_ASSERT(ret == NUM_STATS, "Test failed to get results before forwarding"); + TEST_ASSERT(values[4].value == 0, "Samples not zero at start of test"); + + /* + * Want test to run long enough to collect sufficient samples + * but not so long that scheduler decides to reschedule it (1000 hz). + */ + end_cycles = rte_rdtsc() + rte_get_tsc_hz() / 2000; + do { + ret = test_packet_forward(pbuf, portid, QUEUE_ID); + if (ret < 0) + printf("send pkts Failed\n"); + } while (rte_rdtsc() < end_cycles); + + ret = rte_latencystats_get(values, NUM_STATS); + TEST_ASSERT(ret == NUM_STATS, "Test failed to get results after forwarding"); + + for (i = 0; i < NUM_STATS; i++) { + uint16_t k = values[i].key; + + printf("%s = %"PRIu64"\n", + names[k].name, values[i].value); + } + + TEST_ASSERT(values[4].value > 0, "No samples taken"); + TEST_ASSERT(values[0].value > 0, "Min latency should not be zero"); + TEST_ASSERT(values[1].value > 0, "Avg latency should not be zero"); + TEST_ASSERT(values[2].value > 0, "Max latency should not be zero"); + TEST_ASSERT(values[0].value < values[1].value, "Min latency > Avg latency"); + TEST_ASSERT(values[0].value < values[2].value, "Min latency > Max latency"); + TEST_ASSERT(values[1].value < values[2].value, "Avg latency > Max latency"); rte_eth_dev_stop(portid); test_put_mbuf_to_pool(mp, pbuf); @@ -180,22 +217,23 @@ unit_test_suite latencystats_testsuite = { */ TEST_CASE_ST(NULL, NULL, test_latency_init), - /* Test Case 2: Do packet forwarding for metrics - * calculation and check the latency metrics values - * are updated - */ - TEST_CASE_ST(test_latency_packet_forward, NULL, - test_latency_update), - /* Test Case 3: To check whether latency stats names + /* Test Case 2: To check whether latency stats names * are retrieved */ TEST_CASE_ST(NULL, NULL, test_latencystats_get_names), - /* Test Case 4: To check whether latency stats + /* Test Case 3: To check whether latency stats * values are retrieved */ TEST_CASE_ST(NULL, NULL, test_latencystats_get), + /* Test Case 4: Do packet forwarding for metrics + * calculation and check the latency metrics values + * are updated + */ + TEST_CASE_ST(test_latency_packet_forward, NULL, + test_latency_update), + /* Test Case 5: To check uninit of latency test */ TEST_CASE_ST(NULL, NULL, test_latency_uninit),