[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC XEN PATCH for-4.13 0/4] Fix: libxl workaround, multiple connection to single QMP socket
Patch series available in this git branch: https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.fix-ev_qmp-multi-connect-v1 Hi, QEMU's QMP socket doesn't allow multiple concurrent connection. Also, it listen() on the socket with a `backlog' of only 1. On Linux at least, once that backlog is filled connect() will return EAGAIN if the socket fd is non-blocking. libxl may attempt many concurrent connect() attempt if for example a guest is started with several PCI passthrough devices, and a connect() failure lead to a failure to start the guest. Since we can't change the listen()'s `backlog' that QEMU use, we need other ways to workaround the issue. This patch series introduce a lock to acquire before attempting to connect() to the QMP socket. Since the lock might be held for to long, the series also introduce a way to cancel the acquisition of the lock, this means killing the process that tries to get the lock. Alternatively to this craziness, it might be possible to increase the `backlog' value by having libxl opening the QMP socket on behalf of QEMU. But this is only possible with a recent version of QEMU (2.12 or newer, released in Apr 2018, or qemu-xen-4.12 or newer). It would involve to discover QEMU's capability before we start the DM, which libxl isn't capable yet. Cheers, Anthony PERARD (4): libxl: Introduce libxl__ev_child_kill libxl: Introduce libxl__ev_qmplock libxl: libxl__ev_qmp_send now takes an egc libxl_qmp: Have a lock for QMP socket access tools/libxl/libxl_disk.c | 6 +-- tools/libxl/libxl_dm.c | 8 ++-- tools/libxl/libxl_dom_save.c | 2 +- tools/libxl/libxl_dom_suspend.c | 2 +- tools/libxl/libxl_domain.c | 8 ++-- tools/libxl/libxl_event.c | 3 +- tools/libxl/libxl_fork.c | 55 ++++++++++++++++++++++++ tools/libxl/libxl_internal.c | 31 +++++++++++++- tools/libxl/libxl_internal.h | 53 +++++++++++++++++------ tools/libxl/libxl_pci.c | 8 ++-- tools/libxl/libxl_qmp.c | 75 +++++++++++++++++++++++++-------- tools/libxl/libxl_usb.c | 28 ++++++------ 12 files changed, 219 insertions(+), 60 deletions(-) -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |