Thoughts from the EPS Windows Server Performance Team
Welcome to Day Three of our pre-launch series. Windows 7 and Windows Server 2008 R2 have many features that are geared toward reducing power consumption. In order to achieve greater power savings by processors, they must be able to idle more often and, when they are idle, stay idle for long periods of time.
Three new features of Windows 7 and Windows Server 2008 R2 work together to accomplish these goals: Core Parking, Intelligent Timer Tick and Timer Coalescing. Let’s start by looking at Core Parking …
Core parking is a new feature that dynamically selects a set of processors that should stay idle and not run any threads based on the current power policy and their recent utilization. The scheduler will attempt to honor this selection when it decides on which processors to run threads, allowing the parked cores to enter deep idle states where they consume very little power.
The affinity of a thread will always be honored. If a thread is affinitized to parked cores only, it will be scheduled to one of the parked cores. On a client machine, most threads do not explicitly set an affinity and therefore run with an affinity including all processors in the system, allowing for frequent use of core parking. On servers where applications are more often finely tuned, threads may be affinitized to specific processors, which can reduce the effectiveness of core parking.
Additionally, on NUMA systems, the scheduler is free to override the core parking mask and schedule a thread to a parked core in its ideal node. This reduces the performance impact of forcibly migrating threads away from its ideal node. If all processors in a node are parked and there are no available un-parked cores, the scheduler is free to run the thread on a parked core within the same node. Nehalem processors allow for entire processor sockets to be parked, whereas most pre-Nehalem processors only allow individual cores to be parked. The state of individual parked cores can be observed in Resource Monitor when the CPU tab is selected …
Let’s turn our attention to Intelligent Timer Tick. In Windows 7, the platform timer interrupt no longer automatically wakes application processors, but rather the system timer propagates interrupts onto application processors that are not idle. Application processors (APs) are any processors in the system that are not the primary or base service processor (BSP). This improvement prevents application processors from waking up from low-power idle states unless software timers are set to expire or hardware interrupts other than the platform timer interrupt occur. The figure below shows an example where the platform timer interrupts have been removed from the APs as part of the improvements that were introduced in Windows 7.
Finally, let’s cover Timer Coalescing. Timer coalescing is the ability for the Windows kernel to group multiple software timers from different applications and device drivers, and expire them all at the same time. When combined with the Intelligent Timer Tick feature in Windows 7, it further helps to increase the idle duration of the application processors. This helps to save power by waking up each AP only when it needs to perform the work for multiple software timers. Once that work is complete, the processor returns back into a deep idle state for an extended period of time. The figure below shows the advantages of timer coalescing combined with removing platform timer interrupts from APs.
In this example, processor 1 has very long periods of idle time and processor 0 has coalesced software timer expirations to fewer platform timer interrupts. Timer coalescing enables application and device driver software to specify a Tolerable Delay for the expiration of a software timer. The tolerable delay value is used by the Windows kernel to adjust the time that the timer is due to expire so that it coincides with the expiration time of other software timers.
And that wraps up Day Three. I’m back on deck tomorrow with a look at the Unified Background Process Manager (UBPM). See you then …
- Jim Martin
Is there something (currently implemented or planned) similar to Linux' "tickless kernel" feature (see http://kerneltrap.org/node/7749 and http://www.phoronix.com/scan.php?page=article&item=651&num=1 ) in the Windows kernel?
Sorry for the delayed response to your query.
I know of nothing planned with regards to a "tickless" kernel. To the best of knowledge there is nothing of similar functionality currently.
One comment I probably should have added with regards to timer ticks and timer coalescing is this:
"Although timer coalescing does help to improve the average processor idle duration and therefore lower the overall system power consumption, developers should first eliminate any unnecessary periodic activity in their software. Timer coalescing should be used for software timers only if the periodic activity cannot be converted to an interrupt or event-driven design."
Can i turn core parking off? Also, if i run a very graphically intense game: Crysis, crysis warhead etc etc. Will core parking turn off? Also, is there a switch to turn off core parking? thanks in advance