This Article was written
by Christa Anderson and Steve Greenberg and originally appeared
in
“Ask the Experts” at Thin2000.com
Question:
Can you recommend a white paper
that suggests a good user-to-server ratio?. I am looking
for a number that will give me an idea of how many NT servers
I would need to run a thin client for 800 users or so. Thanks!
Steve: While
various white papers exist which suggest strategies for
server sizing [see links provided below], the real answer
is “It depends!”. This
means that server sizing can only accurately be determined
by testing the actual applications you want to use, in the
particular ways you want to use them, in your actual operating
environment
Christa: Right.
The problem is that the number of users that a single server
can support depends heavily on four factors. First, are
the applications 32-bit or 16-bit? Second, how much data
will the people using the terminal server be storing in
memory? Third, how heavily will they be using those applications?
Finally, are you running Windows Terminal Server or using
Windows 2000’s terminal services?
Steve: In
our client base we have seen a wide range of user count
versus performance levels. The practical extremes that I
have seen range from, on the lower end, as few as 30-35
power users on a quad Pentium Xeon based server. On the
high end of user count, we have seen good results with up
to 70 users on a dual Pentium III system running a “typical”
mix of applications. As you can see, the range is pretty
dramatic. These numbers are on well tuned systems- keep
in mind that there are applications in which just one or
two concurrent instances will bring any server to
its knees! The white papers don’t seem to reflect these
practical “real world” experiences.
Christa: You
have to be careful with the white papers, since some of
them can be very optimistic about the number of users you
can successfully get on a terminal server. I’ve personally
seen up to 200 users on a four-way machine, but that was
a very specific circumstance and generally you’re not going
to get anywhere near that.
Steve: To
develop guidelines for your situation, I suggest using load
simulation tools and seeking out case studies that describe
situations similar to yours. I’d start with assessing the
applications. For example, modern Win32 applications will
take advantage of shared memory features such as “Code Sharing”.
This means that multiple instances of the same WIN32 application
need only be loaded into RAM once. For example, if 5 users
runn Word and Excel from MS Office 2000 the executable files
will only be loaded into memory one time for all 5 users.
This doesn’t work with Win16 applications or DOS applications,
both of which depending on running a unique NTVDM
(NT Virtual DOS Machine) and therefore can’t share
memory. So, if you run 5 instances of the 16-bit Word and
Excel from MS Office 4.x, all five instances will be loaded
into memory separately!
Note that code sharing applies only to executable
files and “helper” files; user data is loaded into memory
separately for each user session, since that’s not shared.
Christa: And
of course, if users require DOS applications you will have
another problem: keyboard polling. Since they’re designed
for a single-tasking environment, some DOS applications
poll the keyboard for input so that they can respond as
quickly as possible. Doing this uses up a lot of CPU cycles.
Run Performance Monitor while a DOS application is running
and watch the number of CPU cycles that are being chewed
up. Too, you have to consider how heavily your user base
will be relying on data in addition to using applications.
Twelve people running PowerPoint but with no files open
will use memory differently from the same twelve people
each editing 50-slide presentations with lots of graphics.
Before even considering terminal services, I’d survey your
user base and see how people are using applications.
Steve: That’s
a great point. To properly size your server farm you have
to work with closely with end users, and, have tools that
can give you meaningful feedback. Citrix offers "Resource
Management Services" which is an excellent monitoring
package to see all the details of performance and load by
application, processes, user, memory, disk access, etc.
It is often called "PerfMon on steroids". And
if you’re using Windows 2000, you can use the Load Simulator,
which allows you to create scripts which execute real world
applications and user tasks which can be launched any number
of times concurrently.
Christa: There’s
also the question of how to distribute server resources—that
is, whether it’s better to have a few larger servers or
a lot of smaller servers. I'm more in favor of the "lots
of smaller servers" model, for several reasons. First,
although some sizing models suggest that you should be able
to support X number of people per processor, this model
does not take into account memory usage, which is at least
as important as CPU usage and which depends heavily on how
people use applications. Second, when you need to add capacity
it's easier and faster to add another smallish server than
it is to physically upgrade a big server. Third, if something
happens to one of the existing servers it will impact you
less if you loose, say, 1/5 of your total terminal server
capacity than if you lose half of it--and it's much easier
to keep a smaller spare server around to replace the failed
one while you're fixing it.
Steve: Right
on! Again and again, experience supports this idea that
dividing your resources into many smaller servers rather
than fewer larger servers produces the best performance
levels, and, the greatest redundancy. For example, if you
determine you will need (4) 500Mhz CPU’s and 2GB of RAM
I would suggest two dual CPU machines with 1GB RAM over
a single quad processor machine. In addition to contention
for RAM and CPU there is also I/O to consider. When you
have two servers supporting the same number of users then
you also have two SCSI disk systems, two PCI buses, two
NIC’s, two banks of L2 processor cache, etc. Of course,
you need to balance this with hardware and software costs-
it clearly become more affordable when you high, rather
than low, user counts.
With low user counts you might add RAID to data partitions,
additional NIC’s, more RAM, more L2 cache, etc. before adding
an additional machine.
My closing thought on this whole
issue is to “over-spec” wherever possible. When you look
at the true costs of computing over time, the up front hardware
cost is not the majority of where the money will be spent.
I suggest being as generous as possible in this area and
you will find a higher level of user satisfaction, reliability,
up-time and room for growth in the future. Luckily, server
hardware keeps getting faster and less expensive all the
time!
:: LINKS ::
Windows 2000 Terminal Service
Capacity and Scaling
:: ABOUT THE AUTHORS
::
Christa
Anderson is a senior contributing
editor to Windows 2000 Magazine and author and co-author
of several books, including the forthcoming Automated Deployments
and Scripted Management and Mastering Windows 2000 Server,
both from Sybex. Email Christa at christa@thinclient.net
Steve
Greenberg is the founder and President
of Thin Client Computing in Scottsdale, Arizona. A leading
expert in server based computing, he has designed mission
critical solutions for various Fortune 500 companies. Email
Steve at: steveg@thinclient.net