On 2018/12/6 下午2:35,address@hidden wrote:
From: Xie Yongji<address@hidden>
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.
Thanks