XenApp and RDS Sizing Part 1 – Methodology
This article is part of a mini-series. You can find the other articles here.
One of the first things you need to do after starting a XenApp farm upgrade project is to answer the obvious question from management: how much will it cost? In order to be able to answer, you need to have a good understanding of the resources required. In other words, you need to size the farm.
Sizing = Gut Feeling + Caution?
The process of sizing a XenApp farm in many cases is more a mixture of gut feeling and caution than solid engineering.
Gut feeling
I know my way around our current farm, so of course I am qualified to say how many of today’s 6 core CPUs we need as a replacement for yesterday’s 2 core models!
Caution
I’ll add some more servers, just to be on the safe side.
The result of such an approach to sizing very often is overcapacity in some areas and resource shortage in others. Your brand-new farm might sport 1 physical CPU core per user but lack enough RAM to host all those applications users tend to start.
Without proper sizing you are likely to spend more money than necessary, and spend part of it on things you do not need instead of investing it where it really improves performance.
In this series of articles I will explain how to investigate an existing XenApp farm, determine its load and calculate the capacity of a future farm from that data.
Methodology
We will start by dividing a farm into components that can be analyzed individually. The four system components most relevant to the performance of a XenApp farm are: CPU, memory, storage and network. For each of these components we need the total capacity as well as the load. When we have that information we can derive sensible values for the future farm easily.
As an example, let us assume we have a farm consisting of 10 servers. Each server has the following hardware configuration: 2 CPUs with 4 cores each, 4 GB RAM, 2 15K hard drives as RAID-1, 1 Gigabit network connection. The total net capacity is as follows:
- CPU: 80 cores
- Memory: 26 GB
- Storage: 1,500 IOPS
- Network: 1 GB/s
If the farm is regularly used by 100 concurrent users we get the following per-user capacity:
- CPU: 0.8 cores / user
- Memory: 266 MB / user
- Storage: 15 IOPS / user
- Network: 10 MB/s / user
After performing measurements we know that the typical maximum load is as follows:
- CPU: 10%
- Memory: 90%
- Storage: 50%
- Network: 1%
Looking at those load values it is obvious that we have overcapacities especially with network and CPU, and that memory is scarce. It seems sensible to set the following factors for the new farm:
- CPU: 0.25
- Memory: 2
- Storage: 1
- Network: 0.1
With those factors established, we can calculate the capacity of the new farm. In our example, it needs to be sized for 200 concurrent users because the company is growing. Here are all numbers in one table:
Description | Farm capacity old (total) |
Farm capacity old (per user) |
Factor | Farm capacity new (per user) |
Farm capacity new (total) |
CPU [cores] | 80 | 0.8 | 0.25 | 0.2 | 40 |
Memory [MB] | 26,624 | 266 | 2 | 532 | 106,400 |
Storage [IOPS] | 1,500 | 15 | 1 | 15 | 3,000 |
Network [MB/s] | 1000 | 10 | 0.1 | 1 | 200 |
Great, But Where to Get That Data?
This was just a simple example to whet your appetite. In the course of this series I will show you exactly how to get all the relevant data for sizing your next XenApp farm.