Show a cover letter.

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

{
    "id": 46543,
    "url": "http://patches.dpdk.org/api/covers/46543/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20181011092432.22275-1-maxime.coquelin@redhat.com/",
    "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": "<20181011092432.22275-1-maxime.coquelin@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181011092432.22275-1-maxime.coquelin@redhat.com",
    "date": "2018-10-11T09:24:13",
    "name": "[v6,00/19] vhost: add postcopy live-migration support",
    "submitter": {
        "id": 512,
        "url": "http://patches.dpdk.org/api/people/512/?format=api",
        "name": "Maxime Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20181011092432.22275-1-maxime.coquelin@redhat.com/mbox/",
    "series": [
        {
            "id": 1825,
            "url": "http://patches.dpdk.org/api/series/1825/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1825",
            "date": "2018-10-11T09:24:13",
            "name": "vhost: add postcopy live-migration support",
            "version": 6,
            "mbox": "http://patches.dpdk.org/series/1825/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/46543/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id D0AF11B0F7;\n\tThu, 11 Oct 2018 11:24:46 +0200 (CEST)",
            "from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby dpdk.org (Postfix) with ESMTP id 4F89E5F65;\n\tThu, 11 Oct 2018 11:24:45 +0200 (CEST)",
            "from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 836A08110D;\n\tThu, 11 Oct 2018 09:24:44 +0000 (UTC)",
            "from localhost.localdomain (ovpn-112-55.ams2.redhat.com\n\t[10.36.112.55])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id AE16060472;\n\tThu, 11 Oct 2018 09:24:35 +0000 (UTC)"
        ],
        "From": "Maxime Coquelin <maxime.coquelin@redhat.com>",
        "To": "dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com,\n\tjfreimann@redhat.com, nicknickolaev@gmail.com, i.maximets@samsung.com,\n\tbruce.richardson@intel.com, alejandro.lucero@netronome.com",
        "Cc": "dgilbert@redhat.com, stable@dpdk.org,\n\tMaxime Coquelin <maxime.coquelin@redhat.com>",
        "Date": "Thu, 11 Oct 2018 11:24:13 +0200",
        "Message-Id": "<20181011092432.22275-1-maxime.coquelin@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.11",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.28]); Thu, 11 Oct 2018 09:24:44 +0000 (UTC)",
        "Subject": "[dpdk-dev] [PATCH v6 00/19] vhost: add postcopy live-migration\n\tsupport",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "In this v6:\n- Remove Ilya's ack on patch 1 as quite reworked in v5\n- Fix indentation for RTE_LOG (Tiwei)\n- set_protocol_features: check against slave's runtime\n  features (Tiwei)\n- Style fix for protoype declaration (Tiwei)\n- Fix typos in commit message (Tiwei)\n- Set msg's fd_num to 0 in vhost-crypto (Tiwei)\n\nWith classic live-migration, the VM runs on source while its\ncontent is being migrated to destination. When pages already\nmigrated to destination are dirtied by the source, they get\ncopied until both source and destination memory converge.\nAt that time, the source is stopped and destination is\nstarted.\n\nWith postcopy live-migration, the VM is started on destination\nbefore all the memory has been migrated. When the VM tries to\naccess a page that haven't been migrated yet, a pagefault is\ntriggered, handled by userfaultfd which pauses the thread.\nA Qemu thread in charge of postcopy request the source for\nthe missing page. Once received and mapped, the paused thread\ngets resumed.\n\nUserfaultfd supports handling faults from a different process,\nand Qemu supports postcopy with vhost-user backends since\nv2.12.\n\nOne problem encountered with classic live-migration for VMs\nrelying on vhost-user backends is that when the traffic is\nhigh (e.g. PVP), it happens that it never converges as\npages gets dirtied at a faster rate than they are copied\nto the destination.\nIt is expected this problem sould be solved with using\npostcopy, as rings memory and buffers will be copied once,\nwhen destination will pagefault on them.\n\nNote that it will certainly require a rebase to apply on top\nof Nikolay's vhost-user message handling rework.\n\nSteps to test postcopy:\n1. Run DPDK's Testpmd application on source:\n./install/bin/testpmd -m 512 --file-prefix=src -l 0,2 -n 4 \\\n  --vdev 'net_vhost0,iface=/tmp/vu-src' -- --portmask=1 -i \\\n  --rxq=1 --txq=1 --nb-cores=1 --eth-peer=0,52:54:00:11:22:12 \\\n  --no-mlockall\n\n2. Run DPDK's Testpmd application on destination:\n./install/bin/testpmd -m 512 --file-prefix=dst -l 0,2 -n 4 \\\n  --vdev 'net_vhost0,iface=/tmp/vu-dst,postcopy-support=1' -- --portmask=1 -i \\\n  --rxq=1 --txq=1 --nb-cores=1 --eth-peer=0,52:54:00:11:22:12 \\\n  --no-mlockall\n\n3. Launch VM on source:\n./x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 3G -smp 2 -cpu host \\\n  -object memory-backend-file,id=mem,size=3G,mem-path=/dev/shm,share=on \\\n  -numa node,memdev=mem -mem-prealloc \\\n  -chardev socket,id=char0,path=/tmp/vu-src \\\n  -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \\\n  -device virtio-net-pci,netdev=mynet1 /home/virt/rhel7.6-1-clone.qcow2 \\\n  -net none -vnc :0 -monitor stdio\n\n4. Launch VM on destination:\n./x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 3G -smp 2 -cpu host \\\n  -object memory-backend-file,id=mem,size=3G,mem-path=/dev/shm,share=on \\\n  -numa node,memdev=mem -mem-prealloc \\\n  -chardev socket,id=char0,path=/tmp/vu-dst \\\n  -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \\\n  -device virtio-net-pci,netdev=mynet1 /home/virt/rhel7.6-1-clone.qcow2 \\\n  -net none -vnc :1 -monitor stdio -incoming tcp::8888\n\n5. In both testpmd prompts, start flooding the virtio-net device:\ntestpmd> set fwd txonly\ntestpmd> start\n\n6. In destination's Qemu monitor, enable postcopy:\n(qemu) migrate_set_capability postcopy-ram on\n\n7. In source's Qemu monitor, enable postcopy and launch migration:\n(qemu) migrate_set_capability postcopy-ram on\n(qemu) migrate -d tcp:0:8888\n(qemu) migrate_start_postcopy\n\nMaxime Coquelin (19):\n  vhost: fix messages results handling\n  vhost: fix return code of messages requiring replies\n  vhost: clarify reply-ack in case a reply was already sent\n  vhost: fix payload size of reply\n  vhost: fix error handling when mem table gets updated\n  vhost: define postcopy protocol flag\n  vhost: add number of fds to vhost-user messages and use it\n  vhost: pass socket fd to message handling callbacks\n  vhost: enable fds passing when sending vhost-user messages\n  vhost: add config flag for postcopy feature\n  vhost: introduce postcopy's advise message\n  vhost: add support for postcopy's listen message\n  vhost: register new regions with userfaultfd\n  vhost: avoid useless VhostUserMemory copy\n  vhost: send userfault range addresses back to qemu\n  vhost: add support to postcopy's end request\n  vhost: restrict postcopy live-migration enablement\n  net/vhost: add parameter to enable postcopy support\n  vhost: enable postcopy protocol feature\n\n config/common_linuxapp              |   1 +\n doc/guides/nics/vhost.rst           |   5 +\n doc/guides/prog_guide/vhost_lib.rst |   8 +\n drivers/net/vhost/rte_eth_vhost.c   |  13 ++\n lib/librte_vhost/meson.build        |   2 +\n lib/librte_vhost/rte_vhost.h        |   5 +\n lib/librte_vhost/socket.c           |  55 ++++-\n lib/librte_vhost/vhost.h            |  22 +-\n lib/librte_vhost/vhost_crypto.c     |  25 +-\n lib/librte_vhost/vhost_user.c       | 344 +++++++++++++++++++++-------\n lib/librte_vhost/vhost_user.h       |  21 +-\n 11 files changed, 385 insertions(+), 116 deletions(-)"
}