Bug 1275297

Summary: Fullscreen multi monitor setup: virt-viewer doesn't adjust resolution for second monitor
Product: Red Hat Enterprise Linux 7 Reporter: Andrei Stepanov <astepano>
Component: virt-viewerAssignee: Virt Viewer Maint <virt-viewer-maint>
Status: CLOSED DUPLICATE QA Contact: Virtualization Bugs <virt-bugs>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 7.3CC: astepano, dblechte, fidencio, fziglio, juzhou, mxie, mzhan, pgrunt, rbalakri, tpelka, tzheng, xiaodwan, ylavi
Target Milestone: rc   
Target Release: 7.3   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-03-15 16:28:58 UTC Type: Bug
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: 1194354    
Bug Blocks:    
Attachments:
Description Flags
remote-viewer log
none
remote-viewer log
none
Hook to setup memory for vdsm none

Description Andrei Stepanov 2015-10-26 13:47:17 UTC
Created attachment 1086521 [details]
remote-viewer log

remote-viewer should adjust resolution of virtual display to real monitor's resolution in full-screen mode, but it doesn't

Bug is 100% reproducible 

Client:
virt-viewer-2.0-6.el7.x86_64

Guest:
spice-vdagent-0.14.0-10.el7.x86_64
xorg-x11-drv-qxl-0.1.1-18.el7.x86_64
3.10.0-323.el7.x86_64

Host:
qemu-kvm-rhev-2.3.0-31.el7.x86_64
kernel is 3.10.0-324.el7.x86_64

It is necessary a guest with two real monitors.

Steps to Reproduce:
1. Go to RHEV-M web portal
2. Shutdown guest os
3. Start-up guest os
4. Wait some time
5. Unsure in console settings for VM option "Open in Full Screen" is _UNCHECKED_
5. Press "Console" button to connect to VM
6. Should appear one virt-viewer window
7. Login to guest OS
8. Activate second window in virt-viewer:  View->Displays->Check Display 2
9. Place each virt-viewer window to client's monitor.
10. For each widows press: View->FullScreen

Last chosen virt-viewer window goes to fullscreen but doesn't adjust resolution to clients monitor.

See virt-viewer logs

Comment 2 Andrei Stepanov 2015-10-26 14:32:27 UTC
I found a way to reproduce a bug without RHEV-M.
But, it is necessary to have a guest with 3 real monitors.
The behavior is a bit different: no one from 3 displays adjust their resolution in fullscreen mode.

It is also 100% reproducible.

Steps:

1. Run guest:

/usr/libexec/qemu-kvm -m 1024 -spice port=$SRCPORT,disable-ticketing,addr=$SRCIPADDR,seamless-migration=on -vga qxl -device virtio-serial -chardev spicevmc,id=vdagent,name=vdagent,debug=0 -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -readconfig /etc/qemu-kvm/ich9-ehci-uhci.cfg  -chardev spicevmc,name=usbredir,id=usbredirchardev1  -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=3   $GUEST_IMAGE_PATH -monitor stdio -usb    -device intel-hda -device hda-duplex

2. Connect to VM with remote-viewer spice://x.x.x.x:3000

3. Enable 3 monitors in remote-viewer

4. Move each display to corresponding client's monitor

5. Try to switch to full screen View->Full screen

6. No one of virt-viewer's displays adjusts resolution to according monitor's resolution.


Logs for remote-viewer follow:

Comment 3 Andrei Stepanov 2015-10-26 14:33:29 UTC
Created attachment 1086530 [details]
remote-viewer log

Comment 4 Andrei Stepanov 2015-10-26 15:30:37 UTC
It seems, setup where client has more then 2 real monitors is quite unstable (Linux guest). There are no enough video memory for Linux guests.

It is a serious problem for multi-monitor client.

Next line somehow helps in certain cases:

-vga qxl -global qxl-vga.ram_size=134217728 -global qxl-vga.vram_size=134217728 -global qxl-vga.vgamem_mb=32

Comment 5 Fabiano Fidêncio 2015-10-26 21:13:07 UTC
Yeah, another issue related to the amount of memory used for ram and vram size.
I'm setting Bug 1194354 as dependency of this one.

Comment 6 tingting zheng 2015-10-29 02:39:40 UTC
Hi,Yaniv

