[Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting

Anthony PERARD posted 1 patch 4 years, 5 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/xen tags/patchew/20191031121727.287419-1-anthony.perard@citrix.com
tools/libxl/libxl_pci.c | 2 ++
1 file changed, 2 insertions(+)
[Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting
Posted by Anthony PERARD 4 years, 5 months ago
After sending the 'device_del' command for a PCI passthrough device,
we wait until QEMU has effectively deleted the device, this involves
executing more QMP commands. While waiting, libxl hold the connection.

It isn't necessary to hold the connection and it prevents others from
making progress, so this patch releases the QMP connection.

For background:
    e.g., when a guest is created with several pci passthrough
    attached, on `xl destroy` all the devices needs to be detach, and
    this is usually what happens:
	- 'device_del' called for the 1st pci device
	- 'query-pci' checking if pci still there, it is
	- wait 1s
	- 'query-pci' checking again, and it's gone
	-> now the same can be done for the second pci device, so
	plenty of waiting on others when pci detach can be done in
	parallel.

    On shutdown, libxl usually keeps waiting because QEMU never
    releases the device because the guest kernel never responds QEMU's
    unplug queries. So detaching of the 1st device waits until a
    timeout stops it, and since the same timeout is setup at the same
    time for the other devices to detach, the 'device_del' command is
    never sent for those.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 tools/libxl/libxl_pci.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
index b5444d15523a..3262c2952baa 100644
--- a/tools/libxl/libxl_pci.c
+++ b/tools/libxl/libxl_pci.c
@@ -2061,6 +2061,8 @@ static void pci_remove_qmp_query_cb(libxl__egc *egc,
 
     if (rc) goto out;
 
+    libxl__ev_qmp_dispose(gc, qmp);
+
     asked_id = GCSPRINTF(PCI_PT_QDEV_ID,
                          pcidev->bus, pcidev->dev, pcidev->func);
 
-- 
Anthony PERARD


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting
Posted by Jürgen Groß 4 years, 5 months ago
On 31.10.19 13:17, Anthony PERARD wrote:
> After sending the 'device_del' command for a PCI passthrough device,
> we wait until QEMU has effectively deleted the device, this involves
> executing more QMP commands. While waiting, libxl hold the connection.
> 
> It isn't necessary to hold the connection and it prevents others from
> making progress, so this patch releases the QMP connection.
> 
> For background:
>      e.g., when a guest is created with several pci passthrough
>      attached, on `xl destroy` all the devices needs to be detach, and
>      this is usually what happens:
> 	- 'device_del' called for the 1st pci device
> 	- 'query-pci' checking if pci still there, it is
> 	- wait 1s
> 	- 'query-pci' checking again, and it's gone
> 	-> now the same can be done for the second pci device, so
> 	plenty of waiting on others when pci detach can be done in
> 	parallel.
> 
>      On shutdown, libxl usually keeps waiting because QEMU never
>      releases the device because the guest kernel never responds QEMU's
>      unplug queries. So detaching of the 1st device waits until a
>      timeout stops it, and since the same timeout is setup at the same
>      time for the other devices to detach, the 'device_del' command is
>      never sent for those.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Release-acked-by: Juergen Gross <jgross@suse.com>


Juergen


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting
Posted by Sander Eikelenboom 4 years, 5 months ago
On 08/11/2019 07:07, Jürgen Groß wrote:
> On 31.10.19 13:17, Anthony PERARD wrote:
>> After sending the 'device_del' command for a PCI passthrough device,
>> we wait until QEMU has effectively deleted the device, this involves
>> executing more QMP commands. While waiting, libxl hold the connection.
>>
>> It isn't necessary to hold the connection and it prevents others from
>> making progress, so this patch releases the QMP connection.
>>
>> For background:
>>      e.g., when a guest is created with several pci passthrough
>>      attached, on `xl destroy` all the devices needs to be detach, and
>>      this is usually what happens:
>> 	- 'device_del' called for the 1st pci device
>> 	- 'query-pci' checking if pci still there, it is
>> 	- wait 1s
>> 	- 'query-pci' checking again, and it's gone
>> 	-> now the same can be done for the second pci device, so
>> 	plenty of waiting on others when pci detach can be done in
>> 	parallel.
>>
>>      On shutdown, libxl usually keeps waiting because QEMU never
>>      releases the device because the guest kernel never responds QEMU's
>>      unplug queries. So detaching of the 1st device waits until a
>>      timeout stops it, and since the same timeout is setup at the same
>>      time for the other devices to detach, the 'device_del' command is
>>      never sent for those.
>>
>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Release-acked-by: Juergen Gross <jgross@suse.com>
> 
> 
> Juergen


Hi Juergen,

Since a lot more recent patches have been committed, but these don't
seem to.
I was wondering if this one fell through the cracks.

--
Sander

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting
Posted by Ian Jackson 4 years, 5 months ago
Anthony PERARD writes ("[XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting"):
> After sending the 'device_del' command for a PCI passthrough device,
> we wait until QEMU has effectively deleted the device, this involves
> executing more QMP commands. While waiting, libxl hold the connection.

I just read the code here.  It seems to poll on a timer.  How ugly.

> It isn't necessary to hold the connection and it prevents others from
> making progress, so this patch releases the QMP connection.

Right.

>      if (rc) goto out;
>  
> +    libxl__ev_qmp_dispose(gc, qmp);
> +
>      asked_id = GCSPRINTF(PCI_PT_QDEV_ID,

It's not it entirely clear to me why you dispose this before the error
exit, but I think it doesn't matter.  If it does matter then please
explain :-).

Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

Thanks,
Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting
Posted by Wei Liu 4 years, 5 months ago
On Fri, Nov 15, 2019 at 05:23:28PM +0000, Ian Jackson wrote:
> Anthony PERARD writes ("[XEN PATCH for-4.13] libxl_pci: Don't hold QMP connection while waiting"):
> > After sending the 'device_del' command for a PCI passthrough device,
> > we wait until QEMU has effectively deleted the device, this involves
> > executing more QMP commands. While waiting, libxl hold the connection.
> 
> I just read the code here.  It seems to poll on a timer.  How ugly.
> 
> > It isn't necessary to hold the connection and it prevents others from
> > making progress, so this patch releases the QMP connection.
> 
> Right.
> 
> >      if (rc) goto out;
> >  
> > +    libxl__ev_qmp_dispose(gc, qmp);
> > +
> >      asked_id = GCSPRINTF(PCI_PT_QDEV_ID,
> 
> It's not it entirely clear to me why you dispose this before the error
> exit, but I think it doesn't matter.  If it does matter then please
> explain :-).
> 
> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>

PUshed.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel