Bandwidth Allocation for Terminal Server connections over RDP

Over a Terminal Server RDP connection, there are multiple applications (for example video, clipboard, printer output etc) that send data over the connection from server to client.  On a low bandwidth connection these applications compete for available bandwidth.  As a result, important graphics data, such as the location of a window the user moves on the desktop, has to compete with data transmitted in the background, like a print job or a file copy. This problem manifests itself most severely when printing a large document over a low bandwidth connection. The printer data competes for available bandwidth with the video rendering, thus deteriorating the graphics rendering significantly.

In Vista (and Longhorn Server) we fix this by introducing a simple scheme wherein a fixed percentage of bandwidth is allocated to video, and the rest goes to virtual channel traffic (this means all kind of redirections). By default this allocation is 70% for Video and 30% for virtual channel data, meaning when bandwidth usage is under pressure video data is guaranteed to get 70% of the available bandwidth.

Although this scheme does solve the problem effectively, there could be some scenarios that might want to tweak it a bit. There are some registry values that can be set to tweak these settings. <Note these are unsupported settings so all the legal disclaimers apply!> A reboot is required for these setting to take effect.

Below is the list of registry values that affect the bandwidth allocation behavior. These are all DWORD values under HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTermDD

FlowControlDisable:

When set to 1 this value will disable new flow control algorithm; making it essentially FIFO (First-In-First-Out) for all packet requests. This provides results similar to win2k3. (Default for this value is 0).

FlowControlDisplayBandwidth / FlowControlChannelBandwidth:

These two values together determine the bandwidth distribution between display and virtual channels. You can set these values in the range of 0-255. For example setting FlowControlDisplayBandwidth = 100 and FlowControlChannelBandwidth = 100 will make the equal bandwidth distribution between video and VCs. The default is 70 for FlowControlDisplayBandwidth and 30 for FlowControlChannelBandwidth, thus making the default distribution equal to 70-30.

FlowControlChargePostCompression:

This value if set to 1 bases the bandwidth allocation on post-compression bandwidth usage. Default for this value is 0 – meaning the bandwidth distribution is applied on Pre-Compressed data.