I noticed you've added "Target Release" as 7.2 on this bug and bug 1273055,would these 2 bugs be fixed on rhel7.2? As rhel7.2 release date is near,if so,when will be the new build coming?thanks.

Comment 7 Yaniv Lavi 2015-10-29 12:59:33 UTC
(In reply to tingting zheng from comment #6)
> Hi,Yaniv
> 
> I noticed you've added "Target Release" as 7.2 on this bug and bug
> 1273055,would these 2 bugs be fixed on rhel7.2? As rhel7.2 release date is
> near,if so,when will be the new build coming?thanks.

I just matched the flag to target for report queries. I don't see any ack for these, so not sure what timeline these will be fixed in.

Comment 8 tingting zheng 2015-10-30 02:27:39 UTC
(In reply to Yaniv Dary from comment #7)
> (In reply to tingting zheng from comment #6)
> > Hi,Yaniv
> > 
> > I noticed you've added "Target Release" as 7.2 on this bug and bug
> > 1273055,would these 2 bugs be fixed on rhel7.2? As rhel7.2 release date is
> > near,if so,when will be the new build coming?thanks.
> 
> I just matched the flag to target for report queries. I don't see any ack
> for these, so not sure what timeline these will be fixed in.

ok,got it.

@Fabiano

Would you pls help to check this bug and bug 1273055,if it will not fixed on rhel7.2,maybe the flag need to changed to rhel7.3?thanks.

Comment 9 David Blechter 2015-11-03 12:56:57 UTC
(In reply to Andrei Stepanov from comment #4)
> It seems, setup where client has more then 2 real monitors is quite unstable
> (Linux guest). There are no enough video memory for Linux guests.
> 
> It is a serious problem for multi-monitor client.
> 
> Next line somehow helps in certain cases:
> 
> -vga qxl -global qxl-vga.ram_size=134217728 -global
> qxl-vga.vram_size=134217728 -global qxl-vga.vgamem_mb=32

1.for 3 or 4 displays the RHEVM sets the ram size to 256MB
2. Be sure that all monitors has the resolution 2560x1600 or below

can you confirm?

Comment 10 Andrei Stepanov 2015-11-03 13:21:49 UTC
Fabiano Fidêncio has saw my setup.
It was a setup with 4 monitors:

Native resolutions are:

One FullHD: 1080x1920
Two Dell's 1907fpt: 1280x1024
One Dell's 1708fp: 1280x1024

Comment 11 Fabiano Fidêncio 2015-11-03 14:29:29 UTC
Andrei, I saw your setup. But the David's question still stands.

As far as I understand you were running RHEVM set up to use 2 monitors and then turning on the 3rd and 4th display. Is it the case?
When running RHEVM set up to use 4 monitors, are you still able to reproduce the same problem?

Comment 13 Andrei Stepanov 2015-11-04 10:56:16 UTC
I can confirm that I can reproduce bug for next cases:

1. guest VM has been assigned 2 monitors in RHEV-M webportal.
2. guest VM has been assigned 4 monitors in RHEV-M webportal.

Bug is reproducible for: VM->Edit->Console->Monitors == 1,2,4 (`Single PCI' is checked)

Comment 14 David Blechter 2015-11-04 12:49:38 UTC
(In reply to Andrei Stepanov from comment #13)
> I can confirm that I can reproduce bug for next cases:
> 
> 1. guest VM has been assigned 2 monitors in RHEV-M webportal.

This case is not a bug as the memory was allocated for 2 displays, and you added more. Base on your comment #4

> 2. guest VM has been assigned 4 monitors in RHEV-M webportal.

This is a bug.

> 
> Bug is reproducible for: VM->Edit->Console->Monitors == 1,2,4 (`Single PCI'
> is checked)

Comment 15 Fabiano Fidêncio 2015-11-06 18:56:54 UTC
Seems that we are dealing with 2 different problems here.

1) 2 displays: virt-viewer cannot adjust resolution for the 2nd fullscreen display
The here is the amount of memory being set to vram. At least in the RHEVM-3.6 instance being used, I found out that although the ram size being set correctly (64MB per head), the vram size is always set as 32MB.
The correct amount of memory that has to be set for vram is 32MB *per* *head*.

I've modified the vsdm hook (done and) used by astepano in order to set the correct amount of memory for vram and I've been able to test that it works pretty well for 2 monitors.

So, for this, I'd suggest to move this bug to ovirt/libvirt/vsdm/whatever is responsible for this part.

2) 4 displays: virt-viewer cannot adjust resolution for 3rd (and 4th) fullscreen display
Here, considering the problem 1 has been solved and that the correct amount of ram is being used, we stil have this problem happening. From now on I will be focusing on this problem ...

While testing situation 2) I saw more 2 bugs happening:

3) Parts of one display shows, in a smaller size, another display. When you click on that part, the commands actually end up in the smaller display (in the window that shows this display). Kinda tricky to explain :-\

