Discussion:
[libvirt-users] Increasing video memory available to Windows
Alex
2017-07-22 19:03:06 UTC
Permalink
Hi,
I have a fedora25 system with a Windows10 host and would like to use
it for photoshop. However, it complains the video memory is too low.
I'm using the QXL driver and it appears to be limited to 256MB? I've
installed the Red Hat QXL driver in Windows.

I have 4GB of memory allocated overall, and could allocate more if necessary.

How do I increase the available video memory? Photoshop reports that
it's detected less than 512MB and isn't operating properly.

When I view "Adapter Properties" is reports there is 2047 MB of
available graphics memory and
2047 MB Shared System Memory.

Attempts to modify with "virsh edit" the vram and other video-related
variables for the host have failed.

Included below is my qemu XML configuration. Any idea greatly appreciated.

<domain type='kvm'>
<name>alex-win10</name>
<uuid>337f9410-3286-4ef5-a3e8-8271e38ea1e5</uuid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-2.4'>hvm</type>
</os>
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
</hyperv>
<vmport state='off'/>
</features>
<cpu mode='host-model'>
<model fallback='allow'/>
</cpu>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/alex-win10.qcow2'/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<source dev='/dev/sr0'/>
<target dev='hdb' bus='ide'/>
<readonly/>
<boot order='1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01'
function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
</controller>
<controller type='scsi' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09'
function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:52:6b:61'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='536870912'
heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08'
function='0x0'/>
</memballoon>
</devices>
</domain>
Pavel Hrdina
2017-07-23 19:45:23 UTC
Permalink
Post by Alex
Hi,
I have a fedora25 system with a Windows10 host and would like to use
it for photoshop. However, it complains the video memory is too low.
I'm using the QXL driver and it appears to be limited to 256MB? I've
installed the Red Hat QXL driver in Windows.
What driver did you installed? There are two drivers, qxl and qxldod,
for windows 10 you need the qxldod and I would give it a try to use the
latest drivers [1], not the stable ones.

[1] <https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/>
Post by Alex
I have 4GB of memory allocated overall, and could allocate more if necessary.
How do I increase the available video memory? Photoshop reports that
it's detected less than 512MB and isn't operating properly.
When I view "Adapter Properties" is reports there is 2047 MB of
available graphics memory and
2047 MB Shared System Memory.
Attempts to modify with "virsh edit" the vram and other video-related
variables for the host have failed.
Included below is my qemu XML configuration. Any idea greatly appreciated.
<domain type='kvm'>
<name>alex-win10</name>
<uuid>337f9410-3286-4ef5-a3e8-8271e38ea1e5</uuid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-2.4'>hvm</type>
</os>
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
</hyperv>
<vmport state='off'/>
</features>
<cpu mode='host-model'>
<model fallback='allow'/>
</cpu>
Small tip, if you don't care about migration and this is just a guest
that will be used only on one host, I would go with:

<cpu mode='host-passthrough' check='none'>
<topology sockets='1' cores='2' threads='1'/>
</cpu>

The "host-passthrough" is a mode where it tries to present the CPU to
guest as close as possible to the host CPU. The topology configuration
is required for windows, because of licensing, it supports only 2
sockets, so for your configuration it works but if you would like to add
more vcpus to the guest, it could cause problems. Without this
configuration QEMU by default sets the number of sockets and each socket
has only 1 core and 1 thread.
Post by Alex
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/alex-win10.qcow2'/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07'
function='0x0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<source dev='/dev/sr0'/>
<target dev='hdb' bus='ide'/>
<readonly/>
<boot order='1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06'
function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01'
function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05'
function='0x0'/>
</controller>
<controller type='scsi' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09'
function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:52:6b:61'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03'
function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='536870912'
heads='1' primary='yes'/>
So there are some limits for the memory configuration, if you start the
guest and run "virsh dumpxml $guestName" you will see how much memory is
actually configure. It should be this:

ram='524288' vram='65536' vgamem='262144'

