get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/139458/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 139458,
    "url": "http://patches.dpdk.org/api/patches/139458/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240417170908.76701-4-stephen@networkplumber.org/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240417170908.76701-4-stephen@networkplumber.org>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240417170908.76701-4-stephen@networkplumber.org",
    "date": "2024-04-17T17:07:25",
    "name": "[v3,3/5] latencystats: do not use floating point",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "188185452f7d141934e4d6d32d583fe048ddf088",
    "submitter": {
        "id": 27,
        "url": "http://patches.dpdk.org/api/people/27/?format=api",
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240417170908.76701-4-stephen@networkplumber.org/mbox/",
    "series": [
        {
            "id": 31774,
            "url": "http://patches.dpdk.org/api/series/31774/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31774",
            "date": "2024-04-17T17:07:22",
            "name": "latencystats: cleanups",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/31774/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/139458/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/139458/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id AA75543E94;\n\tWed, 17 Apr 2024 19:09:32 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1929B427E6;\n\tWed, 17 Apr 2024 19:09:18 +0200 (CEST)",
            "from mail-pl1-f173.google.com (mail-pl1-f173.google.com\n [209.85.214.173])\n by mails.dpdk.org (Postfix) with ESMTP id D72B640DDD\n for <dev@dpdk.org>; Wed, 17 Apr 2024 19:09:13 +0200 (CEST)",
            "by mail-pl1-f173.google.com with SMTP id\n d9443c01a7336-1e5aa82d1f6so6995055ad.0\n for <dev@dpdk.org>; Wed, 17 Apr 2024 10:09:13 -0700 (PDT)",
            "from hermes.lan (204-195-96-226.wavecable.com. [204.195.96.226])\n by smtp.gmail.com with ESMTPSA id\n l5-20020a170903120500b001e4458831afsm11832442plh.227.2024.04.17.10.09.12\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 17 Apr 2024 10:09:12 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1713373753;\n x=1713978553; darn=dpdk.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=CUdEJ0A0hLHDbZgXocEGwXmdOHskbeMSv840NwkxBf8=;\n b=Q8X1BBhdGDbAbEzwy9L0w9OeZv/+QeAcdSUk8mPW4GNFKEU3OmKnsx03BDRD2DDJ0p\n 228MoVPWfv4tMB21kjkOkswu6EQKGjPl6k6qq4cOsNUe0M0jbVr+8HbB8MAljTKzxcjA\n gpQ+i5+OpEmZhtzxbV7bjh+UvWcm9qSOGmdscsBs2BMOfK6V/odqXOT/Xyewmu8EdVVl\n O3AjYZTZK2r36eic03oDAerwUbAo3gljsrzGAWTSI+xHWtYccNo46DASNV9SwzOfG/gv\n LVvE/JGf+WKQAoILhYtSTacsiORprdMNxy+JuNGnrjBPvHN5w2VjlNvvZnKPJZYHOrCv\n FUkw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1713373753; x=1713978553;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=CUdEJ0A0hLHDbZgXocEGwXmdOHskbeMSv840NwkxBf8=;\n b=wuuWgPu28cb5oW8FQ4Oe9wban5CMEQsdUJZLaiFJmdM6cjI6LE3hIg/GKhW7zVRo9H\n jp97v293PnTUKndZSyHRyOz6OKccRGw/ZlBeUULP8eYp6chH8jZbbze781N0HeExwsoe\n CUhDrUWucomcBB/P1Uvb6cSlUHXVuMtrpiONMLUO9hIC4lmW3ia8StAkh9yduBYEaycp\n 2YWwpEuVXpSVGazEwNZa6HAirAi5ACUAoSZUv8sePtpBu1VDEDonz3rEaS9i4qhL7PgD\n B8J8few6nmY7WGqkbCQSlnh+YFLAd29uQS9HXLCiTo/Nb0vjDRk/+DpibZzJLsBlFXTo\n Z6Cg==",
        "X-Gm-Message-State": "AOJu0Yylbu0O+eDvg4Bwz2gHce2F1793WrCBKH89X5BfXGVZhHCJ0amj\n 6VMSQNxlmQmPdWodXECGdbULRmH4WZb0vwxbROC1hW0BfCC8oo4gaDARYT7tulwHAL9blj26ijH\n P",
        "X-Google-Smtp-Source": "\n AGHT+IHyuvHB2TQXiluzn8KUjrmxn8B0pYht7btHDY6XOsHi9g4RMJp1VU1Nh6yOeA6idNbXwTFLtg==",
        "X-Received": "by 2002:a17:902:e883:b0:1e3:e249:41eb with SMTP id\n w3-20020a170902e88300b001e3e24941ebmr1466plg.32.1713373752936;\n Wed, 17 Apr 2024 10:09:12 -0700 (PDT)",
        "From": "Stephen Hemminger <stephen@networkplumber.org>",
        "To": "dev@dpdk.org",
        "Cc": "Stephen Hemminger <stephen@networkplumber.org>,\n Reshma Pattan <reshma.pattan@intel.com>",
        "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>\n <20240417170908.76701-1-stephen@networkplumber.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "The cycle counts do not need to be stored as floating point.\nInstead keep track of latency in cycles, and convert to\nnanoseconds when read.\n\nChange Exponential Weighted Moving Average weight from .2 to .25\nto avoid use of floating point for that.\n\nSigned-off-by: Stephen Hemminger <stephen@networkplumber.org>\n---\n lib/latencystats/rte_latencystats.c | 37 +++++++++++------------------\n 1 file changed, 14 insertions(+), 23 deletions(-)",
    "diff": "diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c\nindex fe8c3c563a..11bd0ea4ae 100644\n--- a/lib/latencystats/rte_latencystats.c\n+++ b/lib/latencystats/rte_latencystats.c\n@@ -47,10 +47,10 @@ static uint64_t timer_tsc;\n static uint64_t prev_tsc;\n \n struct rte_latency_stats {\n-\tfloat min_latency; /**< Minimum latency in nano seconds */\n-\tfloat avg_latency; /**< Average latency in nano seconds */\n-\tfloat max_latency; /**< Maximum latency in nano seconds */\n-\tfloat jitter; /** Latency variation */\n+\tuint64_t min_latency; /**< Minimum latency */\n+\tuint64_t avg_latency; /**< Average latency */\n+\tuint64_t max_latency; /**< Maximum latency */\n+\tuint64_t jitter; /** Latency variation */\n \trte_spinlock_t lock; /** Latency calculation lock */\n };\n \n@@ -82,13 +82,12 @@ int32_t\n rte_latencystats_update(void)\n {\n \tunsigned int i;\n-\tfloat *stats_ptr = NULL;\n \tuint64_t values[NUM_LATENCY_STATS] = {0};\n \tint ret;\n \n \tfor (i = 0; i < NUM_LATENCY_STATS; i++) {\n-\t\tstats_ptr = RTE_PTR_ADD(glob_stats,\n-\t\t\t\tlat_stats_strings[i].offset);\n+\t\tconst uint64_t *stats_ptr = RTE_PTR_ADD(glob_stats,\n+\t\t\t\t\t\t\tlat_stats_strings[i].offset);\n \t\tvalues[i] = floor(*stats_ptr / latencystat_cycles_per_ns());\n \t}\n \n@@ -105,11 +104,10 @@ static void\n rte_latencystats_fill_values(struct rte_metric_value *values)\n {\n \tunsigned int i;\n-\tfloat *stats_ptr = NULL;\n \n \tfor (i = 0; i < NUM_LATENCY_STATS; i++) {\n-\t\tstats_ptr = RTE_PTR_ADD(glob_stats,\n-\t\t\t\tlat_stats_strings[i].offset);\n+\t\tconst uint64_t *stats_ptr = RTE_PTR_ADD(glob_stats,\n+\t\t\t\t\t\t\tlat_stats_strings[i].offset);\n \t\tvalues[i].key = i;\n \t\tvalues[i].value = floor(*stats_ptr / latencystat_cycles_per_ns());\n \t}\n@@ -156,15 +154,8 @@ calc_latency(uint16_t pid __rte_unused,\n \t\tvoid *_ __rte_unused)\n {\n \tunsigned int i;\n-\tuint64_t now;\n-\tfloat latency;\n-\tstatic float prev_latency;\n-\t/*\n-\t * Alpha represents degree of weighting decrease in EWMA,\n-\t * a constant smoothing factor between 0 and 1. The value\n-\t * is used below for measuring average latency.\n-\t */\n-\tconst float alpha = 0.2;\n+\tuint64_t now, latency;\n+\tstatic uint64_t prev_latency;\n \n \tnow = rte_rdtsc();\n \n@@ -186,8 +177,7 @@ calc_latency(uint16_t pid __rte_unused,\n \t\t * Reference: Calculated as per RFC 5481, sec 4.1,\n \t\t * RFC 3393 sec 4.5, RFC 1889 sec.\n \t\t */\n-\t\tglob_stats->jitter +=  (fabsf(prev_latency - latency)\n-\t\t\t\t\t- glob_stats->jitter)/16;\n+\t\tglob_stats->jitter += ((prev_latency - latency) - glob_stats->jitter) / 16;\n \t\tif (glob_stats->min_latency == 0)\n \t\t\tglob_stats->min_latency = latency;\n \t\telse if (latency < glob_stats->min_latency)\n@@ -198,9 +188,10 @@ calc_latency(uint16_t pid __rte_unused,\n \t\t * The average latency is measured using exponential moving\n \t\t * average, i.e. using EWMA\n \t\t * https://en.wikipedia.org/wiki/Moving_average\n+\t\t *\n+\t\t * Alpha is .25\n \t\t */\n-\t\tglob_stats->avg_latency +=\n-\t\t\talpha * (latency - glob_stats->avg_latency);\n+\t\tglob_stats->avg_latency += (latency - glob_stats->avg_latency) / 4;\n \t\tprev_latency = latency;\n \t}\n \trte_spinlock_unlock(&glob_stats->lock);\n",
    "prefixes": [
        "v3",
        "3/5"
    ]
}