Lets clarify a few things about how Win2k (and other NT kernel based OS's) handle SMP. First of all, every process has at least one unit of execution, or thread. In NT, the thread is the unit of execution, not the process. The process is a container (or address space) that contains application code (heap, etc.). Any thread, from any process can be scheduled to run on any processor at any time, by default. So if you have two single threaded applications, you still have two threads that will be distributed across two processors, all else being even. With no special or alternative settings, process scheduling in NT/2k is truly symmetrical and doesn't require "SMP awareness". Multithreaded processes benefit, on an individual basis, from SMP in that they are able to literally run that processes code on more than one processor at a time (provided the code is well optimized and doesn't have ugly synchronization issues). Furthermore, multithreading has some significant benefits over the older Parent/Child process model in that threads share a single address space eliminating the need for potentially (compute) expensive inter-process communication and synchronization methods. There is no "locking" of threads by default. In fact, NT/2K employs what is referred to as "soft affinity". This means that the dispatcher (scheduler) attempts to schedule the thread to run on the processor it last ran on (to prevent L1/L2 cache reloading and such). However, if that processor is busy, it will schedule the thread to run on any available processor in the system. Now, in certain instances, it is advantageous to override the dispatcher's ability to schedule threads of certain processes to run on certain processors (especially in SMP systems with 8 or more processors). Short, repetitive transaction OLTP systems and systems where application (or process instance) partitioning is employed may benefit from setting "hard affinities" for processes. A hard affinity mask prevents a process's threads from running on any processors other than those defined by the affinity mask. The quickest and easiest way to set process affinity is to go to the Windows (NT) Task Manager Process tab, right click on the process you would like to set affinity for and select "Set Affinity". You will be presented with the Processor Affinity dialog with checkboxes labeled CPU 0 through CPU 31. You will only be able to select those that are not grayed out (equal to the number of processors you have in your system). Note that the process affinity, when set through the task manager, is only for the life of that instance of the process. If the process is restarted, it will no longer have any hard affinity set. If you have Datacenter Server, you can use the Process Control Tool (which works in concert with the Process Control Service to create Job Objects, via the Job Object API) to automatically set process affinity that will apply to each instance of a process through the use of either a Process Execution Rule or a Process Group Execution Rule. I hope this sheds some light on NT/2k's implementation of SMP, threading and process affinity. Regards, -Ned Gnichtel -----Original Message----- From: Craft, Steve [mailto:SCraft@xxxxxxxxxxx] Sent: Thursday, December 06, 2001 8:55 AM To: [ISAserver.org Discussion List] Subject: [isalist] re Dual Processor vs. Single Processor http://www.ISAserver.org I have some doubts about the performance boost an extra processor might give to ISA. But there might be some indirect benefit in that Win2K is much smoother with two processors, so that will leave more "headroom" for ISA processes. In Win2K, all processing is symmetrical, so every multi-threaded processes uses both processors; you can't necessarily lock a single multi-threaded process to an individual CPU, since they decide which one is least busy and share the load internally. But with something single-threaded (like any of the VB desktop apps out there for example, or most games), only one CPU will run the app at a time and it will stay locked on that app. So the real question is, out of the 3-4 services (and device drivers?) that make up ISA, which ones are truly multi-threaded and SMP aware? I think RAM is more of an issue, in my limited experience when I doubled the RAM everything got snappier. I have done a lot of stuff on double-CPUs but not with ISA (yet). Licensing I don't know about. ---------------------- I'm about to purchase hardware to host an ISA server. I will be purchasing the single-processor license. If I get a dual-processor machine: 1) will the single-processor license work okay (does it allow there to be two processors)? 2) will the second processor give me any performance boost? I'm thinking that the second processor might still be able to handle non-ISA related tasks, like network traffic, while the ISA specific processor (whichever ISA thinks that is...?) deals with ISA related task, like firewall processing and cache processing. Thanks in advance for any thoughts on this. ToddC toddc@xxxxxxxxx ------------------------------------------------------ You are currently subscribed to this ISAserver.org Discussion List as: ned@xxxxxxxxxxx To unsubscribe send a blank email to $subst('Email.Unsub')