I've done a lot of looking around on the subject of System Idle Process.
What does it really do?
A few variations have come up.
Some say the SIP is a 16K byte loop.
Some say the SIP is a HLT instruction.
Both might be right.
Some say on Windows NT, SIT does HLT -- on the Uniprocessor HAL [only].
On later versions of Windows, one rare post says the ACPI Multiprocessor HAL does HLT, but the MPS Multiprocessor HAL does not.
This question of HLT or not comes up in discussions about software CPU cooling. If your SIP uses HLT, then your CPU is already running cool, and you don't need any CPU cooling software. If you have the unlucky HAL, then your SIP does not do HLT -- so changing your HAL or adding CPU cooling software should help.
I have been exploring the software CPU coolers only because i know they provide HLT instructions.
And the HLT instructions of the CPU cooling software are of interest for a whole different reason: fixing a performance problem with HyperThreading.
In a CPU with Hyper-Threading, when one hardware thread is halted, the other hardware thread gets all of the throughput -- it reverts to being one processor running at full speed.
BUT, if the SIP does not actually HALT idle the processor(s), then there will be a slowdown whenever the computer has only one thread to execute.
The active thread will be running on one virtual processor, and the system idle task will be running on the other virtual processor, competing and slowing down the useful thread.
All this goes to explain some measurements i made 19 months ago.
I made a simple compute-intensive task and timed its operation.
With HyperThreading disabled, i could run two instances of the task concurrently, or i could run two instances consecutively, and the two runs together would take the same amount of elapsed time.
With Hyperthreading enabled, the behavior was different. If i ran two instances concurrently, the total time reduced to about 89% of the time they took without hyperthreading, as expected. The tasks interleaved a little bit. But when i ran the tasks consecutively, the total time actually increased to 150% of the time they took with hyperthreading disabled! I had no explanation for this other than apparent competition from the System Idle Process still running on the other virtual processor. I was very disappointed that HyperThreading was not working as advertised. Intel SAYS the operating system should issue a HLT instruction. Either Intel didn't implement correctly, or else Microsoft didn't do what Intel suggested.
I made these tests in September 2004, and i don't have the computer or task that i tested with. I wish i had noticed which HAL was on that computer. It was a Windows 2000 computer.
Microsoft advises that HyperThreading should be disabled on Windows 2000 computers. Apparently the penalty for not listening is reduced performance. (But using CPU cooling software might fix that.)
My notes say i repeated the same results on a Windows XP computer.
Maybe it was not Windows XP, or maybe we somehow had the wrong HAL loaded in that copy of XP.
I tested today with a newer computer running Windows XPsp1 (with the ACPI Multiprocessor HAL) and a different task. I discovered that hyperthreading neither sped up nor slowed down an all-integer task, but it actually doubled the speed of a mostly floating-point task.
Still, this is not consistent with obervations made on other computers. On another newer computer running Windows XP (with the ACPI Multiprocessor HAL), AutoCAD was taking 5 minutes to load up a large drawing. By DISabling Hyperthreading, we were able to reduce that to 2 minutes! Other tests with other number-crunching operations fared similarly. Compressing movie files went faster without HT. Rendering AutoCAD animations went faster without HT. All of these tasks were observed to be running single-threaded under HT. (by looking at the CPU utilization in Task Manager.)