Bug 2092756

Summary: [RFE] RFE backport allow enabling ZEROCOPY live migration to libvirt-python on RHEL8 to be consumed by VDSM
Product: Red Hat Enterprise Linux 8 Reporter: Nils Koenig <nkoenig>
Component: libvirt-pythonAssignee: Jiri Denemark <jdenemar>
Status: CLOSED ERRATA QA Contact: lcheng
Severity: high Docs Contact:
Priority: high    
Version: 8.7CC: berrange, jdenemar, kanderso, lmen, nkoenig, virt-maint, xuzhang, ymankad
Target Milestone: rcKeywords: FutureFeature, Triaged, ZStream
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-python-8.0.0-2.module+el8.7.0+15832+54d7352d Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 2119429 (view as bug list) Environment:
Last Closed: 2022-11-08 09:19:55 UTC Type: Feature Request
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2089433, 2092752    
Bug Blocks: 2119429    

Comment 2 Jiri Denemark 2022-06-24 12:30:00 UTC
Nothing to be done here, just rebuild libvirt-python once libvirt gets the backport.

Comment 6 lcheng 2022-07-14 10:30:09 UTC
Test with python3-libvirt-8.0.0-2.module+el8.7.0+15832+54d7352d.x86_64, libvirt-8.0.0-9.module+el8.7.0+15830+85788ab7.x86_64 and qemu-kvm-6.2.0-17.module+el8.7.0+15924+b11d8c3f.x86_64.


Scenario 1(negative): parallel + zerocopy + native_tls + p2p

# python
Python 3.6.8 (default, Jun 14 2022, 09:19:35) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> srcconn = libvirt.open()
>>> desturi = "qemu+tcp://cloud-qe-09.idmqe.lab.eng.bos.redhat.com/system"
>>> destconn = libvirt.open("qemu+tcp://cloud-qe-09.idmqe.lab.eng.bos.redhat.com/system")
>>> dom = srcconn.lookupByName("avocado-vt-vm1")
>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_ZEROCOPY|libvirt.VIR_MIGRATE_TLS|libvirt.VIR_MIGRATE_PARALLEL|libvirt.VIR_MIGRATE_PEER2PEER
>>> dom.migrateToURI3(desturi, {'bandwidth': 100}, flags)
libvirt: QEMU Driver error : operation failed: migration out job: Requested Zero Copy feature is not available: Invalid argument
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/libvirt.py", line 2126, in migrateToURI3
    raise libvirtError('virDomainMigrateToURI3() failed')
libvirt.libvirtError: operation failed: migration out job: Requested Zero Copy feature is not available: Invalid argument



Scenario 2(negative): parallel + zerocopy + native_tls + non-p2p

>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_ZEROCOPY|libvirt.VIR_MIGRATE_TLS|libvirt.VIR_MIGRATE_PARALLEL
>>> dom.migrate3(destconn, {'bandwidth': 100}, flags)
libvirt: QEMU Driver error : operation failed: migration out job: Requested Zero Copy feature is not available: Invalid argument
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/libvirt.py", line 1950, in migrate3
    raise libvirtError('virDomainMigrate3() failed')
libvirt.libvirtError: operation failed: migration out job: Requested Zero Copy feature is not available: Invalid argument
>>> 



Scenario 3(negative): non_parallel + zerocopy + p2p

>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_ZEROCOPY|libvirt.VIR_MIGRATE_PEER2PEER
>>> dom.migrateToURI3(desturi, {'bandwidth': 100}, flags)
libvirt: QEMU Driver error : Requested operation is not valid: zero-copy is only available for parallel migration
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/libvirt.py", line 2126, in migrateToURI3
    raise libvirtError('virDomainMigrateToURI3() failed')
libvirt.libvirtError: Requested operation is not valid: zero-copy is only available for parallel migration



Scenario 4(negative): non_parallel + zerocopy + non_p2p

>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_ZEROCOPY
>>> dom.migrate3(destconn, {'bandwidth': 100}, flags)
libvirt: QEMU Driver error : Requested operation is not valid: zero-copy is only available for parallel migration
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/libvirt.py", line 1950, in migrate3
    raise libvirtError('virDomainMigrate3() failed')
libvirt.libvirtError: Requested operation is not valid: zero-copy is only available for parallel migration



Scenario 5: parallel + zerocopy + non_p2p

>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_PARALLEL|libvirt.VIR_MIGRATE_ZEROCOPY
>>> dom.migrate3(destconn, {'bandwidth': 10}, flags)
<libvirt.virDomain object at 0x7f72ba3f2588>



Scenario 6: parallel + zerocopy + p2p

>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_PEER2PEER|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_PARALLEL|libvirt.VIR_MIGRATE_ZEROCOPY
>>> dom.migrateToURI3(desturi, {'bandwidth': 10}, flags)
0



Scenario 7: parallel + zerocopy, abort migration, then migrate again.

terminal 1:

>>> srcconn = libvirt.open()
>>> dom = srcconn.lookupByName("avocado-vt-vm1")
>>> destconn = libvirt.open("qemu+tcp://cloud-qe-09.idmqe.lab.eng.bos.redhat.com/system")
>>> flags = libvirt.VIR_MIGRATE_LIVE|libvirt.VIR_MIGRATE_AUTO_CONVERGE|libvirt.VIR_MIGRATE_POSTCOPY|libvirt.VIR_MIGRATE_ZEROCOPY|libvirt.VIR_MIGRATE_PARALLEL
>>> dom.migrate3(destconn, {'bandwidth': 100}, flags)
libvirt: QEMU Driver error : operation aborted: migration out job: canceled by client
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/libvirt.py", line 1950, in migrate3
    raise libvirtError('virDomainMigrate3() failed')
libvirt.libvirtError: operation aborted: migration out job: canceled by client
>>> dom.migrate3(destconn, {'bandwidth': 100}, flags)
<libvirt.virDomain object at 0x7f30332e94a8>



terminal 2:
# virsh domjobabort avocado-vt-vm1
setlocale: No such file or directory

Comment 13 errata-xmlrpc 2022-11-08 09:19:55 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (Low: virt:rhel and virt-devel:rhel security, bug fix, and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2022:7472