I have a windows 10 guest installed and I installed a Photoshop 12.0 and
it starts without any warning.

You don't need to set the vgamem that large, 32M should be good enough,
the formula to calculate the vgamem is:

"screen_width * screen_height * 4"

And I would set the "ram" to 512M, however I'm not sure how this
actually affects the video memory seen by guest. The documentation is
really poor.

Anyway, the same configuration works for me so I don't know what else
could help you especially while I'm not able to reproduce the issue with
video memory.

Pavel
Post by Alex
<address type='pci' domain='0x0000' bus='0x00' slot='0x02'
function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08'
function='0x0'/>
</memballoon>
</devices>
</domain>
Alex
2017-08-05 20:13:52 UTC
Permalink
Hi,
Post by Pavel Hrdina
Post by Alex
Hi,
I have a fedora25 system with a Windows10 host and would like to use
it for photoshop. However, it complains the video memory is too low.
I'm using the QXL driver and it appears to be limited to 256MB? I've
installed the Red Hat QXL driver in Windows.
What driver did you installed? There are two drivers, qxl and qxldod,
for windows 10 you need the qxldod and I would give it a try to use the
latest drivers [1], not the stable ones.
[1] <https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/>
It looks like that fixed it. I must have been using the x86 version
all along, thinking the amd64 was only for AMD chips, and I have an
Intel.

I tried to change the CPU settings to those you recommended, and it
didn't like it. When I use 'virsh edit" for the host, make the cpu
changes, then try to save, I receive:

error: XML document failed to validate against schema: Unable to
validate doc against /usr/share/libvirt/schemas/domain.rng
Extra element cpu in interleave
Element domain failed to validate content

Failed. Try again? [y,n,i,f,?]:

I currently have the following CPU info:

<vcpu placement='static'>2</vcpu>
<cpu mode='host-model'>
<model fallback='allow'/>
</cpu>

When I made the CPU changes, I kept the vcpu config and replaced the
"cpu mode..." section.

This is the real info from /proc/cpuinfo. Do you have any idea what I
might be doing wrong?

processor : 7
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
stepping : 3
microcode : 0x22
cpu MHz : 3509.777
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 3
cpu cores : 4
apicid : 7
initial apicid : 7
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts
rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq
dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm
pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave
avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm
ida arat pln pts
bugs :
bogomips : 6803.22
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

Thanks,
Alex
Pavel Hrdina
2017-08-14 16:48:48 UTC
Permalink
Post by Alex
Hi,
Post by Pavel Hrdina
Post by Alex
Hi,
I have a fedora25 system with a Windows10 host and would like to use
it for photoshop. However, it complains the video memory is too low.
I'm using the QXL driver and it appears to be limited to 256MB? I've
installed the Red Hat QXL driver in Windows.
What driver did you installed? There are two drivers, qxl and qxldod,
for windows 10 you need the qxldod and I would give it a try to use the
latest drivers [1], not the stable ones.
[1] <https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/>
It looks like that fixed it. I must have been using the x86 version
all along, thinking the amd64 was only for AMD chips, and I have an
Intel.
That's a common mistake, amd64 is an official name for that
architecture because it was AMD who introduced that architecture, but
nowadays x86_64 is used. It's the same as i386 and x86, the original
32-bit architecture was introduced by Intel.
Post by Alex
I tried to change the CPU settings to those you recommended, and it
didn't like it. When I use 'virsh edit" for the host, make the cpu
error: XML document failed to validate against schema: Unable to
validate doc against /usr/share/libvirt/schemas/domain.rng
Extra element cpu in interleave
Element domain failed to validate content
Oh, right, that was my fault, I didn't realize that you probably have
older version of libvirt, try to use this configuration:

<cpu mode='host-passthrough'>
<topology sockets='1' cores='2' threads='1'/>
</cpu>

There is no "check" attribute for "cpu" element in older libvirts.

Pavel

Continue reading on narkive:
Loading...