Show a cover letter.

GET /api/covers/55375/?format=api
Content-Type: application/json
Vary: Accept

    "id": 55375,
    "url": "",
    "web_url": "",
    "project": {
        "id": 1,
        "url": "",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "",
        "list_email": "",
        "web_url": "",
        "scm_url": "git://",
        "webscm_url": ""
    "msgid": "<>",
    "date": "2019-06-25T21:15:17",
    "name": "[0/3] lib/hash: perf improvements for lock-free",
    "submitter": {
        "id": 1045,
        "url": "",
        "name": "Honnappa Nagarahalli",
        "email": ""
    "mbox": "",
    "series": [
            "id": 5166,
            "url": "",
            "web_url": "",
            "date": "2019-06-25T21:15:17",
            "name": "lib/hash: perf improvements for lock-free",
            "version": 1,
            "mbox": ""
    "comments": "",
    "headers": {
        "X-Mailer": "git-send-email 2.17.1",
        "List-Id": "DPDK patches and discussions <>",
        "From": "Honnappa Nagarahalli <>",
        "List-Help": "<>",
        "Date": "Tue, 25 Jun 2019 16:15:17 -0500",
        "X-BeenThere": "",
        "X-Mailman-Version": "2.1.15",
        "Delivered-To": "",
        "Cc": ",\n\,\n\,\n\",
        "To": ",,\n\,,\n\",
        "Errors-To": "",
        "Sender": "\"dev\" <>",
        "Return-Path": "<>",
        "List-Subscribe": "<>,\n\t<>",
        "List-Post": "<>",
        "Received": [
            "from [] (localhost [])\n\tby (Postfix) with ESMTP id C12F41B99B;\n\tTue, 25 Jun 2019 23:15:41 +0200 (CEST)",
            "from ( [])\n\tby (Postfix) with ESMTP id BDC1E1B99B\n\tfor <>; Tue, 25 Jun 2019 23:15:40 +0200 (CEST)",
            "from (unknown [])\n\tby (Postfix) with ESMTP id E6BF7360;\n\tTue, 25 Jun 2019 14:15:39 -0700 (PDT)",
            "from (\n\t[])\n\tby (Postfix) with ESMTPSA id\n\tD2EE13F246; Tue, 25 Jun 2019 14:15:39 -0700 (PDT)"
        "List-Archive": "<>",
        "Subject": "[dpdk-dev] [PATCH 0/3] lib/hash: perf improvements for lock-free",
        "Message-Id": "<>",
        "Precedence": "list",
        "List-Unsubscribe": "<>,\n\t<>",
        "X-Original-To": ""
    "content": "While using the rte_hash library, there are 2 sets of stores that\nhappen.\n\n1) The application writes its data to memory (whose address\nis provided in rte_hash_add_key_with_hash_data API (or NULL))\n2) The rte_hash library writes to its own internal data structures;\nkey store entry and the hash table.\n\nThe data from both of these stores is available to the readers only\nafter the index of the key store entry (key_index) is written in the\nhash buckets by the library. So, key_index can act as the guard variable\nfor both of these writes.\n\nWhen rte_hash_add_key_with_hash_data is called to update an existing entry,\nthe key_index is not written. But, the store to the application data\nmust complete before the address of the application data (pData) is\nupdated in the key store entry. So, pData alone acts as the guard variable\nfor this case.\n\nHowever, it should be noted that there are no ordering requirements\nbetween 1) and 2), except for one requirement - the store to the\napplication data must complete before the store to key_index.\nIn other words, there are no ordering requirements between the stores to\nthe key store entry/signature and store to application data. So, the\nsynchronization point for application data can be any point between\nthe 'store to application data' and 'store to the key_index'.\n\nThe first patch in this series moves the signature comparison before the\nload-acquire of the key_index. This does not result in any issues because\nof the full key comparison which is done after the load-acquire of\nthe key_index.\nPerformance improvements:\nLookup Hit: 6.16%\nLookup Miss: 8.54%\n\nThe second patch in this series, moves the store-release of pData\nbefore the store to any hash internal data structures. This is not\nnecessary, but just helps to show the non-dependency between application\ndata and hash table data. On the reader side, the pData is loaded\nonly if the keys match, this provides performance benefits.\nPerformance improvements (with patch 1):\nLookup Hit: 6.25%\nLookup Miss: 13.97%\n\nThe third patch moves the table change counter to the beginning of\nthe cache line as it is one of the first fields accessed in the lookup\nfunction. Further work is required to adjust rte_hash structure\nto gain more performance.\nPerformance improvements (with patch 1 and patch 2):\nLookup Hit: 2.13%\nLookup Miss: 1.56%\n\nHonnappa Nagarahalli (3):\n  lib/hash: use ordered loads only if signature matches\n  lib/hash: load pData after full key compare\n  lib/hash: adjust tbl_chng_cnt position\n\n lib/librte_hash/rte_cuckoo_hash.c | 96 ++++++++++++++++---------------\n lib/librte_hash/rte_cuckoo_hash.h |  6 +-\n 2 files changed, 53 insertions(+), 49 deletions(-)"