On Thu, 6 Dec 2018 at 21:57, Jason Wang <jasow...@redhat.com> wrote: > > > On 2018/12/6 下午2:35, elohi...@gmail.com wrote: > > From: Xie Yongji <xieyon...@baidu.com> > > > > This patchset is aimed at supporting qemu to reconnect > > vhost-user-blk backend after vhost-user-blk backend crash or > > restart. > > > > The patch 1 tries to implenment the sync connection for > > "reconnect socket". > > > > The patch 2 introduces a new message VHOST_USER_SET_VRING_INFLIGHT > > to support offering shared memory to backend to record > > its inflight I/O. > > > > The patch 3,4 are the corresponding libvhost-user patches of > > patch 2. Make libvhost-user support VHOST_USER_SET_VRING_INFLIGHT. > > > > The patch 5 supports vhost-user-blk to reconnect backend when > > connection closed. > > > > The patch 6 tells qemu that we support reconnecting now. > > > > To use it, we could start qemu with: > > > > qemu-system-x86_64 \ > > -chardev socket,id=char0,path=/path/vhost.socket,reconnect=1,wait \ > > -device vhost-user-blk-pci,chardev=char0 \ > > > > and start vhost-user-blk backend with: > > > > vhost-user-blk -b /path/file -s /path/vhost.socket > > > > Then we can restart vhost-user-blk at any time during VM running. > > > I wonder whether or not it's better to handle this at the level of > virtio protocol itself instead of vhost-user level. E.g expose > last_avail_idx to driver might be sufficient? > > Another possible issue is, looks like you need to deal with different > kinds of ring layouts e.g packed virtqueues. >
Yes, we should be able to deal with the packed virtqueues. But this should be processed in backend rather than in qemu. Qemu just sends a shared memory to backend. Then backend use it to record inflight I/O and do I/O replay when necessary. Thanks, Yongji