UPDATE August 2018:
This blog post was written based on Horizon 7.3.1 – In the meantime Blast protocol changed a lot, and with Horizon 7.5.0 and Horizon Client 4.8 VMware introduced BENIT (Blast Extreme’s transport with network intelligence) – which automatically selects the best method of transferring data to the client. – If you are using Horizon 7.5 or newer check out the official Horizon blog:
For older Horizon versions here are my experiences:
One of my customers is currently doing a POC for Horizon 7.3.1 – The customer owns various companies which deliver single parts for their end-product. In all of these there is a design department where new parts or machines to produces them are designed. There are a lot of graphical workstations used overall – but they are spread out in the region where the customer resides. The ultimate target for this customer is, to ease management for all these workstations and to centralize this workload. – A typical VDI use case and perfectly suited for Horizon together with the powerful NVIDA graphics cards such as the NVIDIA Tesla M60. – The customer is all Windows – and the current standard desktop OS is still Windows 7 (64-Bit)…
The customer got all the servers and graphics cards to build the 3D Horizon ESXi host. Horizon 7.3.1 was installed and they started testing. – The first result was not really exciting, performance at the designer’s desk was slow, or for some use case even unusable. – This was before we did any optimization.
How does Horizon Client and Blast protocol work, and what can be done? – The answer is pretty easy.
First of all we have to know that VMware delivers the Horizon Client and also the agent in a default mode that suits most of the use cases. This means performance is average, bandwidth consumption is average. It works pretty well for the standard user, but it needs optimization for low bandwidth environments – a use case which is described in VMware documentation, and it needs adjustment for end graphics applications like 3D software. In my case the customer used CATIA 3D, but it will need adjustment for any other high end graphics application, where people are doing complex construction design.
Horizon Client 4.6.1
Did you know that there is a network setting for Blast protocol in the Horizon client user interface that can impact your performance? Horizon client has 3 different built-in profiles:
- Typical (default)
If you have your average client PC and your average user using Office type apps on a LAN environment go for typical. If you don’t have enough bandwidth or users accessing over the WAN take poor. – But if you need high end performance and if you are connected in a LAN take Excellent.
So my customer’s designers are not strictly sitting in the LAN of the headquarter – but they are something like 50 km around the headquarter and they have good (LAN-type 1GB) connection to the headquarter – that’s fine and works well with the excellent setting.
H.264 is enabled by default. – H.264 is very well suited for videos and it works for 3D as well. The advantage of H.264 to day is, that most of the modern PCs (or their graphics cards) have a H.264 graphics encoder – and Horizon client will use this hardware decoder if present. – That’s a performance gain. H.264 on the other hand is doing compression which is not 100% lossless, so for certain use cases we might have to switch that – but in our case it did not have a big impact and it was acceptable. – The really bad effects can be seen if you write red text on a blue background – if that is your favorite setting in which app so ever H.264 will not be your friend, and you have to deselect it.
To be able to configure Blast you have to disconnect your client from the connection server. Then you have to open the 3 bars menu on the left and select Configure VMware Blast.
Then just select the first Radio button “Excellent” – this was the Horizon Client part.
Having done this “one-click” change already changed a lot for the customer. – They were able to move their 3D objects around the screen at 90% satisfaction ratio. We did see some blurriness and movement was not always smooth.
The initial setup of the virtual Windows 7 CAD desktop was pretty much reduced. The customer allocated only 2 vCPU for this virtual desktop, which is far below VMware’s recommendation. – Analyzing the CPU behavior of the virtual desktop we saw CPU going up to well over 90% – bad sign. During testing we moved the pretty complex pretty fast over the screen, and CPU hit 100% – a reason why it was a bit jumpy.. – But we are in the virtual world. Just add another CPU Core to the system – yes you have been reading correctly only 1 vCPU was added, so we had a configuration of 3 vCPUs (1 socket 3 cores). – So we did not succeed to bypass 70%. – That sounds like a good configuration. We are using CATIA 3D on Windows 7-64 with 3 vCPUs only, on a Windows 7 image that has been optimized using the VMware OS Optimization Tool. https://labs.vmware.com/flings/vmware-os-optimization-tool
Horizon agent 7.3.1
VMware delivers Group Policy templates which can be copied to a domain controller in your active Directory environment. There is a special VMware Blast ADMX file amongst all these GPO templates. You can basically configure everything you need to get you Horizon environment customized to your needs by using these GPO templates. We will have a closer look at the blast settings:
There are three main settings we had to adjust to get it really smooth when moving around, and remove some blurriness during the movement.
The ultimate smoothness delivered:
MaxBandwidthKbpsPerMegaPixelSlope = 25000
Specifies the maximum bandwidth, in kilobits per second (kbps), for a VMware Blast session. The bandwidth includes all imaging, audio, virtual channel, USB, and VMware Blast control traffic. The default is 1 Gbps.
Max Frame Rate = 60
Specifies the maximum rate of screen updates. Use this setting to manage the average bandwidth that users consume. The default is 30 updates per second.
The blurriness disappeared:
H.264maxQP = 28
H.264minQP = 10
Specifies the image quality for the remote display configured to use H.264 encoding. You can specify the minimum and maximum quantization values that determine how much an image is controlled for lossless compression. You can specify a minimum quantization value for the best image quality. You can specify a maximum quantization value for the lowest image quality. You can specify the following settings:
H264maxQP (available range of values: 0-51, default: 36)
H264minQP (available range of values: 0-51, default: 10)
So this was our final setting:
I would like to thank Kiran Rao Director of Horizon Product Management, and Hilko Latinga EUC architect and co-author of the NVIDIA whitepaper below. Both helped me with these parameters and made our POC a success. Although these parameters are documented it is not really obvious which parameter has to be changed to get the desired result.