From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 6281E8D86 for ; Wed, 2 Dec 2015 04:39:54 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 01 Dec 2015 19:39:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,371,1444719600"; d="scan'208";a="832354313" Received: from yliu-dev.sh.intel.com ([10.239.66.49]) by orsmga001.jf.intel.com with ESMTP; 01 Dec 2015 19:39:50 -0800 From: Yuanhan Liu To: dev@dpdk.org Date: Wed, 2 Dec 2015 11:43:09 +0800 Message-Id: <1449027793-30975-1-git-send-email-yuanhan.liu@linux.intel.com> X-Mailer: git-send-email 1.9.0 Cc: Victor Kaplansky , "Michael S. Tsirkin" Subject: [dpdk-dev] [PATCH 0/4 for 2.3] vhost-user live migration support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Dec 2015 03:39:54 -0000 This patch set adds the initial vhost-user live migration support. The major task behind that is to log pages we touched during live migration. So, this patch is basically about adding vhost log support, and using it. Patchset ======== - Patch 1 handles VHOST_USER_SET_LOG_BASE, which tells us where the dirty memory bitmap is. - Patch 2 introduces a vhost_log_write() helper function to log pages we are gonna change. - Patch 3 logs changes we made to used vring. - Patch 4 sets log_fhmfd protocol feature bit, which actually enables the vhost-user live migration support. A simple test guide (on same host) ================================== The following test is based on OVS + DPDK. And here is guide to setup OVS + DPDK: http://wiki.qemu.org/Features/vhost-user-ovs-dpdk 1. start ovs-vswitchd 2. Add two ovs vhost-user port, say vhost0 and vhost1 3. Start a VM1 to connect to vhost0. Here is my example: $QEMU -enable-kvm -m 1024 -smp 4 \ -chardev socket,id=char0,path=/var/run/openvswitch/vhost0 \ -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \ -device virtio-net-pci,netdev=mynet1,mac=52:54:00:12:34:58 \ -object memory-backend-file,id=mem,size=1024M,mem-path=$HOME/hugetlbfs,share=on \ -numa node,memdev=mem -mem-prealloc \ -kernel $HOME/iso/vmlinuz -append "root=/dev/sda1" \ -hda fc-19-i386.img \ -monitor telnet::3333,server,nowait -curses 4. run "ping $host" inside VM1 5. Start VM2 to connect to vhost0, and marking it as the target of live migration (by adding -incoming tcp:0:4444 option) $QEMU -enable-kvm -m 1024 -smp 4 \ -chardev socket,id=char0,path=/var/run/openvswitch/vhost1 \ -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \ -device virtio-net-pci,netdev=mynet1,mac=52:54:00:12:34:58 \ -object memory-backend-file,id=mem,size=1024M,mem-path=$HOME/hugetlbfs,share=on \ -numa node,memdev=mem -mem-prealloc \ -kernel $HOME/iso/vmlinuz -append "root=/dev/sda1" \ -hda fc-19-i386.img \ -monitor telnet::3334,server,nowait -curses \ -incoming tcp:0:4444 6. connect to VM1 monitor, and start migration: > migrate tcp:0:4444 7. After a while, you will find that VM1 has been migrated to VM2, and the "ping" command continues running, perfectly. Note: this patch set has mostly been based on Victor Kaplansk's demo work (vhost-user-bridge) at QEMU project. I was thinking to add Victor as the co-author. Victor, what do you think of that? :) Comments are welcome! --- Yuanhan Liu (4): vhost: handle VHOST_USER_SET_LOG_BASE request vhost: introduce vhost_log_write vhost: log vring changes vhost: enable log_shmfd protocol feature lib/librte_vhost/rte_virtio_net.h | 35 ++++++++++++++ lib/librte_vhost/vhost_rxtx.c | 70 ++++++++++++++++++--------- lib/librte_vhost/vhost_user/vhost-net-user.c | 7 ++- lib/librte_vhost/vhost_user/vhost-net-user.h | 6 +++ lib/librte_vhost/vhost_user/virtio-net-user.c | 44 +++++++++++++++++ lib/librte_vhost/vhost_user/virtio-net-user.h | 5 +- lib/librte_vhost/virtio-net.c | 4 ++ 7 files changed, 145 insertions(+), 26 deletions(-) -- 1.9.0