4) virt-viewer is consuming 70~80% of the memory when using 4 monitors.

Andrei, with the hook installed to /usr/libexec/vdsm/hooks/before_vm_start/53_spice, I did some changes there to use the proper amount of ram/vram according to the number of heads. Can you confirm that the situation 1) is solved by this? Can you confirm that situation 2) is not solved yet? Can you test if the problem 3) also happens to you? We can sit together and try to reproduce this issue. 4) Can you check this one as well?

If situation 1) is really solved by the hook, please, open a bug in the right component and I will keep using this bug to handle the situation 2). If situations 3) or/and 4) happens, please, open a new bug for them.

Comment 16 Andrei Stepanov 2015-11-09 12:51:00 UTC
Created attachment 1091730 [details]
Hook to setup memory for vdsm

Put to /usr/libexec/vdsm/hooks/before_vm_start/
chmod 755 it

Comment 17 Andrei Stepanov 2015-11-09 13:17:13 UTC
Preface: client is RHEL7.2 with 4 real monitors.


Case 1: virt-viewer with 2 active displays.

VM guest has been configured in RHEV-M for 2 monitors.

Without hook:

<model type='qxl' ram='131072' vram='32768' vgamem='16384' heads='2'/>
ram_size=134217728,vram_size=33554432,vgamem_mb=16
Monitor second monitor doesn't adjust resolution in fullscreen.

With hook:

<model type='qxl' ram='131072' vram='65536' vgamem='16384' heads='2'/>
ram_size=134217728,vram_size=67108864,vgamem_mb=16
Monitor second monitor doesn't adjust resolution in fullscreen.

So, this is definitely bug against libvirt/vdsm/ovirt


Case 2: virt-viewer with 3 active displays.

VM guest has been configured in RHEV-M for 4 monitors.

Without hook:

<model type='qxl' ram='262144' vram='32768' vgamem='16384' heads='4'/>
ram_size=268435456,vram_size=33554432,vgamem_mb=16

With hook:

<model type='qxl' ram='262144' vram='131072' vgamem='16384' heads='4'/>
-device qxl-vga,id=video0,ram_size=268435456,vram_size=134217728,vgamem_mb=16

0. Make hook active & open three VV displays.
1. Put first VV display to full screen.
2. Put second VV display to full screen.

Result: parts of one display shows, in a smaller size, another display.


Case 3: virt-viewer with 4 active displays.

Start pushing VV displays to fullscreen.
Order doesn't matter.
Result: virt-viewer cannot adjust resolution for latest-pushed fullscreen displays.

Comment 18 Fabiano Fidêncio 2015-11-09 22:37:12 UTC
Andrei, can you do the last round of tests for us?
I have changed the hook, again.
Now it's setting up:
ramsize: 64MB * number of heads.
vramsize: 32MB * number of heads.
vgamem = 16MB * number of heads.

With this setup, I can have 4 FullHD monitors fullscreen without problem and then we can just re-assign this bug to vdsm/libvirt guys. Can you confirm if it works for you?

Please, remember to do chmod 755 in the 53_spice file.

Comment 19 Andrei Stepanov 2015-11-10 10:18:23 UTC
With above hook VM starts with next parameters:
<model type='qxl' ram='262144' vram='131072' vgamem='65536' heads='4'/>
ram_size=268435456,vram_size=134217728,vgamem_mb=64

Client with 4 monitors works well with this VM.
Client can push all four displays to dedicated monitors.
In fullscreen mode virt-viewer adjusts resolution to monitors' native resolution.

Comment 22 Frediano Ziglio 2016-02-18 13:36:24 UTC
See https://bugzilla.redhat.com/show_bug.cgi?id=1275539#c12