First, you note that there is just one ASP.NET Worker process, and conclude
that it runs on just one CPU. This is incorrect. Processes contain
multiple threads, and those threads can take advantage of multiple CPUs.
Maybe it's non-intuitive, but a single process can span multiple processors.
Nonetheless, for reasons other than performance, you probably want a web
garden.
2nd: Are you using IIS6 and WS2003? or some earlier version of Windows
Server?
The settings are different.
If you use WS2003 and IIS6, by default ASP.NET uses the IIS 6.0 worker
process isolation mode. The admin of this is done through the IIS6 MMC
panels, and not through the .NET machine.config file. In particular, many
of the System.web\processModel settings in machine.config mostly do not
apply, they are silently ignored. This includes @webGarden. Check the
technet doc describing how and when to configure web gardens, and the
implication for session state.
http://www.microsoft.com/technet/pro...g_net_hepj.asp http://msdn.microsoft.com/library/en...olsettings.asp
On the other hand, if you are using IIS5 (W2000), then the machine.config
settings apply, including @webgarden and @cpumask. When using webGarden in
this way, each ASP.NET process has its processor affinity set to a
particular CPU. So in this special case, each single process is confined to
a single CPU.
Here's some doc that discusses processor affinity. This is a per-process
property (not per-thread).
http://msdn.microsoft.com/library/en...inityTopic.asp
One <processModel> thing that applies in both WS2003 and W2000 is the number
of IO threads per process.
In the end, you have to test it to see what works best in your situation.
Each app is different. There is no "one-size" solution, which is why the
options are there (InProc vs StateServer vs SQL, web garden vs not, # of io
threads, etc). Also remember performance (max throughput) is not the only,
and should probably not be the primary, criteria for judgement. Probably
you want to consider reliability or average response time, as higher
priorities than max throughput.
-Dino
"Alan Partridge" <an*******@discussions.microsoft.com> wrote in message
news:F4**********************************@microsof t.com...
We are hosting our ASP.NET application on a multi-proc (4) machine but
we're using InProc session state. Machine.Config has webGarden=false at the
moment and only one ASP.NET worker process in running. Therefore, my guess
is that running on a multi-proc box is wasted because only 1 CPU is being
used - is this correct?
My understanding is that in order to make use of all 4 CPU's we need to -
1. Change machine.config (webGarden=true + cpuMask=0x0f)
2. Configure web.config to use either the StateServer or SQL Server state
machines 3. Make all session state types serializable
4. Start the StateServer service (or use SQL Server)
Are my thoughts correct?
Or....is there anyway I can make full use of the 4 CPU's but keep InProc
session state? I guess this means I would effectively be giving session
affinity to a CPU because each session must be served from the same CPU \
ASP.NET worker process \ InProc session state to read\write to session
state. I.e. To prevent subsequent requests from being served from a
different ASP.NET worker process and thus not able to access stuff put into
session state on a previous request - however, this sounds like a very bad
idea?
All thoughts on this appreciated.
TIA.