get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 120196,
    "url": "https://patches.dpdk.org/api/patches/120196/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20221128085935.161671-3-rjarry@redhat.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20221128085935.161671-3-rjarry@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221128085935.161671-3-rjarry@redhat.com",
    "date": "2022-11-28T08:59:33",
    "name": "[v2,2/4] eal: allow applications to report their cpu cycles utilization",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1e5e9941b5e393c9562df7ef9bc992f9fa9ac678",
    "submitter": {
        "id": 2850,
        "url": "https://patches.dpdk.org/api/people/2850/?format=api",
        "name": "Robin Jarry",
        "email": "rjarry@redhat.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20221128085935.161671-3-rjarry@redhat.com/mbox/",
    "series": [
        {
            "id": 25905,
            "url": "https://patches.dpdk.org/api/series/25905/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=25905",
            "date": "2022-11-28T08:59:31",
            "name": "lcore telemetry improvements",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/25905/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/120196/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/120196/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 58A60A00C3;\n\tMon, 28 Nov 2022 10:00:14 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 95C8042D1F;\n\tMon, 28 Nov 2022 09:59:54 +0100 (CET)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by mails.dpdk.org (Postfix) with ESMTP id D71174067C\n for <dev@dpdk.org>; Mon, 28 Nov 2022 09:59:51 +0100 (CET)",
            "from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com\n [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-394-JQjcy5c7O369TjODvnR3Cw-1; Mon, 28 Nov 2022 03:59:47 -0500",
            "from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com\n [10.11.54.5])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 327A32A5955D;\n Mon, 28 Nov 2022 08:59:47 +0000 (UTC)",
            "from paul.home (unknown [10.39.208.22])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 5A38F17582;\n Mon, 28 Nov 2022 08:59:45 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1669625991;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=4j5NtXRmax2Ttr4vU3Bxmws1bv843R910JBJJEnGJH4=;\n b=NMCyLPUrVdsk05N5ypNTAFGPCkG+hfchxCvBmYVHGorn/OXnB6vrwMAQhASDUnBmlO5dPL\n xet8FWuWq2BgPYY4M0WEQQg5y475IJvtCNm0GLghs1sxuoHtCpXuLM5RijhdkAIGQxc/95\n Q68ImXu5znV3eO77pYZetfoG562WEjo=",
        "X-MC-Unique": "JQjcy5c7O369TjODvnR3Cw-1",
        "From": "Robin Jarry <rjarry@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "Robin Jarry <rjarry@redhat.com>,\n Bruce Richardson <bruce.richardson@intel.com>,\n Jerin Jacob <jerinj@marvell.com>, Kevin Laatz <kevin.laatz@intel.com>,\n Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>, =?utf-8?q?Mattias_R?=\n\t=?utf-8?q?=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>, =?utf-8?q?Morten_?=\n\t=?utf-8?q?Br=C3=B8rup?= <mb@smartsharesystems.com>",
        "Subject": "[PATCH v2 2/4] eal: allow applications to report their cpu cycles\n utilization",
        "Date": "Mon, 28 Nov 2022 09:59:33 +0100",
        "Message-Id": "<20221128085935.161671-3-rjarry@redhat.com>",
        "In-Reply-To": "<20221128085935.161671-1-rjarry@redhat.com>",
        "References": "<20221123102612.1688865-1-rjarry@redhat.com>\n <20221128085935.161671-1-rjarry@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.1 on 10.11.54.5",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain; charset=UTF-8",
        "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": "Allow applications to register a callback that will be invoked in\nrte_lcore_dump() and when requesting lcore info in the telemetry API.\n\nThe callback is expected to return the number of CPU cycles that have\npassed since application start and the number of these cycles that were\nspent doing busy work.\n\nCc: Bruce Richardson <bruce.richardson@intel.com>\nCc: Jerin Jacob <jerinj@marvell.com>\nCc: Kevin Laatz <kevin.laatz@intel.com>\nCc: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>\nCc: Mattias Rönnblom <mattias.ronnblom@ericsson.com>\nCc: Morten Brørup <mb@smartsharesystems.com>\nSigned-off-by: Robin Jarry <rjarry@redhat.com>\n---\nv1 -> v2:\n\nChanged the approach based on Morten's review: the callback is now\nexpected to report the total number of cycles since application start\nand the amount of these cycles that were spent doing busy work. This\nwill give more flexibility in external monitoring tools to decide the\nsample period to compute busyness ratio.\n\n lib/eal/common/eal_common_lcore.c | 31 ++++++++++++++++++++++++++++---\n lib/eal/include/rte_lcore.h       | 29 +++++++++++++++++++++++++++++\n lib/eal/version.map               |  1 +\n 3 files changed, 58 insertions(+), 3 deletions(-)\n\n--\n2.38.1",
    "diff": "diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c\nindex 8a6c12550238..51f53fc93ece 100644\n--- a/lib/eal/common/eal_common_lcore.c\n+++ b/lib/eal/common/eal_common_lcore.c\n@@ -2,6 +2,7 @@\n  * Copyright(c) 2010-2014 Intel Corporation\n  */\n\n+#include <inttypes.h>\n #include <stdlib.h>\n #include <string.h>\n\n@@ -420,11 +421,20 @@ rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg)\n \treturn ret;\n }\n\n+static rte_lcore_usage_cb lcore_usage_cb;\n+\n+void\n+rte_lcore_register_usage_cb(rte_lcore_usage_cb cb)\n+{\n+\tlcore_usage_cb = cb;\n+}\n+\n static int\n lcore_dump_cb(unsigned int lcore_id, void *arg)\n {\n \tstruct rte_config *cfg = rte_eal_get_configuration();\n-\tchar cpuset[RTE_CPU_AFFINITY_STR_LEN];\n+\tchar cpuset[RTE_CPU_AFFINITY_STR_LEN], usage_str[256];\n+\tuint64_t busy_cycles, total_cycles;\n \tconst char *role;\n \tFILE *f = arg;\n \tint ret;\n@@ -444,11 +454,19 @@ lcore_dump_cb(unsigned int lcore_id, void *arg)\n \t\tbreak;\n \t}\n\n+\tbusy_cycles = 0;\n+\ttotal_cycles = 0;\n+\tusage_str[0] = '\\0';\n+\tif (lcore_usage_cb && lcore_usage_cb(lcore_id, &busy_cycles, &total_cycles) == 0) {\n+\t\tsnprintf(usage_str, sizeof(usage_str), \", busy cycles %\"PRIu64\"/%\"PRIu64,\n+\t\t\tbusy_cycles, total_cycles);\n+\t}\n \tret = eal_thread_dump_affinity(&lcore_config[lcore_id].cpuset, cpuset,\n \t\tsizeof(cpuset));\n-\tfprintf(f, \"lcore %u, socket %u, role %s, cpuset %s%s\\n\", lcore_id,\n+\tfprintf(f, \"lcore %u, socket %u, role %s, cpuset %s%s%s\\n\", lcore_id,\n \t\trte_lcore_to_socket_id(lcore_id), role, cpuset,\n-\t\tret == 0 ? \"\" : \"...\");\n+\t\tret == 0 ? \"\" : \"...\", usage_str);\n+\n \treturn 0;\n }\n\n@@ -486,6 +504,7 @@ lcore_telemetry_info_cb(unsigned int lcore_id, void *arg)\n {\n \tstruct lcore_telemetry_info *info = arg;\n \tstruct rte_config *cfg = rte_eal_get_configuration();\n+\tuint64_t busy_cycles, total_cycles;\n \tstruct rte_tel_data *cpuset;\n \tconst char *role;\n \tunsigned int cpu;\n@@ -519,6 +538,12 @@ lcore_telemetry_info_cb(unsigned int lcore_id, void *arg)\n \t\tif (CPU_ISSET(cpu, &lcore_config[lcore_id].cpuset))\n \t\t\trte_tel_data_add_array_int(cpuset, cpu);\n \trte_tel_data_add_dict_container(info->d, \"cpuset\", cpuset, 0);\n+\tbusy_cycles = 0;\n+\ttotal_cycles = 0;\n+\tif (lcore_usage_cb && lcore_usage_cb(lcore_id, &busy_cycles, &total_cycles) == 0) {\n+\t\trte_tel_data_add_dict_u64(info->d, \"busy_cycles\", busy_cycles);\n+\t\trte_tel_data_add_dict_u64(info->d, \"total_cycles\", total_cycles);\n+\t}\n\n \treturn 0;\n }\ndiff --git a/lib/eal/include/rte_lcore.h b/lib/eal/include/rte_lcore.h\nindex 6938c3fd7b81..dc352297bcbc 100644\n--- a/lib/eal/include/rte_lcore.h\n+++ b/lib/eal/include/rte_lcore.h\n@@ -328,6 +328,35 @@ typedef int (*rte_lcore_iterate_cb)(unsigned int lcore_id, void *arg);\n int\n rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg);\n\n+/**\n+ * Callback to allow applications to report CPU usage.\n+ *\n+ * @param [in] lcore_id\n+ *   The lcore to consider.\n+ * @param [out] busy\n+ *   The number of busy CPU cycles since the application start.\n+ * @param [out] total\n+ *   The total number of CPU cycles since the application start.\n+ * @return\n+ *   - 0 if both busy and total were set correctly.\n+ *   - a negative value if the information is not available or if any error occurred.\n+ */\n+typedef int (*rte_lcore_usage_cb)(\n+\tunsigned int lcore_id, uint64_t *busy_cycles, uint64_t *total_cycles);\n+\n+/**\n+ * Register a callback from an application to be called in rte_lcore_dump()\n+ * and the /eal/lcore/info telemetry endpoint handler.\n+ *\n+ * Applications are expected to report the amount of busy and total CPU cycles\n+ * since their startup.\n+ *\n+ * @param cb\n+ *   The callback function.\n+ */\n+__rte_experimental\n+void rte_lcore_register_usage_cb(rte_lcore_usage_cb cb);\n+\n /**\n  * List all lcores.\n  *\ndiff --git a/lib/eal/version.map b/lib/eal/version.map\nindex 7ad12a7dc985..30fd216a12ea 100644\n--- a/lib/eal/version.map\n+++ b/lib/eal/version.map\n@@ -440,6 +440,7 @@ EXPERIMENTAL {\n \trte_thread_detach;\n \trte_thread_equal;\n \trte_thread_join;\n+\trte_lcore_register_usage_cb;\n };\n\n INTERNAL {\n",
    "prefixes": [
        "v2",
        "2/4"
    ]
}