Show a cover letter.

GET /api/covers/2194402/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2194402,
    "url": "http://patchwork.ozlabs.org/api/covers/2194402/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ovn/cover/20260208195519.1851683-1-mmichels@redhat.com/",
    "project": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/projects/68/?format=api",
        "name": "Open Virtual Network development",
        "link_name": "ovn",
        "list_id": "ovs-dev.openvswitch.org",
        "list_email": "ovs-dev@openvswitch.org",
        "web_url": "http://openvswitch.org/",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260208195519.1851683-1-mmichels@redhat.com>",
    "list_archive_url": null,
    "date": "2026-02-08T19:55:12",
    "name": "[ovs-dev,v2,0/2] Add stopwatches to incremental engine nodes.",
    "submitter": {
        "id": 71978,
        "url": "http://patchwork.ozlabs.org/api/people/71978/?format=api",
        "name": "Mark Michelson",
        "email": "mmichels@redhat.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/ovn/cover/20260208195519.1851683-1-mmichels@redhat.com/mbox/",
    "series": [
        {
            "id": 491435,
            "url": "http://patchwork.ozlabs.org/api/series/491435/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=491435",
            "date": "2026-02-08T19:55:12",
            "name": "Add stopwatches to incremental engine nodes.",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/491435/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2194402/comments/",
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fiuaN8g2;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=140.211.166.136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)",
            "smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fiuaN8g2",
            "smtp2.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "smtp2.osuosl.org; dkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=fiuaN8g2"
        ],
        "Received": [
            "from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f8JTc1Cntz1xvc\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 09 Feb 2026 06:55:30 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id A60E8607FD;\n\tSun,  8 Feb 2026 19:55:27 +0000 (UTC)",
            "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id k6fRZ4HXX_nt; Sun,  8 Feb 2026 19:55:26 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id AE782606E8;\n\tSun,  8 Feb 2026 19:55:26 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 5CCE9C02A4;\n\tSun,  8 Feb 2026 19:55:26 +0000 (UTC)",
            "from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])\n by lists.linuxfoundation.org (Postfix) with ESMTP id AC1A1C003D\n for <dev@openvswitch.org>; Sun,  8 Feb 2026 19:55:25 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp2.osuosl.org (Postfix) with ESMTP id 8FF6C4041B\n for <dev@openvswitch.org>; Sun,  8 Feb 2026 19:55:25 +0000 (UTC)",
            "from smtp2.osuosl.org ([127.0.0.1])\n by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id DCRwjSlfSzSW for <dev@openvswitch.org>;\n Sun,  8 Feb 2026 19:55:25 +0000 (UTC)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by smtp2.osuosl.org (Postfix) with ESMTPS id B8F2A40345\n for <dev@openvswitch.org>; Sun,  8 Feb 2026 19:55:24 +0000 (UTC)",
            "from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-528-shD2wnyuNAanCPYRtU3ceg-1; Sun,\n 08 Feb 2026 14:55:21 -0500",
            "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 562ED1956080\n for <dev@openvswitch.org>; Sun,  8 Feb 2026 19:55:20 +0000 (UTC)",
            "from localhost.localdomain.com (unknown [10.22.64.91])\n by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id D627B1956053\n for <dev@openvswitch.org>; Sun,  8 Feb 2026 19:55:19 +0000 (UTC)"
        ],
        "X-Virus-Scanned": [
            "amavis at osuosl.org",
            "amavis at osuosl.org"
        ],
        "X-Comment": "SPF check N/A for local connections -\n client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ",
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 smtp3.osuosl.org AE782606E8",
            "OpenDKIM Filter v2.11.0 smtp2.osuosl.org B8F2A40345"
        ],
        "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124;\n helo=us-smtp-delivery-124.mimecast.com; envelope-from=mmichels@redhat.com;\n receiver=<UNKNOWN>",
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp2.osuosl.org B8F2A40345",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1770580522;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=BygP7TRgrtXVSNCHoOri8Gk1PeeTyRw9KZiU2hLV910=;\n b=fiuaN8g2GBagtfOLNM+OtkNMrl90KUhs+oME6qIeU/KYGKyZkqsubgwHPLAhCDnje6Zfo8\n 2vY2p2F0DKUpqImlsk/MhI5rKlmvpJ6sfj8vow9e/ZCS4HCa4mVroIk3kU1ieQlHdySe2d\n op4wrtPFNkhHOUy9kYftEluf0eXNFns=",
        "X-MC-Unique": "shD2wnyuNAanCPYRtU3ceg-1",
        "X-Mimecast-MFC-AGG-ID": "shD2wnyuNAanCPYRtU3ceg_1770580520",
        "To": "dev@openvswitch.org",
        "Date": "Sun,  8 Feb 2026 14:55:12 -0500",
        "Message-ID": "<20260208195519.1851683-1-mmichels@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "XiIRyVtEOQMmA-oafXHImBLxf4rPKlOQRYE4V89kmms_1770580520",
        "X-Mimecast-Originator": "redhat.com",
        "Subject": "[ovs-dev] [PATCH ovn v2 0/2] Add stopwatches to incremental engine\n nodes.",
        "X-BeenThere": "ovs-dev@openvswitch.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "<ovs-dev.openvswitch.org>",
        "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>",
        "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>",
        "List-Post": "<mailto:ovs-dev@openvswitch.org>",
        "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>",
        "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>",
        "From": "Mark Michelson via dev <ovs-dev@openvswitch.org>",
        "Reply-To": "Mark Michelson <mmichels@redhat.com>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ovs-dev-bounces@openvswitch.org",
        "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>"
    },
    "content": "I recently made a logical flow refactor patch series and was asked to\nbenchmark it to ensure that we were not introducing any performance\nregressions. In my case, I was lucky that the vital incremental engine\nnodes already had stopwatches that I could use to compare performance.\n\nHowever, if I had wanted to test performance of other engine nodes, that\nwould not have been as easy. That's when I came up with this idea. With\nthis change set, we add stopwatches to every incremental engine node\nautomatically. With these stopwatches, we can measure recomputes and we\ncan measure change handlers.\n\nThis will be a helpful metric to have when finding performance\nregressions, and it can also offer insight into the time savings between\nincremental processing and full recomputes.\n\nWith the addition of new stopwatches to incremental nodes, it means that\nthere are now some redundant stopwatches. For instance, the \"lflow_run\"\nstopwatch introduced in this commit now supersedes the existing\n\"build_lflows\" stopwatch. However, I have not removed any existing\nstopwatches in this series. The reason is that I do not want to break\nany tests or other scripts that rely on these stopwatches.\n\n---\nv1 -> v2:\n* The four patches of v1 have been condensed into a single patch for v2.\n* The recompute stopwatches are simply the incremental node name now.\n  There is no \"run\" suffix.\n* The command to list stopwatches for incremental nodes can now take\n  no argument. This can be used to list all stopwatches for all incremental\n  nodes.\n* A new patch has been added to this series that removes all redundant\n  stopwatches from the code. These old stopwatches are now covered by the\n  built-in incremental engine stopwatches. The perf tests have been updated\n  to use the incremental node stopwatches.\n\nMark Michelson (2):\n  inc-proc-eng: Build stopwatches into every incremental node.\n  northd: Remove redundant stopwatches.\n\n lib/inc-proc-eng.c                | 60 ++++++++++++++++++++++++++++---\n lib/inc-proc-eng.h                |  5 ++-\n lib/stopwatch-names.h             | 13 -------\n northd/en-advertised-route-sync.c |  8 -----\n northd/en-group-ecmp-route.c      |  5 ---\n northd/en-learned-route-sync.c    |  5 ---\n northd/en-lflow.c                 |  5 ---\n northd/en-lr-nat.c                |  4 ---\n northd/en-lr-stateful.c           |  5 ---\n northd/en-ls-arp.c                |  6 ----\n northd/en-ls-stateful.c           |  5 ---\n northd/en-meters.c                |  6 ----\n northd/en-northd.c                |  4 ---\n northd/en-port-group.c            |  5 ---\n northd/en-sync-from-sb.c          |  5 ---\n northd/ovn-northd.c               | 13 -------\n tests/perf-northd.at              | 20 +++++------\n 17 files changed, 70 insertions(+), 104 deletions(-)"
}