PVS Advanced Settings: What do with it
- Published: Wednesday, 23 April 2014
When configuring Citrix Provisioning Services you will find the Advanced button within the properties of each PVS servers. There are pretty some settings available within this advanced part and when you are going to search for documentation you will find out that not much information is available about those settings, nor about what the setting is about or which value should be configured on which circumstances. When I was writing a detailed design I talked to several people and even those who changes the default values could not really explain why did choose the specific setting. I dived into this advanced settings and what I could find about these settings are written down in this article (as promised in the presentation PVS Design Decisions and Real Life Experiences).
The Advanced Server Settings are divided over four tabs. I will discuss the setting per tab and mention the need to change the default setting (in which situation).
Let’s start with the server tab.
On the server tab a total of five configuration options are available. The first one is the most well-known called Threads per Port.
Threads per Port
Threads per Port together with the amount of ports determines how many target devices requests can be handled simultaneously. To have a higher availability you can open more ports or set more threads per port. In the article PVS secrets part 3: ports threads by Thomas Bergler is described that Citrix advises to have the simultaneously request is equal to the amount of active devices. So you need to adjust the threads per port accordingly via the formula “# ports” x “#threads/port” equals active devices. In my printscreen I configured 16 threads/ports with 20 port, so I can handle 320 active target devices.
Buffers per Thread
When searching on the Internet you will find out that this setting often is also adjusted, but a real explanation is not available. Citrix describes the following about buffers per thread: “Number of packet buffers allocated for every thread in a thread pool. The number of buffers per thread should be large enough to enable a single thread to read one IO transaction from a target device. “
Ideal this will lead that the setting should be configured using the formula
(IOBurstSize / MaximumTransmissionUnit) + 1). Both these settings are available on the Network Tab, which I will discuss later on. If you don’t change those settings on the Network tab you also should not have to change the Buffers per Thread according Citrix. However it looks like some people see performance improvements when higher the amount of buffers per thread. Setting the value higher than needed, does not affect the PVS infrastructure however it will use more memory resources. As I don’t have the need to change the Network settings, I have the default value of Buffers per Thread configured.
Server Cache Timeout
The Server Cache Timeout determines the time frame the PVS server will write status information into the database. The status information is also used to determine if the server is available (twice within the server cache timeout period). Setting a shorter time out value allows servers to detect offline servers more quickly, but requires more database processing or logically the other way around by a longer server cache timeout. Depending where the server is being used for a shorter time out value could be useful (for example XenApp servers).
Concurrent I/O Limit
There is a local and remote concurrent I/O limit for the different types of storage. Local is everything with a drive letter, while storage is “labeled” as remote if a UNC path is being used. With the Concurrent I/O Limit you can define the amount of I/O request can be send to the storage device. PVS will don’t send more I/O request to the storage at once as the defined value. Currently most storage device can handle many I/O request or arranges buffering on the device itself. Therefore it’s advisable to configure this setting to 0, with a 0 setting PVS just send all I/O request without buffering on the PVS server. As I only have local storage, I changed this setting to 0 in the example image and did not change Remote I/O current limit as this is not being used at all.
Ethernet Maximum Transmission Unit (MTU)
With this setting you configure the available MTU (Number of bytes that fit in a single UDP packet) size on your network infrastructure. The default value configured is the default MTU size for Ethernet networks. So only if you are streaming over a WAN connection or have implemented Jumbo packets on all component, you need to change this setting. Set the MTU size according you network infrastructure when using a WAN connection or 50 bytes less than your jumbo packet max size when using Jumbo Packets.
I/O Burst Size (KB)
The I/O Burst size reflects the number of bytes that will be transmitted in a single read/write transaction before an ACK is sent from the server or device. To determine the right value for your PVS infrastructure you should keep in mind that only 32 packets can be in a single IO Burst, this can be calculated by IO Burst Size / MTU size should be 32 or lower. A larger IO Burst Size arranges faster throughput, but create higher loads on servers and network and could cause more packets lost/retries.
You can enable or disable non-blocking I/O for network communication. Till now I could not find any information when you would disable this setting (it’s enabled by default). If you have more info, please let me know.
Boot Pause Seconds
With this setting you define to time to pause the boot process when the maximum devices booting limit is reached. After this period the device continues to boot on again and will wait the defined time again if the server still does not allow the device to boot. As for all settings on this pacing tab, I used the default value.
Maximum Boot Time
The maximum boot time determines the time the device will be considered booting. After this maximum boot time the device is considered booted. I cannot find exactly what the consequences are if device is not fully booted while the maximum boot time is reached. I think PVS uses the maximum boot time to count the amount of devices that are booting for the setting maximum devices booting. So you should find out the time your devices requires to be fully booted and fill in that value at maximum boot time, so PVS can determine the amount of devices that are booting simultaneously. As my devices are booted up within one minute, I did not change this value either.
Maximum Devices Booting
This setting determines how many device are allowed to boot simultaneously. If more devices are booting at once, the devices above this value are paused for booting. I could not find any formulas or are how the limit could be determined. I expect that hardware resources are the possible bottleneck, as the boot process will stream the most data at once. Because the setting is default configured on 500 devices I expect that Citrix thinks 500 devices it a logical limit. As I only had a maximum of 320 devices per PVS server I did not change the value.
vDisk Creation Page
This settings defines the delay a vDisk will be shown (in the console?) when creating a vDisk. A larger value reduces the PVS overhead. You can define one to five, but I could not find what this mean (seconds, minutes or something else). Also the default value is configured as 0, which I interpreted as no delay. Only if the server is overloaded and vDisks are created all over the time, this could be a case to configure a delay for this process.
The time a license will be hold for a target device, before it’s releases do it can be used by another device. This timeout will be used if the connection with the target devices is lost by the PVS server and the license will be hold in the case the device comes back after a (short) period. This is only interesting if devices are shut down abnormally a lot and licenses are limited (and that is only the case if the product is purchased separately and not part of a XenApp/XenDesktop license).
When searching for information I talked to several people about this topic. Many of them find the best setting by just moving the sliders during a preproduction phase. I talked with someone from Citrix Consulting about this topic that most settings are not required to change when you have around a maximum of 300 to 500 devices per PVS server (except those I mentioned specifically as required). Still there are several setting which are not explained well and/or is it not clear when settings can or should be changed. If you have additional information available, let me know and I will add it to the article so finally the advanced settings of PVS are demystified.