From a2c7d62ec4582787f6bad6ed013ef0f9ddf4c775 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Sat, 11 Apr 2015 17:35:40 -0400 Subject: [PATCH] guest: Disable spice image compression for local VMs The image compression setting has a noticably detrimental effect on spice graphics quality. It's meant to be used for spice VDI but the vast majority of people don't use spice in a way that makes bandwidth usage matter. Boxes has already done this for a while as well: https://mail.gnome.org/archives/commits-list/2013-March/msg14904.html Turn it off by default if creating the VM on a local connection. --- .../compare/virt-convert-ovf-compare.xml | 4 +- .../compare/virt-convert-vmx-compare.xml | 4 +- .../compare/virt-install-f21-kvm-remote.xml | 66 +++++++++++++++++++ .../compare/virt-install-kvm-centos7.xml | 8 ++- .../compare/virt-install-kvm-f14-url.xml | 8 ++- .../compare/virt-install-kvm-rhel6.xml | 8 ++- .../compare/virt-install-kvm-rhel7.xml | 8 ++- .../compare/virt-install-kvm-win2k3-cdrom.xml | 12 +++- .../compare/virt-install-location-iso.xml | 8 ++- .../compare/virt-install-many-devices.xml | 8 ++- .../virt-install-ppc64-machdefault-f20.xml | 4 +- .../virt-install-ppc64-pseries-f20.xml | 4 +- .../compare/virt-install-q35-defaults.xml | 8 ++- .../compare/virt-install-qemu-plain.xml | 4 +- .../virt-install-singleton-config-1.xml | 4 +- .../compare/virt-install-win7-uefi.xml | 12 +++- tests/clitest.py | 2 + .../ovf2libvirt_ovf_directory.libvirt | 4 +- .../libvirt_output/ovf2libvirt_test1.libvirt | 4 +- .../ovf2libvirt_test1.libvirt.disk_qcow2 | 4 +- .../libvirt_output/ovf2libvirt_test2.libvirt | 4 +- .../vmx2libvirt_test-nodisks.libvirt | 4 +- .../libvirt_output/vmx2libvirt_test1.libvirt | 4 +- .../vmx2libvirt_test1.libvirt.disk_raw | 4 +- .../vmx2libvirt_vmx-dir.libvirt | 4 +- virtinst/guest.py | 19 ++++-- virtinst/support.py | 1 + 27 files changed, 186 insertions(+), 38 deletions(-) create mode 100644 tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml diff --git a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml index 690cfe94..df5cac19 100644 --- a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml +++ b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml @@ -53,7 +53,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml index 46facfc7..5d24a448 100644 --- a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml +++ b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml @@ -50,7 +50,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml new file mode 100644 index 00000000..841fce26 --- /dev/null +++ b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml @@ -0,0 +1,66 @@ + + foobar + 00000000-1111-2222-3333-444444444444 + 65536 + 65536 + 1 + + hvm + + + + + + + + + core2duo + + + + + + + destroy + restart + restart + + /usr/bin/qemu-kvm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml index e183b738..f43d71d2 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml @@ -48,7 +48,9 @@ - + + + @@ -114,7 +116,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-kvm-f14-url.xml b/tests/cli-test-xml/compare/virt-install-kvm-f14-url.xml index d996fd59..1df0cd66 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-f14-url.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-f14-url.xml @@ -47,7 +47,9 @@ - + + + @@ -100,7 +102,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml index e183b738..f43d71d2 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml @@ -48,7 +48,9 @@ - + + + @@ -114,7 +116,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml index e183b738..f43d71d2 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml @@ -48,7 +48,9 @@ - + + + @@ -114,7 +116,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml index 1144d7be..93651568 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml @@ -50,7 +50,9 @@ - + + + @@ -114,7 +116,9 @@ - + + + @@ -178,7 +182,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-location-iso.xml b/tests/cli-test-xml/compare/virt-install-location-iso.xml index 985c8665..e9cc4697 100644 --- a/tests/cli-test-xml/compare/virt-install-location-iso.xml +++ b/tests/cli-test-xml/compare/virt-install-location-iso.xml @@ -44,7 +44,9 @@ - + + + @@ -100,7 +102,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-many-devices.xml b/tests/cli-test-xml/compare/virt-install-many-devices.xml index 8c2adada..411edee8 100644 --- a/tests/cli-test-xml/compare/virt-install-many-devices.xml +++ b/tests/cli-test-xml/compare/virt-install-many-devices.xml @@ -177,9 +177,13 @@ - + + + - + + + diff --git a/tests/cli-test-xml/compare/virt-install-ppc64-machdefault-f20.xml b/tests/cli-test-xml/compare/virt-install-ppc64-machdefault-f20.xml index 32e6a73a..df864f1b 100644 --- a/tests/cli-test-xml/compare/virt-install-ppc64-machdefault-f20.xml +++ b/tests/cli-test-xml/compare/virt-install-ppc64-machdefault-f20.xml @@ -24,7 +24,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-ppc64-pseries-f20.xml b/tests/cli-test-xml/compare/virt-install-ppc64-pseries-f20.xml index 32e6a73a..df864f1b 100644 --- a/tests/cli-test-xml/compare/virt-install-ppc64-pseries-f20.xml +++ b/tests/cli-test-xml/compare/virt-install-ppc64-pseries-f20.xml @@ -24,7 +24,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml index b87afe1f..8b415d42 100644 --- a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml +++ b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml @@ -53,7 +53,9 @@ - + + + @@ -118,7 +120,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-qemu-plain.xml b/tests/cli-test-xml/compare/virt-install-qemu-plain.xml index f4fa66bf..c91342b5 100644 --- a/tests/cli-test-xml/compare/virt-install-qemu-plain.xml +++ b/tests/cli-test-xml/compare/virt-install-qemu-plain.xml @@ -42,7 +42,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-singleton-config-1.xml b/tests/cli-test-xml/compare/virt-install-singleton-config-1.xml index 5bc363ca..7e1d41ec 100644 --- a/tests/cli-test-xml/compare/virt-install-singleton-config-1.xml +++ b/tests/cli-test-xml/compare/virt-install-singleton-config-1.xml @@ -45,7 +45,9 @@ - + + + diff --git a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml index 4a9c53a4..dc55ee68 100644 --- a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml +++ b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml @@ -55,7 +55,9 @@ - + + + @@ -124,7 +126,9 @@ - + + + @@ -193,7 +197,9 @@ - + + + diff --git a/tests/clitest.py b/tests/clitest.py index 88cbe8b3..5f4c4c2e 100644 --- a/tests/clitest.py +++ b/tests/clitest.py @@ -78,6 +78,7 @@ test_files = { 'DEFAULTURI' : utils.defaulturi, 'REMOTEURI' : utils.uriremote, 'KVMURI' : utils.urikvm, + 'REMOTEKVMURI' : utils.urikvm + ",remote", 'KVMURI_NODOMCAPS' : utils.urikvm_nodomcaps, 'XENURI' : utils.urixencaps, 'XENIA64URI' : utils.urixenia64, @@ -779,6 +780,7 @@ c.add_invalid("--nodisks --boot network --arch mips --virt-type kvm") # Invalid c.add_invalid("--nodisks --boot network --paravirt --arch mips") # Invalid arch/virt combo c.add_compare("--os-variant win7 --cdrom %(EXISTIMG2)s --boot loader_type=pflash,loader=CODE.fd,nvram_template=VARS.fd --disk %(EXISTIMG1)s", "win7-uefi") # no HYPER-V c.add_compare("--machine q35 --cdrom %(EXISTIMG2)s --disk %(EXISTIMG1)s", "q35-defaults") # proper q35 disk defaults +c.add_compare("--connect %(REMOTEKVMURI)s --import --disk %(EXISTIMG1)s --os-variant fedora21", "f21-kvm-remote") ###################### diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt index 26128ab1..1c027b96 100644 --- a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt +++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt @@ -47,7 +47,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt index 5b892f35..6c2899a1 100644 --- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt +++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt @@ -53,7 +53,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 index ae563e8b..c55fe508 100644 --- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 +++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 @@ -53,7 +53,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt index 5d617959..034ae453 100644 --- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt +++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt @@ -48,7 +48,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt index ac2198e6..e092f6c2 100644 --- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt +++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt @@ -45,7 +45,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt index a82d2799..583669eb 100644 --- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt +++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt @@ -50,7 +50,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw index 85381cb9..003fe821 100644 --- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw +++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw @@ -50,7 +50,9 @@ - + + + diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt index 7821337a..bdb7498e 100644 --- a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt +++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt @@ -51,7 +51,9 @@ - + + + diff --git a/virtinst/guest.py b/virtinst/guest.py index f8d86d11..b85d662e 100644 --- a/virtinst/guest.py +++ b/virtinst/guest.py @@ -1022,10 +1022,7 @@ class Guest(XMLBuilder): sound.model = default def _set_graphics_defaults(self): - for gfx in self.get_devices("graphics"): - if gfx.type != "default": - continue - + def _set_type(gfx): gtype = self.default_graphics_type logging.debug("Using default_graphics=%s", gtype) if (gtype == "spice" and not @@ -1034,8 +1031,22 @@ class Guest(XMLBuilder): logging.debug("spice requested but HV doesn't support it. " "Using vnc.") gtype = "vnc" + gfx.type = gtype + for dev in self.get_devices("graphics"): + if dev.type == "default": + _set_type(dev) + + if (dev.type == "spice" and + not self.conn.is_remote() and + self.conn.check_support( + self.conn.SUPPORT_CONN_SPICE_COMPRESSION)): + logging.debug("Local connection, disabling spice image " + "compression.") + if dev.image_compression is None: + dev.image_compression = "off" + def _add_spice_channels(self): if self.skip_default_channel: return diff --git a/virtinst/support.py b/virtinst/support.py index a155e2b1..60dd2880 100644 --- a/virtinst/support.py +++ b/virtinst/support.py @@ -304,6 +304,7 @@ SUPPORT_CONN_DOMAIN_CAPABILITIES = _make( run_args=(None, None, None, None)) SUPPORT_CONN_VIDEO_NEW_RAM_OUTPUT = _make(version="1.2.11") SUPPORT_CONN_DOMAIN_RESET = _make(version="0.9.7", hv_version={"qemu": 0}) +SUPPORT_CONN_SPICE_COMPRESSION = _make(version="0.9.1") # Domain checks