What is Preferential Load Balancing?
Preferential Load Balancing (PLB) is a new feature included in XenApp 5 (Platinum only) that uses administrator-configured levels of importance to assign more or less CPU cycles to users and/or applications. For instance, dispatchers and their applications in a trucking company might be assigned a higher level of importance because their job is more critical to the company's day to day operations than, say, data entry people using Excel. This increased level of importance results in more CPU cycles being dedicated to them and fewer to the less important users/applications.
Note: Preferential Load Balancing actually has very little to do with conventional Load Balancing, since they accomplish their objectives in very different ways. PLB is, in fact, an extension of the CPU Management feature that has been built in to XenApp/Presentation Server for some time.
"So what," you might ask? "I've been putting executives (and myself) on their own servers for years now!" This is quite a bit different than just managing the number of sessions on a server (resource-based or otherwise). With PLB, important users will actually receive more or less CPU cycles for their session based on something called a Resource Allotment.
This is really the crux of PLB. Rather than simply say "this user is more important" and leave it there, Citrix has devised a more complicated, and more fair, way of assigning CPU cycles to users. To do this, two importance levels can be specified by the administrators - the published application importance level and the session importance level. The combination of these two importance levels is the Resource Allotment. The higher the Resource Allotment for a session, the more CPU cyeles are dedicated to that session.
Note: Published application importance levels are configured in the properties of the published app, while session importance levels are configured via XenApp policy.
Resource Allotment values are determined by multiplying the published application importance level by the session importance level. Each level can be a number between 1 and 3, with 1 being the lowest, 2 being normal, and 3 being the highest level of importance. So, a session that has an application importance level of 3 and a session importance level of 2 would have a Resource Allotment value of 6 (3 x 2). By default, all applications and sessions have a value of 2 - Normal.
Preferential Load Balancing uses Resource Allotment not only to define the availability of resources to a particular session, but also direct the session to the proper server. In an environment using PLB, the server with the smallest aggregate Resource Allotment value of all the sessions will be the next to receive a session. This means that if Server 1 has a 15 sessions with a sum Resource Allotment value of 30 and Server 2 has 20 sessions with a sum Resource Allotment value of 26, Server 2 will receive the next session.
Enabling Preferential Load Balancing
To turn on Preferential Load Balancing, you'll first need to make some decisions about what should receive the priority - applications, users, or both. In some cases you might want to assign a high level of importance to the application itself, such as a the CRM at a marketing firm. In other cases, you might want to assign a high level of importance to a specific user or group, such as a vice president or CxO. Used together, this means that an important user who is also using an important application can have a very high number. The same is true in reverse - a very unimportant user using a very unimportant application could be relegated to a small slice of the CPU cycles on a given box.
Before configuring PLB for applications and sessions, you must enable it on each server (or farm-wide). To do this, open the Access Management Console and bring up the properties of the farm or server. Under Server Default | Memory/CPU | CPU Utilization Management, select CPU sharing based on Resource Allotments.
Next, to turn on PLB at the application level, open the Access Management Console and pull up the properties of the published application that you wish to modify. Then, under Advanced | Limits, you'll see a dropdown box labelled "Application Importance." Here you can select High, Normal, or Low, which correspond to 3, 2, or 1 when calculating the importance value of the application.
To turn on PLB for users or groups, open the XenApp Advanced Configuration console (the old CMC) and create a new policy (or edit an existing one). In the policy's properties, under Service Level, you'll see the Session Importance policy. When this policy is enabled, you'll be able to change the importance level in the same way as you do with an application. You'll still need to apply the policy to users, groups, or in whatever other way you'd like to enforce the new rule.
Multiple applications per session
If a user is running multiple applications via the same session, there is the possibility that the individual applications will have different importance levels associated with them. In this case, the Resource Allotment value for that session is the highest of the individual application/session pairs. This means that if the user's importance level (assigned by policy) is a 3, and they are running Notepad with a value of 1 and SAP with a value of 3, the Resource Allotment value would be 9 because it is the higher of the two session X application values.
In situations where a session with elevated importance is not using all their CPU cycles, the unused cycles will be shared by the other sessions on the server until the more important session needs them. Think about it like sitting in the courtside seats at a basketball game...just until the ticket holder arrives.
CPU Management Tweaks
If you're granting additional resources to users using the CPU Utilization and Reservations registry keys as part of the CPU Management feature, Citrix recommends using PLB instead. In fact, if PLB is used, the entire registry key is ignored.
Compared to the last feature I looked at--Special Folder Redirection--Preferential Load Balancing is looking pretty useful. If you've already ponied up the money for Platinum, it's at least worth a shot. It can eliminate some of the performance problems that cost the company money at the same time as it placates the directors and other high-importance people. I'm curious to see what the people that have deployed PLB on a large scale feel about it. It's hard to gauge the performance and overall experience in a small lab, so if anyone has any experiences they'd care to share, please do so in the comments.