Bug 2119429

Summary: [RFE] RFE backport allow enabling ZEROCOPY live migration to libvirt-python on RHEL8 to be consumed by VDSM [rhel-8.6.0.z]
Product: Red Hat Enterprise Linux 8 Reporter: RHEL Program Management Team <pgm-rhel-tools>
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, mzamazal, nkoenig, virt-maint, xuzhang, yalzhang, ymankad
Target Milestone: rcKeywords: FutureFeature, Triaged, ZStream
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-python-8.0.0-1.1.el8 Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: 2092756 Environment:
Last Closed: 2022-09-13 09:46:36 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: 2092756    
Bug Blocks:    

Comment 1 Jiri Denemark 2022-08-18 14:56:56 UTC
Just a rebuild, no patch needed.

Comment 4 lcheng 2022-08-29 02:27:28 UTC
Verify with python3-libvirt-8.0.0-1.1.module+el8.6.0+16381+3abc475c.x86_64.


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

# python
Python 3.6.8 (default, Jan 14 2022, 11:04:20) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> srcconn = libvirt.open()
>>> desturi = "qemu+tcp://lenovo-sr630-14.lab.eng.pek2.redhat.com/system"
>>> destconn = libvirt.open(desturi)
>>> 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 : internal error: unable to execute QEMU command 'migrate-set-parameters': Zero copy only available for non-compressed non-TLS multifd 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: internal error: unable to execute QEMU command 'migrate-set-parameters': Zero copy only available for non-compressed non-TLS multifd migration



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 : internal error: unable to execute QEMU command 'migrate-set-parameters': Zero copy only available for non-compressed non-TLS multifd 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: internal error: unable to execute QEMU command 'migrate-set-parameters': Zero copy only available for non-compressed non-TLS multifd migration



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 0x7fdf125b5550>



Scenario 6: parallel + zerocopy + p2p

>>> srcconn = libvirt.open()
>>> destconn = libvirt.open(desturi)
>>> dom = srcconn.lookupByName("avocado-vt-vm1")
>>> 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': 1000}, 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(desturi)
>>> 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': 10}, 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': 10}, flags)
<libvirt.virDomain object at 0x7fdf125afda0>


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

Comment 8 errata-xmlrpc 2022-09-13 09:46:36 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 (virt:rhel and virt-devel:rhel 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/RHBA-2022:6446