Introduction
VDI (Virtual Desktop Infrastructure) in Horizon Clients refers to a technology that provides remote access to virtual desktops and applications hosted on a centralized server. VMware Horizon is a platform that delivers virtualized desktops and applications through a single platform, providing end-users with access to their personalized desktops and apps from any device, anywhere.
When Users were trying to connect to their VDI Desktops from a 5k Monitor or even from a 2K Monitor they were seen the Resolution of VDI as below:
Now the same is seen from the Horizon Client as well, it’s just the Screen Placement was in the Middle.
Checked the Client Settings and didn’t found any issues.
Environment Details:
Type of Pool: Instant Clone Desktop Pool
Display Protocol: Vmware BLAST
Horizon Client Version: 5.4.3
Agent Version: 7.6
So we investigated this further and checked the Resolution of the Machine Where the Client is running. The Display Resolution was 2560 x 1440.
While Checking this inside the VDI it was : 1364 x 673.
MKS Logs:
Here we can see the Display Resolutions available with the Horizon Client.
2020-08-04T11:22:36.655+08:00| main| I125: Current Display Settings:
2020-08-04T11:22:36.655+08:00| main| I125: Display: 0 size: 1920x1080 position: (2560, 176) name: \\.\DISPLAY1
2020-08-04T11:22:36.655+08:00| main| I125: Display: 1 size: 2560x1440 position: (0, 0) name: \\.\DISPLAY2
2020-08-04T11:22:36.656+08:00| main| I125: VIEWWINCLIENT: RegQueryValueEx(LowLevelHooksTimeout) failed: The system cannot find the file specified (2)
2020-08-04T11:22:37.139+08:00| main| I125: Hardware H.264 4:2:0 Available: up to 3840x2160
2020-08-04T11:22:38.606+08:00| main| I125: VIEWCLIENT: expected thumbprint for remote display: 2C:8A:9F:3D:B0:9A:04:28:27:7D:CA:AF:D6:7F:C4:52:81:30:B9:1C:49:6A:80:F2:BF:CF:C4:1F:4C:EC:BE:81
2020-08-04T11:22:38.630+08:00| main| I125: [BlastSocketClient] BlastSocket_Connect: Connect issued for Primary, clientContext->primarySocket: 250D388A730, error: 0.
2020-08-04T11:22:40.350+08:00| blastSocket| I125: [BlastSocketClient] BlastSocketClientHandleBlastHeadersFromUpgradeResponse: Failed to parse X-VMW-Blast-E2E-Rsp:
2020-08-04T11:22:40.350+08:00| blastSocket| I125: [BlastSocketClient] BlastSocketClientCheckUDPUpgradeResponse: Failed to parse X-VMW-Blast-UDP-E2E-Rsp:
2020-08-04T11:22:40.861+08:00| VVC dispatch event| W115: VNC CLIENT VVC UTIL: HasVvcRecvBufQueue failed at 7FF79CF6B590 next:0 prev:0
2020-08-04T11:22:41.353+08:00| VVC dispatch event| I125: VNC_DECODER: Sent following client caps: H.264-4:4:4 HEVC
2020-08-04T11:22:41.462+08:00| main| W115: BLASTFFMPEG: Using hardware decode context (H264, 4:2:0) (0@1364x672)
2020-08-04T11:22:41.560+08:00| main| W115: BLASTFFMPEG: Using software decode context (H264, 4:4:4) (0@1364x672)
2020-08-04T11:22:58.529+08:00| VVC dispatch event| I125: SOUNDLIB: SoundWaveSelectHostDevice: Found device DELL U2719DC (Intel(R) Display
2020-08-04T11:25:55.924+08:00| blastSocket| I125: VVC: vvcMultiAsockBackendErrorCb: Error: 4 Asock: 250D388A730
Agent Logs:
At this point, vmresset.log shows the following error.
2020-08-04 12:11:21.747+0800 [INFO ] 0x12c8 resolutionMgr::ResolutionMgrLog: ResolutionGetAndSetModesVista: Problem executing res-set app.
2020-08-04 12:11:21.747+0800 [INFO ] 0x12c8 resolutionMgr::ResolutionMgrLog: ResolutionSetTopoAndRes: ResolutionGetAndSetModesVista failed.
2020-08-04 12:11:21.747+0800 [ERROR] 0x12c8 resolutionMgr::SetResolutionHelper: VMwareResolutionSet_SetDisplayTopologyWithRefreshRate for 1 monitors failed!
2020-08-04 12:11:21.747+0800 [INFO ] 0x12c8 resolutionMgr::SetResolutionHelper: Display 0: refresh rate changes from 60 to 30
————— START LOGGING —————
2020-08-04 11:59:38.972 Resolution_InitRdsInfo: inRdsSession 0 sessionId 1
2020-08-04 11:59:38.972 LoadDevApi: devapi module loaded successfully.
2020-08-04 11:59:38.972 ResolutionSet: enter argCount 10
2020-08-04 11:59:38.972 ResolutionSet: arg 0 = C:\Program Files\VMware\VMware Blast\VMwareResolutionSet.exe
2020-08-04 11:59:38.972 ResolutionSet: arg 1 = 0
2020-08-04 11:59:38.972 ResolutionSet: arg 2 = 1
2020-08-04 11:59:38.972 ResolutionSet: arg 3 = 32
2020-08-04 11:59:38.972 ResolutionSet: arg 4 = ,
2020-08-04 11:59:38.972 ResolutionSet: arg 5 = 0
2020-08-04 11:59:38.972 ResolutionSet: arg 6 = 0
2020-08-04 11:59:38.972 ResolutionSet: arg 7 = 1920
2020-08-04 11:59:38.972 ResolutionSet: arg 8 = 1080
2020-08-04 11:59:38.972 ResolutionSet: arg 9 = 0
2020-08-04 11:59:38.972 Resolution_TransformTopology: enter
2020-08-04 11:59:38.972 Resolution_TransformTopology: Display #1/1 will be at (0,0) with resolution 1920×1080
2020-08-04 11:59:38.972 ResolutionSet: devapi topology change failed: 0xc0000001.
2020-08-04 11:59:38.972 wmain: Elapsed time was 0 ms.
From the logs we were not able to isolate much on this issue all we can see that somehow they are taking less resolution.
So now we started looking at the root of it all, the Master Image and what settings we have configured. As per the Instant Clone Architecture VDI will take the Video Settings from its Master Image and whatever value we have mentioned there should be the Video Memory of the VDI as well.
So we checked the VMX File of one of the VDI to check the side of Video Memory:
Found the below Parameters:
svga.vramSize = "7733248"
svga.present = "TRUE"
vmotion.checkpointSVGAPrimarySize = "7733248"
svga.guestBackedPrimaryAware = "TRUE"
svga.enableScreenDMA = "TRUE"
From here we can see that the “Total Video Memory” of the Master VM is set to 7733248 i.e. 7.3 MB which is somewhere failing between: 1280×720 and 1920×1080 which is what we are seeing inside the Agent:
So now we checked the Vmware logs off the Virtual Machine and found this:
Vmware Logs:
Reviewed the VMWare Logs and can see that the Display Topology has detected 2560, 1600 but based on the VRAM is has taken only 1176, 885
2020-08-12T04:18:27.569Z| vmx| W115: PowerOn
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: Config settings: autodetect=0, numDisplays=1, maxWidth=2560, maxHeight=1600
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: MKS auto-detected resolution target: numDisplays=1, wh(2560, 1600)
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: Desired maximum display topology: wh(2560, 1600)
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: Autodetected target gfbSize = 16777216
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: Using Initial gfbSize = 4194304
2020-08-12T04:18:28.055Z| vmx| I125: SVGA-GFB: MaxPrimaryMem register = 7733248
2020-08-12T04:18:28.055Z| vmx| I125: SVGA: Number of displays 1
2020-08-12T04:18:28.055Z| vmx| I125: SVGA: Truncated maximum resolution for register modes to VRAM size: (VRAM=4194304 bytes, max wh(1176, 885)
2020-08-12T04:18:28.066Z| vmx| I125: DISKUTIL: scsi0:0 : max toolsVersion = 10346, type = 1
2020-08-12T04:18:28.066Z| vmx| I125: TOOLS setting legacy tools version to ‘10346’ type 1, manifest status is 9
Resolution:
This is very low memory for any VDI to run a High Definition or a Multi Monitor Setup. So in order to see the Recommended Memory One can refer to the Below article:
Now in order to change the Memory Size one can follow the below steps:
- Open vSphere Web Client console.
- Go to the master VM with which you want to deploy Instant Clone Pool.
- Right Click the master VM and select Edit Settings.
- Expand the Video card and click the Video Memory Calculator.
- Change the Number of displays or Resolution to your preference.
- Once the settings are changed, take a snapshot and use it for a new Instant Clone Pool or do Push Image on existing pool.
For more information refer to KB: https://kb.vmware.com/s/article/2151745