<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Windows Server Performance Team Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/winserverperformance/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/winserverperformance/feed.xml</link>
    <description>Windows Server Operating System Performance information, tools and discussion</description>
    <lastBuildDate>Wed, 27 Jul 2016 07:30:40 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>A glimpse into Windows Server 8</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/a-glimpse-into-windows-server-8</link>
      <pubDate>Thu, 29 Sep 2011 16:38:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2011/09/29/a-glimpse-into-windows-server-8/</guid>
      <description><![CDATA[Hi folks, it has been a while as we continue to be heads down on the performance for Windows Server...]]></description>
      <content:encoded><![CDATA[<p>Hi folks, it has been a while as we continue to be heads down on the performance for <a href="https://www.microsoft.com/en-us/server-cloud/windows-server/v8.aspx">Windows Server 8</a>!&nbsp; But recently some of the new features and enhancements for Windows Server 8 have been introduced in Bill Laing&rsquo;s, Corporate Vice President of the Server and Cloud Division, <a href="https://blogs.technet.com/b/server-cloud/archive/2011/09/09/windows-server-8-an-introduction.aspx">blog</a>&nbsp;on the <a href="https://blogs.technet.com/b/server-cloud/">Server and Cloud Platform Blog</a>, and I encourage you to go check them out.&nbsp;</p>
<p>We also had the opportunity at the <a href="https://www.buildwindows.com/">//BUILD/</a>&nbsp;conference, held in Anaheim, California<b><i> </i></b>in September to share with the developer community and ecosystem partners more of those performance features and optimizations.&nbsp; Example areas included <strong>Virtualization Scalability</strong>, <strong>low latency networking performance</strong>, <strong>Power optimizations</strong>, and <strong>Web Scalability</strong>.&nbsp; I am sharing below some of those sessions, so please have a look and enjoy!</p>
<p><a href="https://channel9.msdn.com/Events/BUILD/BUILD2011/KEY-0002">Windows Server 8 Keynote</a></p>
<p><a href="https://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-973F">Windows Server 8 Overview</a></p>
<p><a href="https://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-417T">Windows Server Performance Improvements and optimizations</a></p>
<p><a href="https://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-661T">Reduce costs using new power efficiencies in Windows Server 8</a></p>
<p>Cheers,<br /> Ahmed Talat<br /> Windows Server Performance Team</p>]]></content:encoded>
    </item>
    <item>
      <title>Increase VMBus buffer sizes to increase network throughput to guest VMs</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/increase-vmbus-buffer-sizes-to-increase-network-throughput-to-guest-vms</link>
      <pubDate>Tue, 02 Feb 2010 13:22:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2010/02/02/increase-vmbus-buffer-sizes-to-increase-network-throughput-to-guest-vms/</guid>
      <description><![CDATA[Under load, the default buffer size used the by the virtual switch may provide inadequate buffer and...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><I style="mso-bidi-font-style: normal"><FONT size=3 face=Calibri>Under load, the default buffer size used the by the virtual switch may provide inadequate buffer and result in&nbsp;packet loss. We recommend increasing the VM bus receive buffer from 1Mb to 2Mb.</FONT></I></P><FONT face=Calibri>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Traffic jams happen every day, all across the world. Too many vehicles competing for the same stretch of road, gated by flow control devices like stop signs and traffic lights, conspire to ensnare drivers in a vicious web of metal and plastic and cell phones. In the technology world, networking traffic is notoriously plagued by traffic jams, resulting in all sorts of havoc, including delayed web pages, slow email downloads, robotic VOIP and choppy YouTube videos. (Oh, the humanity!) </FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Virtualized networking can be complicated, what with the root and child partitions relaying packets across the VM bus to reach the physical NIC. The VM bus, anticipating contention, uses buffers to queue data while the recipient VM is swapped out or otherwise not keeping up with the traffic. The default buffer size for WS08 R2 is 1Mb, which provides 655 packet buffers (1,600 bytes per buffer).</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>The hypervisor, meanwhile, calculates a scheduling interval, or quantum, derived from the system's interrupt rate. The hypervisor attempts to ensure every VM has a chance to run within that interval, at which time the VM wakes up and does whatever processing it needs to do (including reading packets from the VM bus). At very low interrupt rates, that quantum can be nearly 10ms.</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Whereas the native system handles on the order of 260,000 packets/second, virtualized systems, <EM>in some scenarios</EM>, can—in the worst case scenario—begin seeing packet loss under traffic loads as low as 65,500 packets/second. This isn’t an inherent tax incurred by virtualizing or a design limit; rather, it’s the result of specific characteristics of server load requiring more VM bus buffer capacity. If the logical processors hosting the guest partitions are receiving very few hardware interrupts, then scheduling quantum grows larger, approaching 10ms. The longer scheduling quantum results in longer idle periods between VM execution slices. If the VM is going to spend almost 10ms asleep, then the VM bus’ packet buffers must be able to hold 10ms worth of data. As the idle time for a VM approaches 10ms, the maximum sustainable networking speed can be calculated as:</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>655 default packet buffers / ~10ms idle interval = maximum 65,500 packets / second </FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>We can increase throughput, though, by increasing the amount of memory allocated to the buffers. How much should it be increased? On paper, 4Mb is the maximum useful size; a 4Mb buffer provides about 2600 buffers, which can handle 10ms’ worth of data flowing at approximately 260,000 packets per second (the max rate sustainable by native systems). In reality, depending on the workload, the VM’s swapped-out time probably doesn’t approach the maximum 10ms quantum. Therefore, depending on how frugal you want to be with memory, increasing to 2 Mb is probably adequate for most scenarios. If you’re living large in the land of RAM, lighting your cigars by burning 4Gb memory sticks, then go for broke, cranking the buffers up to 4Mb.</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>The buffers are allocated from the guest partition’s memory and updating the buffer size requires, per each guest VM, adding two registry keys. To increase the buffer size, we first need the GUID and index associated with the network adapter. In the guest VM, open the <B style="mso-bidi-font-weight: normal">Device Manager</B>, expand <B style="mso-bidi-font-weight: normal">Network Adapters</B> , right click <B style="mso-bidi-font-weight: normal">Microsoft Virtual Machine Bus Network Adapter</B> and choose <B style="mso-bidi-font-weight: normal">Properties </B>(if you have an a driver marked “(emulated)”, you should take a detour to install Integration Services from the VM’s Action menu, then add a new synthetic network driver through the VM setup. See </FONT><A href="https://technet.microsoft.com/en-us/library/cc732470(WS.10).aspx" mce_href="https://technet.microsoft.com/en-us/library/cc732470(WS.10).aspx"><FONT color=#0000ff size=3>https://technet.microsoft.com/en-us/library/cc732470(WS.10).aspx</FONT></A><FONT size=3> , step 3 for instructions). </FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>On the Network Adapter Properties dialog, select the <B style="mso-bidi-font-weight: normal">Details</B> tab. Select <B style="mso-bidi-font-weight: normal">Driver Key</B> in the Property pull-down menu as shown in figure 1 (click the images to see a version that's actually readable):</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><SPAN style="mso-no-proof: yes"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></SPAN></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank><IMG border=0 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/31/01/83/fig1.bmp" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3310183/secondarythumb.aspx"></A>&nbsp;</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank></A></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310183.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310183.aspx" target=_blank></A></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Record the GUID\index found in the <B style="mso-bidi-font-weight: normal">Value</B> box, as shown in figure 1, above. Open <B style="mso-bidi-font-weight: normal">regedit</B> and navigate to: <B style="mso-bidi-font-weight: normal"><SPAN style="COLOR: black; mso-themecolor: text1">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\<EM>{GUID}\{index}</EM></SPAN></B><SPAN style="COLOR: black; mso-themecolor: text1"> as shown in figure 2:<o:p></o:p></SPAN></FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><SPAN style="mso-no-proof: yes"></SPAN></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310185.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310185.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3310185.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310185.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310185.aspx" target=_blank><IMG border=0 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/31/01/85/fig2.bmp" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3310185/secondarythumb.aspx"></A>&nbsp;</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Right click the index number and create two new DWORD values, entitled <B style="mso-bidi-font-weight: normal">ReceiveBufferSize </B>and <B style="mso-bidi-font-weight: normal">SendBufferSize </B>(see figure 3). These values measure the memory allocated to buffers in 1Kb units. So, 0x400 equates to 1,024Kb buffer space (the default, 640 buffers). In this example, we’ve doubled the buffer size to 0x800, or 2,048Kb of memory, as shown in figure 3:</FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><SPAN style="mso-no-proof: yes"></SPAN></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>&nbsp;<A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310186.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310186.aspx" target=_blank><IMG border=0 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/31/01/86/fig3.bmp" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3310186/secondarythumb.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3310186.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3310186.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3310186.aspx"></A></FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3>Your workloads and networking traffic may not need increased buffers; however, these days, 4Mb of RAM isn’t a tremendous amount of memory to invest as an insurance policy against packet loss. Now, if only I could increase a few buffers and alleviate congestion on my daily commute! </FONT></P></FONT>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal>Tom Basham</P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal>Virtualization Performance PM, Windows Fundamentals Team</P>]]></content:encoded>
    </item>
    <item>
      <title>NUMA Node Balancing</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/numa-node-balancing</link>
      <pubDate>Thu, 10 Dec 2009 14:56:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2009/12/10/numa-node-balancing/</guid>
      <description><![CDATA[For those of you running Hyper-V on NUMA (Non-Uniform Memory Architecture) based platforms (such as...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>For those of you running Hyper-V on NUMA (Non-Uniform Memory Architecture) based platforms (such as HP’s DL785), this blog presents a tuning suggestion for how to fine tune the placement of virtual machine (VM) on to a specific NUMA node.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Every VM in Hyper-V has a default NUMA node preference. Hyper-V uses this NUMA node preference when assigning physical memory to the VM and when scheduling the VM’s virtual processors. A VM runs best when the virtual processors and the memory that backs the VM are both on the same NUMA node, since such “remote” memory access is significantly slower than “local” access.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>By default, the Hypervisor will assign the NUMA node preference every time the VM is run, and when choosing the NUMA node, it will find the best fit based on the resources the VM needs – preference will be given to a NUMA node that can support the VM’s memory on locally available node memory.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><A title=_GoBack name=_GoBack></A><FONT face=Calibri>Obviously, the Hypervisor can’t predict the RAM or CPU usage needs of VMs that haven’t been created yet. It may have already distributed the existing VMs across the NUMA nodes, fragmenting the remaining NUMA resources such none of the nodes can’t fully satisfy the next VM to be created. Under these circumstances, you may want to place specific VMs on specific NUMA nodes to avoid the use of remote NUMA memory or alleviate CPU contention.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="mso-bookmark: _GoBack"><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></SPAN></P><SPAN style="mso-bookmark: _GoBack"></SPAN>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Consider the situation with the following 4 VMs:<o:p></o:p></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst><SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri>Test-1, configured with 2 virtual processors and 3 GB of memory<o:p></o:p></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri>Test-2, configured with 4 virtual processors and 4 GB of memory<o:p></o:p></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle><SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri>Test-3, configured with 2 virtual processors and 3 GB of memory<o:p></o:p></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast><SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT face=Calibri>Test- 4, configured with 1 virtual processors and 1 GB of memory<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>The partial screen shot below for Performance Monitor (PerfMon) show how the Hypervisor has nicely balanced the 4 virtual machines across 2 different NUMA nodes (see “Preferred NUMA Node Index”).<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="mso-fareast-language: EN-US; mso-no-proof: yes"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299970.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299970.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299970.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299970.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299970.aspx"><IMG border=0 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/29/99/70/NUMA1.png" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3299970/original.aspx" mce_src="https://blogs.technet.com/photos/winsrvperf_img/images/3299970/original.aspx"></A>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Notice how Hyper-V has balanced on the VMs across the two NUMA nodes, two VMs on node 0, and two VMs on node 1. In this case the memory requirements of each VM can be met by the local node memory (“Remote Physical Pages” is zero for all the VMs).<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Now consider the case where I wanted <B style="mso-bidi-font-weight: normal">test-2</B>, my biggest, memory and CPU hungry VM to have its own dedicated NUMA node. How can this be achieved?<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>The trick is to set the NUMA node preference for the VM. In this way when the VM is started, Hyper-V will use the NUMA node preference for the VM.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Tony Voellm previously wrote a blog posting about setting and getting the NUMA node preferences for a VM (</FONT><A href="https://blogs.msdn.com/tvoellm/archive/2008/09/28/Looking-for-that-last-once-of-performance_3F00_-Then-try-affinitizing-your-VM-to-a-NUMA-node-.aspx" mce_href="https://blogs.msdn.com/tvoellm/archive/2008/09/28/Looking-for-that-last-once-of-performance_3F00_-Then-try-affinitizing-your-VM-to-a-NUMA-node-.aspx"><FONT color=#0000ff face=Calibri>https://blogs.msdn.com/tvoellm/archive/2008/09/28/Looking-for-that-last-once-of-performance_3F00_-Then-try-affinitizing-your-VM-to-a-NUMA-node-.aspx</FONT></A><FONT face=Calibri>).<SPAN style="mso-spacerun: yes">&nbsp; </SPAN><o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>By using Tony’s script, I can explicitly set the preference appropriately to force <B style="mso-bidi-font-weight: normal">test-2</B> to always be on first NUMA node and all the other machines (<B style="mso-bidi-font-weight: normal">test-1</B>, <B style="mso-bidi-font-weight: normal">test-3</B>, and <B style="mso-bidi-font-weight: normal">test-4</B>) on the second NUMA node (e.g. “</FONT><SPAN style="FONT-FAMILY: 'Courier New'; BACKGROUND: #dbe5f1; FONT-SIZE: 8pt; mso-bidi-font-size: 10.0pt; mso-shading-themecolor: accent1; mso-shading-themetint: 51">numa.ps1 /set test-2 0</SPAN><FONT face=Calibri>”, “</FONT><SPAN style="FONT-FAMILY: 'Courier New'; BACKGROUND: #dbe5f1; FONT-SIZE: 8pt; mso-bidi-font-size: 10.0pt; mso-shading-themecolor: accent1; mso-shading-themetint: 51">numa.ps1 /set test-1 1</SPAN><FONT face=Calibri>”, “</FONT><SPAN style="FONT-FAMILY: 'Courier New'; BACKGROUND: #dbe5f1; FONT-SIZE: 8pt; mso-bidi-font-size: 10.0pt; mso-shading-themecolor: accent1; mso-shading-themetint: 51">numa.ps1 /set test-3 1</SPAN><FONT face=Calibri>”, “</FONT><SPAN style="FONT-FAMILY: 'Courier New'; BACKGROUND: #dbe5f1; FONT-SIZE: 8pt; mso-bidi-font-size: 10.0pt; mso-shading-themecolor: accent1; mso-shading-themetint: 51">numa.ps1 /set test-4 1</SPAN><FONT face=Calibri>”). <o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Setting the preference take affect when the VM is started, so if you set the preference on an already running VM, the VM will need to be restarted for it to take effect. And the preference moves with the VM, so if the VM is moved to another host, either by Quick Migration, or Live Migration, the preference will take effect on the new host.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>After restarting the VMs (so that my preference to took effect), you can see in the partial screen shot from PerfMon below that <B style="mso-bidi-font-weight: normal">test-2</B> is only node 0, and the other VMs are on node 1.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="mso-fareast-language: EN-US; mso-no-proof: yes"></SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299971.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299971.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299971.aspx"></A><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com//winsrvperfimg/3299971.aspx" original-url="https://blogs.technet.com/photos/winsrvperf_img/picture3299971.aspx" target=_blank mce_href="https://blogs.technet.com/photos/winsrvperf_img/picture3299971.aspx"><IMG border=0 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/29/99/71/NUMA2.png" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3299971/original.aspx" mce_src="https://blogs.technet.com/photos/winsrvperf_img/images/3299971/original.aspx"></A>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Now whenever the <B style="mso-bidi-font-weight: normal">test-2</B> VM is started, it will also be assigned to NUMA node 0, regardless of what is already running on node 0. <o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Finally a word of caution: be careful when choosing to set the NUMA node preference of a VM; if all the VMs are assigned to the same NUMA node, the VMs may behave poorly if they cannot get enough CPU time, or if there isn’t enough local memory on the NUMA node for the new VM, the VM won’t even start.</FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri></FONT>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Tim Litton &amp; Tom Basham</FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>WIndows Performance&nbsp;Team<o:p>&nbsp;</o:p></FONT></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>File Server Capacity Tool (FSCT) 1.0</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/file-server-capacity-tool-fsct-1-0</link>
      <pubDate>Fri, 13 Nov 2009 11:06:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2009/11/13/file-server-capacity-tool-fsct-1-0/</guid>
      <description><![CDATA[What is “FSCT”?
New builds of Microsoft Windows are produced almost every day for internal...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3><FONT face=Calibri>What is “FSCT”?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></B></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><FONT face=Calibri>New builds of Microsoft Windows are produced almost every day for internal development and testing. In order to detect performance regressions as soon as possible, those builds have to be evaluated and compared to their predecessors as well as previous public releases. A range of performance tests are used for these comparisons, including one called “FSCT” (which stands for File Server Capacity Tool).<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>FSCT was developed by the Windows Server Performance team as a tool capable of simulating multiple concurrent users accessing a file server using CIFS/SMB/SMB2. Its architecture allows for usage of “workloads”. Each workload consists of a set of basic scenarios (e.g. upload of a file using Explorer, upload of a file using xcopy, Microsoft Word opening a file, etc.), information on how often those scenarios should be performed by users, and what files on the file server under test should be used.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>FSCT measures a file server’s capacity for a given workload.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>This includes the highest throughput the server can sustain and the maximum number of active users the server can support.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>FSCT also reports on server resource utilization, which can help identify performance bottlenecks such as network or storage bandwidth or CPU utilization.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3><FONT face=Calibri>The HomeFolders workload<o:p></o:p></FONT></FONT></B></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><FONT face=Calibri>The publically available version of “FSCT” comes with a single workload called <B style="mso-bidi-font-weight: normal">HomeFolders</B>. It was created by working with Microsoft IT administrators to capture Event Tracing for Windows (ETW) traces from real, heavily accessed file servers and their clients. The data included server side traces, client API traces and network traces, to capture the requests type distribution, parameters distribution, file set characteristics, and connection characteristics. Finally, the workload was created and tested to achieve approximately the same usage patterns found in the traces. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3><FONT face=Calibri>The workload development effort included creating the scenarios, creating the file sets and defining the number of runs per user per hour of each scenario. It is important to mention that “FSCT” and the HomeFolders workload were developed independently. The “FSCT” architecture allows for the creation of custom workloads and scenarios, as well as tweaking the existing workloads. However, as mentioned previously, only the HomeFolders&nbsp;is included in the initial release of “FSCT”.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 10pt" class=MsoNormal><FONT size=3 face=Calibri>You can find more information on FSCT at </FONT><FONT size=3 face=Calibri><A href="https://blogs.technet.com/josebda/archive/2009/09/16/file-server-capacity-tool-fsct-1-0-available-for-download.aspx" mce_href="https://blogs.technet.com/josebda/archive/2009/09/16/file-server-capacity-tool-fsct-1-0-available-for-download.aspx">https://blogs.technet.com/josebda/archive/2009/09/16/file-server-capacity-tool-fsct-1-0-available-for-download.aspx</A></FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>High Speed Networking Deployment Guide Released</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/high-speed-networking-deployment-guide-released</link>
      <pubDate>Tue, 20 Oct 2009 09:51:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2009/10/20/high-speed-networking-deployment-guide-released/</guid>
      <description><![CDATA[Loyal readers - many of the performance questions we get in the Windows Server Performance...]]></description>
      <content:encoded><![CDATA[<P>Loyal readers - many of the performance questions we get in the Windows Server Performance team&nbsp;pertain to networking. We've&nbsp;described several networking performance features and applicable scenarios in previous posts and in our <A href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv-R2.mspx" mce_href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv-R2.mspx">tuning guides</A>. </P>
<P>We wanted to inform you that an incredibly useful white paper was recently published from our friends in the High Speed Networking team titled&nbsp;<STRONG><A href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc" mce_href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc">"</A></STRONG><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt"><STRONG><A href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc" mce_href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc">Networking Deployment Guide: Deploying High-Speed Networking Features."</A> </STRONG>The document covers concepts, deployment instructions, and diagnostic monitoring tools&nbsp;for high speed networking features available in Windows Server 2008 and 2008 R2&nbsp;such as&nbsp;TCP Chimney, Receive Side Scaling (RSS), netDMA, and virtual machine queue (VMQ). </SPAN></P>
<P><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt">If you've ever been curious about the difference between&nbsp;the Automatic&nbsp;and&nbsp;Enabled settings for&nbsp;TCP Chimney, or wanted to know which registry keys to set to enable VMQ interrupt coalesing (tip:&nbsp;coalescing may reduce the overhead of VMQ interrupt handling!), this document (<A href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc" mce_href="https://download.microsoft.com/download/8/E/D/8EDE21BC-0E3B-4E14-AAEA-9E2B03917A09/HSN_Deployment_Guide.doc">direct link</A>)&nbsp;is where to get the information.</SPAN></P>
<P><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt">Happy Configuring!</SPAN></P>
<P><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt"><EM>Matthew Robben</EM></SPAN></P>
<P><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt"></SPAN><EM><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt">Program Manager, Windows </SPAN><SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: SimSun; mso-fareast-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-font-kerning: 12.0pt">Server Performance Team</SPAN></EM></P>]]></content:encoded>
    </item>
    <item>
      <title>Interpreting CPU Utilization for Performance Analysis</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/interpreting-cpu-utilization-for-performance-analysis</link>
      <pubDate>Thu, 06 Aug 2009 16:02:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2009/08/06/interpreting-cpu-utilization-for-performance-analysis/</guid>
      <description><![CDATA[CPU hardware and features are rapidly evolving, and your performance testing and analysis...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>CPU hardware and features are rapidly evolving, and your performance testing and analysis methodologies may need to evolve as well. If you rely on CPU utilization as a crucial performance metric, <STRONG>you could be making some big mistakes interpreting the data</STRONG>. Read this post to get the full scoop; experts can scroll down to the end of the article for a summary of the key points.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>If you’re the type of person who frequents our server performance blog, you’ve probably seen (or watched) this screen more than a few times:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;<IMG style="WIDTH: 374px; HEIGHT: 420px" title=perf alt=perf align=baseline src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/27/13/05/taskman.PNG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3271305/original.aspx" width=374 height=420 mce_src="https://blogs.technet.com/photos/winsrvperf_img/images/3271305/original.aspx"></FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="mso-no-proof: yes"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>This is, of course, the Performance tab in Windows Task Manager. While confusion over the meaning of the Physical Memory counters is a regular question we field on the perf team, today I’m going to explain how CPU utilization (referred to here as CPU Usage) may not mean what you would expect!<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>[Note: In the screenshot above, CPU utilization is shown as a percentage in the top left. The two graphs on the top right show a short history of CPU usage for two cores. Each core gets its own graph in Task Manager.] <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>CPU utilization is a key performance metric. It can be used to track CPU performance regressions or improvements, and is a useful datapoint for performance problem investigations. It is also fairly ubiquitous; it is reported in numerous places in the Windows family of operating systems, including Task Manager (taskmgr.exe), Resource Monitor (resmon.exe), and Performance Monitor (perfmon.exe). <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>The concept of CPU utilization used to be simple.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Assume you have a single core processor fixed at a frequency of 2.0 GHz. CPU utilization in this scenario is the percentage of time the processor spends doing work (as opposed to being idle). If this 2.0 GHz processor does 1 billion cycles worth of work in a second, it is 50% utilized for that second. Fairly straightforward.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Current processor technology is much more complex. A single processor package may contain multiple cores with dynamically changing frequencies, hardware multithreading, and shared caches. These technological advances can change the behavior of CPU utilization reporting mechanisms and increase the difficulty of performance analysis for developers, testers, and administrators. The goal of this post is to explain the subtleties of CPU utilization on modern hardware, and to give readers an understanding of which CPU utilization measurements can and cannot be compared during performance analysis. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<H2 style="MARGIN: 10pt 0in 0pt"><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>CPU Utilization’s Uses<o:p></o:p></FONT></FONT></FONT></H2>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>For those who are unaware, CPU utilization is typically used to track CPU performance regressions or improvements when running a specific piece of code. Say a company is working on a beta of their product called “Foo.” In the first test run of Foo a few weeks ago, they recorded an average CPU utilization of 25% while Foo was executing. However, in the latest build the average CPU utilization during the test run is measured at 75%. Sounds like something’s gone awry. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>CPU utilization can also be used to investigate performance problems. We expect this type of scenario to become common as more developers use the </FONT><A href="https://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="https://msdn.microsoft.com/en-us/performance/default.aspx"><FONT size=3 face=Calibri>Windows Performance Toolkit</FONT></A><FONT size=3><FONT face=Calibri> to assist in debugging applications. Say that Foo gets released for beta. One customer says that when Foo is running, their system becomes noticeably less responsive. That may be a tough bug to root cause. However, if the customer submits an XPerf trace, CPU utilization (and many other nifty metrics) can be viewed per process. If Foo.exe typically uses 25% CPU on their lab test machines, but the customer trace shows Foo.exe is using 99% of the CPU on their system, this could be indicative of a performance bug.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Finally, CPU utilization has important implications on other system performance characteristics, namely power consumption. Some may think the magnitude of CPU utilization is only important if you’re bottlenecked on CPU at 100%, but that’s not at all the case. Each additional % of CPU Utilization consumes a bit more juice from the outlet, which costs money. If you’re paying the electricity bill for the datacenter, you certainly care about that! <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Before I go further, I want to call out a specific caveat for the more architecturally-aware folks. Earlier, I used the phrase “cycles worth of work”. I will avoid defining the exact meaning of “work” for a non-idle processor. That discussion can quickly become contentious. Metrics like Instructions Retired and Cycles per Instruction can be very architecture and instruction dependent and are not the focus of this discussion. Also, “work” may or may not include a plethora of activity, including floating point and integer computation, register moves, loads, stores, delays waiting for memory accesses and IO’s, etc.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>It is virtually impossible for every piece of functionality on a processor to be utilized during any given cycle, which leads to arguments about how much functionality must participate during “work” cycles. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Now, a few definitions:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Processor Package:</B> The physical unit that gets attached to the system motherboard, containing one or more processor cores. In this blog post “processor” and “processor package” are synonymous. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Processor Core: </B>An individual processing unit that is capable of executing instructions and doing computational work. In this blog post, the terms “CPU” and “core” are intended to mean the same thing. A “Quad-Core” processor implies four cores, or CPU’s, per processor package.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Physical Core: </B>Another name for an instance of a processor core. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Logical Core: </B>A special subdivision of a physical core in systems supporting Symmetric Multi-Threading (SMT). A logical core shares some of its execution path with one or more other logical cores . For example, a processor that supports Intel’s Hyper-Threading technology will have two logical cores per physical core. A “quad-core, Hyper-Threaded” processor will have 8 logical cores and 4 physical cores.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Non Uniform Memory Access (NUMA)</B> – a type of system topology with multiple memory controllers, each responsible for a discrete bank of physical memory. Requests to each memory bank on the system may take different amounts of time, depending on where the request originated and which memory controller services the request.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">NUMA node</B>: A topological grouping of a memory controller, associated CPU’s, and associated bank of physical memory on a NUMA system. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Hardware thread:</B> A thread of code executing on a logical core.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Affinitization: </B>The process of manually restricting a process or individual threads in a process to run on a specific core, package, or NUMA node. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Virtual Processor:</B> An abstract representation of a physical CPU presented to a guest virtual machine.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<H2 style="MARGIN: 10pt 0in 0pt"><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Comparisons &amp; Pitfalls<o:p></o:p></FONT></FONT></FONT></H2>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>CPU utilization data is almost always useful. It is a piece of information that tells you something about system performance. The real problem comes when you try to put one piece of data in context by comparing it to another piece of data from a different system or a different test run. Not all CPU utilization measurements are comparable - even two measurements taken on the same make and model of processor. There are a few sources of potential error for folks using utilization for performance analysis; hardware features and configuration, OS features and configuration, and measurement tools can all affect validity of the comparison.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Be wary of comparing CPU utilization from different processor makes, families, or models. <o:p></o:p></FONT></FONT></U></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>This seems obvious, but I mentioned a case study above where the Foo performance team got a performance trace back from a customer, and CPU utilization was very different from what was measured in the lab. The conclusion that 99% CPU utilization = a bug is not valid if processors are at all different, because you’re not comparing apples to apples. It can be a useful gut-check, but treat it as such.</FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true">&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #1: </FONT></B><FONT size=3><FONT face=Calibri>Processor of type A @ 100% utilization IS NOT EQUAL TO Processor of type B @ 100% utilization<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></B></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><FONT size=3><FONT face=Calibri><U>Resource sharing between physical cores may affect CPU utilization </U>(for better or worse)<U><o:p></o:p></U></FONT></FONT></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Single-core processors, especially on servers, are uncommon; multi-core chips are now the norm. This complicates a utilization metric for a few reasons. Most significantly, resource sharing between processor cores (logical and physical) in a package makes “utilization” a very hard-to-define concept. L3 caches are almost always shared amongst cores; L2 and L1 might also be shared. When resource sharing occurs, the net effect on performance is<B> workload dependent</B>. Applications that benefit from larger caches could suffer if cache space is shared between cores, but if your workload requires synchronization, it may be beneficial for all threads to be executing with shared cache. Cache misses and other cache effects on performance are not explicitly called out in the performance counter set. <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>So the reported utilization includes time spent waiting for cache or memory accesses, and this time can grow or shrink based on the amount and kind of resource sharing.<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><SPAN style="mso-spacerun: yes"></SPAN></FONT></FONT>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><SPAN style="mso-spacerun: yes"></SPAN></FONT></FONT><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #2: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same package @ 100% utilization IS NOT EQUAL TO 2 HW threads on different packages @ 100% utilization (for better or worse)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Resource sharing between logical cores may affect CPU utilization (for better or worse)<o:p></o:p></FONT></FONT></U></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Resource sharing also occurs in execution pipelines when SMT technologies like Intel’s Hyper-threading are present. Logical cores are not the same as physical cores - execution units may be shared between multiple logical cores. Windows considers each logical core a CPU, but seeing the term “Processor 1” in Windows does not imply that the corresponding silicon is a fully functioning, individual CPU. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Consider 2 logical cores sharing some silicon on their execution path. If one of the logical cores is idle, and the other is running at full bore, we have 100% CPU utilization for one logical core. Now consider when both logical cores are active and running full bore. Can we really achieve double the “work” of the previous example? The answer is heavily dependent on the workload characteristics and the interaction of the workload with the resources being shared. SMT is a feature that improves performance in many scenarios, but it makes evaluating performance metrics more…interesting.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri></FONT></B>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #3: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same logical core @ 100% utilization IS NOT EQUAL TO 2 HW threads on different logical cores @ 100% utilization (for better or worse)</FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><o:p></o:p></FONT></FONT>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>4.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>NUMA latencies may affect CPU utilization (for better or worse)<o:p></o:p></FONT></FONT></U></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>An increasing percentage of systems have a NUMA topology. NUMA and resource sharing together imply that system topology can have dramatic effects on overall application performance. Similar to the previous two pitfalls, NUMA effects on performance are workload dependent.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>If you want to see which cores belong to which NUMA nodes, right click on a process in the “Processes” tab of Task Manager and click “set affinity…”. You should get a window similar to the one below, which shows the CPU-to-node mapping if a server is NUMA-based. Another way to get this information is to execute the “!NUMA” command in the Windows Debugger (windbg.exe).<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 1in" class=MsoListParagraph><SPAN style="mso-no-proof: yes"></SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><o:p><FONT size=3 face=Calibri>&nbsp;<IMG style="WIDTH: 374px; HEIGHT: 420px" title=Affinity alt=Affinity src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/27/13/06/affinity.PNG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3271306/original.aspx" width=374 height=420 mce_src="https://blogs.technet.com/photos/winsrvperf_img/images/3271306/original.aspx"></FONT></o:p></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri></FONT></B>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>&nbsp;</FONT></B><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>K</FONT></B><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>ey takeaway #4: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same NUMA node @ 100% utilization IS NOT EQUAL TO 2 HW threads on different NUMA nodes @ 100% utilization (for better or worse)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.75in" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt 1in" class=MsoListParagraph><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>5.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Processor power management (PPM) may cause CPU utilization to appear artificially high<o:p></o:p></FONT></FONT></U></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Power management features introduce more complexity to CPU utilization percentages. Processor power management (PPM) matches the CPU performance to demand by scaling the frequency and voltage of CPU’s. During low-intensity computational tasks like word processing, a core that nominally runs at 2.4 GHz rarely requires all 2.4 billion potential cycles per second. When fewer cycles are needed, the frequency can be scaled back, sometimes significantly (as low as 28% of maximum). This is very prevalent in the market - PPM is present on nearly every commodity processor shipped today (with the exception of some “low-power” processor SKUs), and Windows ships with PPM enabled by default in Vista, Windows 7, and Server 2008 / R2. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>In environments where CPU frequency is dynamically changing (reminder: this is more likely than not), be very careful when interpreting the CPU utilization counter reported by Performance Monitor or any other current Windows monitoring tool. Utilization values are calculated based on the <B>instantaneous</B> (or possibly <B style="mso-bidi-font-weight: normal">mean)</B> operating frequency, not the maximum rated frequency. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Example: In a situation where your CPU is lightly utilized, Windows might reduce the operating frequency down to 50% or 28% of its maximum. When CPU utilization is calculated, Windows is using this reference point as the “maximum” utilization. If a CPU nominally rated at 2.0 GHz is running at 500 MHz, and all 500 million cycles available are used, the CPU utilization would be shown as 100%. Extending the example, a CPU that is 50% utilized at 28% of its maximum frequency is using approximately 14% of the maximum possible cycles during the time interval measured, but CPU utilization would appear in the performance counter as 50%, not 14%. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>You can see instantaneous frequencies of CPUs in the “Performance Monitor” tool. See the “<B style="mso-bidi-font-weight: normal">Processor Performance</B>” object and select the “<B style="mso-bidi-font-weight: normal">% of Maximum Frequency</B>” counter.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>[Side note related to Perfmon and power management: the “<B style="mso-bidi-font-weight: normal">Processor Frequency</B>” and “<B style="mso-bidi-font-weight: normal">% of Maximum Frequency</B>” counters are instantaneous samples, not averaged samples. Over a sample interval of one second, the frequency can change dozens of times. But the only frequency you’ll see is the instantaneous sample taken each second. Again, ETW or other more granular measurement tools should be used to obtain statistically better data for calculating utilization.]<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal><B style="mso-bidi-font-weight: normal"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #5</B>: 2 HW threads @ 100% utilization and 50% of rated frequency IS NOT EQUAL TO 2 HW threads @ 100% utilization and 100% of rated frequency<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #6</B>: 4 HW threads @ 100% utilization and 50% of rated frequency IS NOT EQUAL TO 2 HW threads @ 100% utilization and 100% of rated frequency <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>6.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><FONT size=3><FONT face=Calibri><U>Special Perfmon counters should be used to obtain CPU utilization in virtualized environments</U><o:p></o:p></FONT></FONT></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>Virtualization introduces more complexity, because allocation of work to cores is done by the hypervisor rather than the guest OS. If you want to view CPU utilization information via Performance Monitor, specific hypervisor-aware performance counters should be used. In the root partition of a Windows Server running Hyper-V, the “Hypervisor Root Virtual Processor % Total Runtime” counter can be used to track CPU utilization for the Virtual Processors to which a VM is assigned. For deeper analysis of Hyper-V Performance Counters and Processor Utilization in virtualized scenarios, see blog posts </FONT><A href="https://blogs.msdn.com/tvoellm/archive/2008/05/12/hyper-v-performance-counters-part-four-of-many-hyper-v-hypervisor-virtual-processor-and-hyper-v-hypervisor-root-virtual-processor-counter-set.aspx" mce_href="https://blogs.msdn.com/tvoellm/archive/2008/05/12/hyper-v-performance-counters-part-four-of-many-hyper-v-hypervisor-virtual-processor-and-hyper-v-hypervisor-root-virtual-processor-counter-set.aspx"><FONT color=#0000ff size=3 face=Calibri>here</FONT></A><FONT size=3 face=Calibri> and </FONT><A href="https://blogs.msdn.com/tvoellm/archive/2008/07/14/how-to-get-processor-utilization-for-hyper-v-via-wmi.aspx" mce_href="https://blogs.msdn.com/tvoellm/archive/2008/07/14/how-to-get-processor-utilization-for-hyper-v-via-wmi.aspx"><FONT color=#0000ff size=3 face=Calibri>here</FONT></A><FONT size=3><FONT face=Calibri>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #7</B>:<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>In a virtualized environment, unique Perfmon counters exposed by the hypervisor to the root partition should be used to get accurate CPU utilization information. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>7.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></I></B><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>“% Processor Time” Perfmon counter data may not be statistically significant for short test runs<o:p></o:p></FONT></FONT></U></I></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>For someone performing performance testing and analysis, the ability to log CPU utilization data over time is critical. A data collector set can be configured via logman.exe to log the “<B style="mso-bidi-font-weight: normal">% Processor Time</B>”counter in the “<B style="mso-bidi-font-weight: normal">Processor</B> <B style="mso-bidi-font-weight: normal">Information”</B> object for this purpose. Unfortunately, counters logged in this fashion have a relatively coarse granularity in terms of time intervals; the minimum interval is one second.&nbsp; Relatively long sample sizes need to be taken to ensure statistical significance in the utilization data. If you need higher precision, then out-of-band Windows tools like XPerf in the </FONT><A href="https://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="https://msdn.microsoft.com/en-us/performance/default.aspx"><FONT size=3 face=Calibri>Windows Performance Toolkit</FONT></A><FONT size=3><FONT face=Calibri> can measure and track CPU utilization with a finer time granularity using the Event Tracing for Windows (ETW) infrastructure.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #8:</B> Perfmon is a good starting point for measuring utilization but it has several limitations that can make it less than optimal. Consider alternatives like XPerf in the </FONT></FONT><A href="https://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="https://msdn.microsoft.com/en-us/performance/default.aspx"><FONT size=3 face=Calibri>Windows Performance Toolkit</FONT></A><FONT size=3><FONT face=Calibri>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<H2 style="MARGIN: 10pt 0in 0pt"><FONT size=4><FONT color=#4f81bd><FONT face=Cambria>Best Practices for Performance Testing and Analysis Involving CPU Utilization<o:p></o:p></FONT></FONT></FONT></H2>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>If you want to minimize the chances that hardware and OS features or measurement tools skew your utilization measurements, consider the following few steps:<o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>If you’re beginning to hunt down a performance problem or are attempting to optimize code for performance, start with the simplest configuration possible and add complexity back into the mix later. &nbsp;<o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l1 level2 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>a.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use the “High Performance” power policy in Windows or disable power management features in the BIOS to avoid processor frequency changes that can interfere with performance analysis.<o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l1 level2 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>b.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Turn off SMT, overclocking, and other processor technologies that can affect the interpretation of CPU utilization metrics. &nbsp;<o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l1 level2 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>c.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Affinitize application threads to a core. <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>This will enhance repeatability and reduce run-to-run variations. Affinitization masks can be specified programmatically, from the command line, or can be set using the GUI in Task Manager.. <o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l1 level2 lfo1" class=MsoListParagraph><B><SPAN style="COLOR: red; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>d.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></B><B><SPAN style="COLOR: red"><FONT size=3><FONT face=Calibri>Do NOT continue to test or run in production using this configuration indefinitely. You should strive to test in out-of-box or planned production configuration, with all appropriate performance and power features enabled, whenever possible. <o:p></o:p></FONT></FONT></SPAN></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B>Key Takeaway #9:</B><SPAN style="mso-bidi-font-weight: bold"><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>When analyzing performance issues or features, start with as simple a system configuration as possible, but be sure to analyze the typical customer configuration at some point as well.<o:p></o:p></SPAN></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B><SPAN style="COLOR: red"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></B></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3 face=Calibri>Understand the system topology and where your application is running on the system in terms of cores, packages, and nodes when your application is <B style="mso-bidi-font-weight: normal">not</B> explicitly affinitized. Performance issues can suddenly appear in complex hardware topologies; ETW and XPerf in the </FONT><A href="https://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="https://msdn.microsoft.com/en-us/performance/default.aspx"><FONT size=3 face=Calibri>Windows Performance Toolkit</FONT></A><FONT size=3><FONT face=Calibri> can help you to monitor this information. <o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 1in; mso-list: l1 level2 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>a.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Rebooting will generally change where unaffinitized work is allocated to CPUs on a machine. This can make topology-related performance issues reproduce intermittently, increasing the difficulty to root cause and debug problems. Reboot and rerun tests several times, or explicitly affinitize to specific cores and nodes to help flush out any issues related to system topology. This does not mean that the final implementation is required to use thread affinity, or that affinity should be used to work around potential issues; it just improves repeatability and clarity when testing and debugging.<o:p></o:p></FONT></FONT></P>
<P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1" class=MsoListParagraph><SPAN style="mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use the right performance sampling tools for the job. If your sample sets will cover a long period of time, Perfmon counters may be acceptable. ETW generally samples system state more frequently and is correspondingly more precise than Perfmon, making it effective even with shorter duration samples. Of course, there is a tradeoff - depending on the number of ETW “hooks” enabled, you may end up gathering significantly more data and your trace files may be large.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoListParagraph><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Finally, keep in mind that these problems are not isolated to the Windows operating system family. The increase in processor features and complexity over the past decade has made performance analysis, testing, and optimization a challenge on all platforms, regardless of OS or processor manufacturer. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>And If you are comparing CPU utilization between two different test runs or systems, use the guidance in this post to double check that the comparison makes sense. Making valid comparisons means you’ll spend more of your time chasing valid performance issues. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><STRONG><FONT color=#4f81bd><FONT face=Cambria><SPAN class=Heading2Char><SPAN style="FONT-SIZE: 13pt">Summary of Key Takeaways</SPAN></SPAN><o:p></o:p></FONT></FONT></STRONG></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><STRONG><FONT size=3 face=Calibri>Key takeaway #1: </FONT></STRONG><FONT size=3><FONT face=Calibri>Processor of type A @ 100% utilization IS NOT EQUAL TO Processor of type B @ 100% utilization<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #2: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same package @ 100% utilization IS NOT EQUAL TO 2 HW threads on different packages @ 100% utilization (for better or worse)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #3: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same logical core @ 100% utilization IS NOT EQUAL TO 2 HW threads on different logical cores @ 100% utilization (for better or worse)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3 face=Calibri>Key takeaway #4: </FONT></B><FONT size=3><FONT face=Calibri>2 HW threads on the same NUMA node @ 100% utilization IS NOT EQUAL TO 2 HW threads on different NUMA nodes @ 100% utilization (for better or worse)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #5</B>: 2 HW threads @ 100% utilization and 50% of rated frequency IS NOT EQUAL TO 2 HW threads @ 100% utilization and 100% of rated frequency<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #6</B>: 4 HW threads @ 100% utilization and 50% of rated frequency IS NOT EQUAL TO 2 HW threads @ 100% utilization and 100% of rated frequency <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #7</B>:<SPAN style="mso-spacerun: yes"> </SPAN>In a virtualized environment, unique Perfmon counters exposed by the hypervisor to the root partition should be used to get accurate CPU utilization information. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Key takeaway #8:</B> Perfmon is a good starting point for measuring utilization but it has several limitations that can make it less than optimal. Consider alternatives like XPerf in the </FONT></FONT><A href="https://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="https://msdn.microsoft.com/en-us/performance/default.aspx"><FONT size=3 face=Calibri>Windows Performance Toolkit</FONT></A><FONT size=3><FONT face=Calibri>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B>Key Takeaway #9:</B><SPAN style="mso-bidi-font-weight: bold"><SPAN style="mso-spacerun: yes"> </SPAN>When analyzing performance issues or features, start with as simple a system configuration as possible, but be sure to analyze the typical customer configuration at some point as well.<B><o:p></o:p></B></SPAN></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Feel free to reply with questions or additional (or alternative) perspectives, and good luck!<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Matthew Robben<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Program Manager<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Windows Server Performance Team<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Performance Tuning Guidelines for Windows Server 2008 R2 Released</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/performance-tuning-guidelines-for-windows-server-2008-r2-released</link>
      <pubDate>Tue, 14 Jul 2009 13:34:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2009/07/14/performance-tuning-guidelines-for-windows-server-2008-r2-released/</guid>
      <description><![CDATA[With Windows Server 2008 R2 almost at RTM, a new tuning guide has been released. It can be found...]]></description>
      <content:encoded><![CDATA[<P><FONT size=3 face=Calibri>With Windows Server 2008 R2 almost at RTM, a new tuning guide has been released. It can be found <A href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv-R2.mspx" target=_blank mce_href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv-R2.mspx">here</A>.</FONT></P>
<P><FONT size=3 face=Calibri>And don't forget the <A href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx" target=_blank mce_href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx">Windows Server 2008 Turning Guide</A> is still availiable and has recently been refreshed for SP2.</FONT></P>
<P mce_keep="true"><FONT size=3 face=Calibri>Windows Server Performance Team</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Configuring Windows Server 2008 Power Parameters for Increased Power Efficiency</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/configuring-windows-server-2008-power-parameters-for-increased-power-efficiency</link>
      <pubDate>Thu, 04 Dec 2008 18:10:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2008/12/04/configuring-windows-server-2008-power-parameters-for-increased-power-efficiency/</guid>
      <description><![CDATA[Matthew Robben here, I’m a Program Manager on the Windows Server Performance team and my primary...]]></description>
      <content:encoded><![CDATA[<p style="margin: 0in 0in 0pt;" class="MsoNormal"><a title="_Toc214264086" name="_Toc214264086"></a><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Matthew Robben here, I’m a Program Manager on the Windows Server Performance team and my primary responsibility is Windows Server power management. Server power efficiency is a topic of considerable importance – in today’s difficult economy, IT organizations need to contain and reduce costs. Yet the cost of energy to power and cool a 1U server is now more than the amortized cost of the server (over 3 years).  </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ?--><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Energy efficient hardware and software reduces operational costs and directly impacts an organization’s bottom line. We’re in the midst of developing Windows Server 2008 R2, and one of our goals for the product is to build a server operating system that is more power efficient than all of our previous releases. Furthermore, to help IT administrators better understand server power management and optimize their current Windows Server 2008 installations, we’re releasing a <a href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx" mce_href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx">comprehensive white paper</a> called “Power In, Dollars Out: Reducing the Flows in the Data Center” today. The <a href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx" mce_href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx">white paper</a> gives detailed explanations of many factors affecting server power efficiency, and contains a list of best practices for optimization. </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">One of the stated best practices is to properly configure Windows Server 2008’s power management features. According to the Green Grid, just turning on PPM features in the operating system can reduce power consumption by 20%. In Windows Server, this can be done simply by choosing the Balanced or Power Saver power policies (found in the Power Options applet in the Control Panel). Of course, PPM is a complicated technology, with many more toggles than a simple on/off switch. We’ve done quite a bit of work on the Windows Server processor power management (PPM) algorithms and parameters during R2 development. One of the results of this work was the development of a set of parameters that can boost power efficiency by up to 10% on standard benchmark workloads. </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Good news - you don’t need to wait until R2 to deploy these new parameters on your servers. This blog post will describe PPM technology, explain the parameters involved, and show benchmark test results for the parameter changes on a commodity server. It will also give you a handy command-line walkthrough of the powercfg.exe commands necessary to implement these changes in your environment. </span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">First, some context. Power management requires cooperation from the hardware and the operating system to work efficiently. For example, hardware might support low power states, but the operating system schedules computational work and is in the best position to decide when low power states can be leveraged. The Advanced Configuration and Power Interface (ACPI) defines an interface between the operating system and server hardware to be used for power management purposes. </span></p>

<h2 style="margin: 12pt 0in 4pt;"><a title="_Toc214264073" name="_Toc214264073"></a><span style="mso-fareast-font-family: 'Times New Roman';"><span size="4" style="font-size: large;">ACPI Processor Performance States</span></span><span style="mso-fareast-font-family: 'Times New Roman';"><o:p></o:p></span></h2>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">The processor has traditionally consumed the most power in a server, which makes it a great candidate for power-efficiency optimizations. To add detail and flexibility for processor power management, ACPI defines a few sets of states for processors. Performance states, or P-states, are one such state that can be leveraged to increase power efficiency.</span></p>

<h3 style="margin: 10pt 0in 0pt;"><a title="_Toc214264075" name="_Toc214264075"></a><span style="mso-fareast-font-family: 'Times New Roman';"><span color="#4f81bd" size="3" face="Cambria" style="color: #4f81bd; font-family: Cambria; font-size: medium;">P-States</span></span><span style="mso-fareast-font-family: 'Times New Roman';"><o:p></o:p></span></h3>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Processors can transition between multiple performance states, or P-states. P-states define incremental levels of processor performance, from P0 (most performant) to Pn (least performant). The ACPI specification does not specify a maximum number of P-states, so Pn is used to refer to the highest numbered, lowest performant P-state that a processor supports.</span></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Each successively higher numbered P-state consumes less power than the previous P-state. Processors can dynamically switch between these states during operation to provide only as much computational capacity as is necessary, which saves power during periods of low usage.</span></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Figure 1 below shows a hypothetical set of six P-states that would be available to a processor. Note that the maximum P-state (P0) has the highest frequency, while successively higher numbered P-states reduce in frequency. In this case, the minimum P-state is P5, so the terms Pn and P5 would be interchangeable. </span></p>
<p style="page-break-after: avoid; margin: 0in 0in 8pt;" class="MsoBodyText"><span style="mso-no-proof: yes;"><img style="width: 435px; height: 110px;" title="P-state explanatory chart" alt="P-state explanatory chart" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/60/P_state_scale.JPG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3164060/original.aspx" width="340" height="74" mce_src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/60/P_state_scale.JPG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3164060/original.aspx" /></span></p>
<p style="margin: 8pt 0in 12pt;" class="FigCap"><a title="_Ref214212545" name="_Ref214212545"></a><strong>Figure </strong><strong>1. Illustration of P-state number and corresponding frequency</strong></p>

<h2 style="margin: 12pt 0in 4pt;"><span style="mso-fareast-font-family: 'Times New Roman';"><span size="4" style="font-size: large;">Tuning P-State Parameters for Increased Power Efficiency<o:p></o:p></span></span></h2>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Windows Server contains a number of configurable P-state parameters. These can be used to finely tune the power/performance balance of Windows Server PPM. The defaults for these parameters are tuned to deliver excellent power efficiency for most systems and workloads out of the box. However, these are “safe” defaults. They balance performance and power efficiency. Default settings are shown in Table 1. Note that “P-state increase” in this context refers to a transition to a lower numbered, more performant P-state, whereas “P-state decrease” refers to a transition to a higher numbered, less performant P-state. Looking back to Figure 1, an increase would mean moving upward in the chart while a decrease would mean moving downward.</span></p>
<p style="margin: 8pt 0in 0pt;" class="TableHead"><a title="_Ref210755722" name="_Ref210755722"></a><strong><span face="Calibri" style="font-family: Calibri;">Table </span></strong><strong><span face="Calibri" style="font-family: Calibri;">1. Default P-State Parameter Settings in Windows Server 2008</span></strong></p>

<table style="width: 4.45in; border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in;" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="427">
<thead>
<tr style="page-break-inside: avoid; height: 1pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 72.9pt; background: #c6d9f1; height: 1pt; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="TableHead"><span style="font-weight: normal;"><span face="Calibri" style="font-family: Calibri;">Name<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 58.5pt; background: #c6d9f1; height: 1pt; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="TableHead"><span style="font-weight: normal;"><span face="Calibri" style="font-family: Calibri;">Default<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 189pt; background: #c6d9f1; height: 1pt; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="TableHead"><span style="font-weight: normal;"><span face="Calibri" style="font-family: Calibri;">Description<o:p></o:p></span></span></p>
</td>
</tr>
</thead>
<tbody>
<tr style="page-break-inside: avoid; height: 10.7pt; mso-yfti-irow: 1;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Time Check<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.7pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">The time interval at which the operating system considers a change of the current P-state.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 10.15pt; mso-yfti-irow: 2;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.15pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Time<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.15pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.15pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">The minimum time period that must expire before considering a P-state increase.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 10.7pt; mso-yfti-irow: 3;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Time<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">300 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.7pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">The minimum time period that must expire before considering a P-state decrease.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 10.7pt; mso-yfti-irow: 4;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Percentage<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">30%<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.7pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">The utilization percentage<sup>1</sup> that the CPU must exceed to increase P-state.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 10.15pt; mso-yfti-irow: 5;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.15pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Percentage<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.15pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">50%<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.15pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">The utilization percentage that the CPU must be below to decrease P-state<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 10.7pt; mso-yfti-irow: 6;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Domain<o:p></o:p></span></span></p>
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Accounting<o:p></o:p></span></span></p>
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 10.7pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">0 (On)<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 10.7pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="252">
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Determines how the kernel power manager accumulates idle time. Settings:<o:p></o:p></span></span></p>
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;"> 0 (On): idle time is accumulated only when all processors in an idle state domain<sup>2</sup> are idle.<o:p></o:p></span></span></p>
<p style="text-indent: -0.5in; margin: 0in 0in 0pt 0.5in;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">1 (Off): idle time is accumulated and P-states are calculated for each processor without regard to any other processor in the domain.<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 71.45pt; mso-yfti-irow: 7;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 71.45pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 71.45pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">IDEAL (0)<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 189pt; height: 71.45pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" rowspan="2" width="252">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Determines how P-state transition decisions are made. Settings:<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;"> IDEAL (0): calculates the target P-state based only on processor utilization and then finds a nearby available P-state on the system.<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">SINGLE (1): calculates an ideal P-state but only increases or decreases by one P-state per time check interval.<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">ROCKET (2):  transitions to the highest P-state available on increase or lowest P-state available on decrease<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; height: 26.65pt; mso-yfti-irow: 8; mso-yfti-lastrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 72.9pt; height: 26.65pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="97">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 58.5pt; height: 26.65pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; mso-border-top-alt: solid #BFBFBF 1.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid #BFBFBF 1.0pt; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="78">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">SINGLE (1)<o:p></o:p></span></span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 0in 0in 2pt 0.05in;" class="footnote"><span face="Calibri" style="font-family: Calibri;"><sup><span style="font-weight: normal;">1</span></sup><span style="font-weight: normal;">The utilization percentage referenced here is not the same as the CPU usage counter in the Task Manager tool. Without going into more details, this setting is best optimized through empirical experimentation.</span></span></p>
<p style="margin: 0in 0in 2pt 0.05in;" class="footnote"><span face="Calibri" style="font-family: Calibri;"><sup><span style="font-weight: normal;">2</span></sup><span style="font-weight: normal;">A “state domain” is a dependency between different processor cores or packages on a server.  Often, processor designs require that if one core is at a particular performance or idle state, the other cores or packages in the domain must also be at the same state. The hardware notifies the operating system of this dependency by establishing a domain through the ACPI interface.</span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">During Windows Server 2008 R2 development, our team determined a set of parameters that can boost energy efficiency with a very minor performance cost. Notice in Table 1 that the decrease time default is larger than the increase time default. This setting favors P-state increases over decreases. The default increase and decrease percentage settings of 30 and 50 percent, the default domain accounting policy, and the increase and decrease policy defaults favor P-state increases as well.</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">To tune the machine for more aggressive power savings, we suggest reducing the decrease time to 100 ms to match the increase time, changing the increase and decrease policies to favor P-state decrease, and switching the domain accounting policy to 0 (off). We left the increase and decrease percentages as their defaults to ensure that the system PPM parameters were not completely biased toward power savings and to reduce negative performance consequences. Table 2 summarizes these changes. </span></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" style="font-size: medium;"><span face="Calibri" style="font-family: Calibri;"><b>Important:</b>  Modifying any of these parameters changes the behavior of performance state handling from the out-of-box experience. Before you deploy to production servers, validate the effects of any changes in a test environment.</span></span></p>
<p style="margin: 8pt 0in 0pt;" class="TableHead"><a title="_Ref214635294" name="_Ref214635294"></a><strong><span face="Calibri" style="font-family: Calibri;">Table </span></strong><strong><span face="Calibri" style="font-family: Calibri;">2. Default and New PPM Parameter Values</span></strong></p>

<table style="width: 378.9pt; border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in;" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="505">
<thead>
<tr style="page-break-inside: avoid; mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 158.6pt; background: #c6d9f1; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><strong><span face="Calibri" style="font-family: Calibri;">Setting<o:p></o:p></span></strong></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 98.8pt; background: #c6d9f1; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><b><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Default value<o:p></o:p></span></span></b></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 121.5pt; background: #c6d9f1; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><b><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">“Aggressive” value<o:p></o:p></span></span></b></p>
</td>
</tr>
</thead>
<tbody>
<tr style="page-break-inside: avoid; mso-yfti-irow: 1;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Time Check <o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 2;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Time<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 3;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Time<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">300 ms<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">100 ms<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 4;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Percentage<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">30 %<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">30 %<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 5;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Percentage<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">50 %<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">50 %<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 6;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Domain Accounting Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">0 (On)<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">1 (Off)<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 7;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Increase Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">0 (Ideal)<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">1 (Single)<o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 8; mso-yfti-lastrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 158.6pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="211">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Decrease Policy<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 98.8pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; mso-border-top-alt: solid #BFBFBF 1.0pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid #BFBFBF 1.0pt; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="132">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">1 (Single)<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 121.5pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="162">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">0 (Ideal)<o:p></o:p></span></span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 0in 0in 0pt;" class="Le"><o:p><span color="#0070c0" style="color: #0070c0;"> </span></o:p></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">These parameters can only be set using the powercfg.exe command-line tool, which is installed by default to the Windows\System32 folder on Windows Server 2008. The commands to change the P-state settings by using powercfg.exe are given at the end of this post.</span></p>

<h2 style="margin: 12pt 0in 4pt;"><a title="_Toc214264088" name="_Toc214264088"></a><span style="mso-fareast-font-family: 'Times New Roman';"><span size="4" style="font-size: large;">Energy Efficiency Analysis of P-State Settings</span></span><span style="mso-fareast-font-family: 'Times New Roman';"><o:p></o:p></span></h2>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">To test the efficiency of these new power settings (henceforth called “Aggressive” settings), we performed a set of benchmark runs on a four-socket quad-core server. Table 3 gives the system configuration</span><span style="font-family: 'Times New Roman','serif'; font-size: 10pt;">.<o:p></o:p></span></p>
<p style="margin: 8pt 0in 0pt;" class="TableHead"><strong><span face="Calibri" style="font-family: Calibri;">Table 3. Four-Socket Quad-Core Server Configuration</span></strong></p>

<table style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in;" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr style="page-break-inside: avoid; mso-yfti-irow: 0; mso-yfti-firstrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; width: 394.8pt; background: #c6d9f1; border-top: windowtext 1pt solid; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="526" colspan="2">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><strong><span face="Calibri" style="font-family: Calibri;">System configuration<o:p></o:p></span></strong></span></p>
</td>
</tr>
</thead>
<tbody>
<tr style="page-break-inside: avoid; mso-yfti-irow: 1;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 82.75pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="110">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Processors<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 312.05pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="416">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>4  quad-core 2.9-GHz <o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 2;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 82.75pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="110">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Memory<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 312.05pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="416">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">32 4-GB DDR2 667-MHz DIMMs <o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 3;">
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 82.75pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="110">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Disk<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: #bfbfbf 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 312.05pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="416">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>4  72-GB, 15,000 SCSI <o:p></o:p></span></span></p>
</td>
</tr>
<tr style="page-break-inside: avoid; mso-yfti-irow: 4; mso-yfti-lastrow: yes;">
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 82.75pt; border-top: #f0f0f0; border-right: #bfbfbf 1pt solid; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="110">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;">Network adapter<o:p></o:p></span></span></p>
</td>
<td style="border-bottom: windowtext 1pt solid; border-left: #f0f0f0; background-color: transparent; width: 312.05pt; border-top: #f0f0f0; border-right: #f0f0f0; padding: 0in 5.4pt 0in 5.4pt;" valign="top" width="416">
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span style="font-size: 10pt;"><span face="Calibri" style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>2  1-GBps  <o:p></o:p></span></span></p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 0in 0in 0pt;" class="Le"><o:p><span color="#0070c0" style="color: #0070c0;"> </span></o:p></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">We ran the SPECPower benchmark with both the default settings and the Aggressive power saving settings. Figure 2 and Figure 3 show the power usage and power efficiency across different workload levels. The Aggressive settings exhibit significant power efficiency over the default settings at a majority of the load levels. The maximum power saving is achieved at 60-percent workload level on this configuration with approximately 10-percent improvement in power efficiency when it is compared to the default setting. There is a negligible reduction in overall throughput at utilization levels above 97%.</span></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><img style="width: 450px; height: 285px;" title="Power savings of Default vs. Aggressive parameters" alt="Power savings of Default vs. Aggressive parameters" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/64/D_vs_A_pwr.JPG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/13-6191-00-00-03-16-40-64/D_5F00_vs_5F00_A_5F00_pwr.JPG" width="450" height="285" mce_src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/64/D_vs_A_pwr.JPG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3164064/original.aspx" /></p>
<p style="margin: 0in 0in 8pt;" class="MsoBodyText"><span style="mso-no-proof: yes;"></span></p>
<p style="margin: 8pt 0in 12pt;" class="FigCap"><a title="_Ref210758084" name="_Ref210758084"></a><strong>Figure </strong><strong>2.  System power across varying SPECPower load levels</strong></p>
<p style="margin: 8pt 0in 12pt;" class="FigCap"><img style="width: 450px; height: 285px;" title="Efficiency of default vs. aggressive settings" alt="Efficiency of default vs. aggressive settings" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/59/D_vs_A_eff.JPG" original-url="https://blogs.technet.com/cfs-file.ashx/__key/telligent-evolution-components-attachments/13-6191-00-00-03-16-40-59/D_5F00_vs_5F00_A_5F00_eff.JPG" width="450" height="285" mce_src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/16/40/59/D_vs_A_eff.JPG" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3164059/original.aspx" /></p>
<p style="margin: 8pt 0in 12pt;" class="FigCap"><a title="_Ref210758086" name="_Ref210758086"></a><strong>Figure </strong><strong>3.  System power efficiency across varying SPECPower load levels</strong></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">These settings were tested on commodity servers with the SPECPower workload. Your particular hardware and workload might deliver different results. Please test any parameter changes before deploying in your production environment.</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>

<h2 style="margin: 12pt 0in 4pt;"><a title="_Toc214264158" name="_Toc214264158"></a><span style="mso-fareast-font-family: 'Times New Roman';"><span size="4" style="font-size: large;">Changing P-State Parameters with Powercfg.exe</span></span><span style="mso-fareast-font-family: 'Times New Roman';"><o:p></o:p></span></h2>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" style="font-size: medium;"><span face="Calibri" style="font-family: Calibri;">If you decide you want to deploy the new P-state parameter settings in your environment, you’ll first need to verify that your Windows Server 2008 installation is configured to use the Balanced power policy. Verify this by going to Power Options in the Control Panel.<span class="msoIns"><ins datetime="2008-11-17T10:03" cite="mailto:Matthew%20Robben"><o:p></o:p></ins></span></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Done? Next, you need to start a command prompt with administrator privileges. Get the binary dataset that represents the current Balanced AC power settings for P-states with the following command line (corrected from earlier versions of this post, thanks to Asmus for the heads up!):</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /getpossiblevalue sub_processor procperf 2</span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">You should see the following:</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Type: BINARY<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Value: 640864000000A0860100E09304001E00000032000000<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="Le"><o:p><span color="#0070c0" style="color: #0070c0;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">This value represents an encoded dataset of power policy parameters. The parameter values for this dataset can be shown with the decode command:</span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /ppmperf /decode 640864000000A0860100E09304001E00000032000000<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" style="font-size: medium;"><span face="Calibri" style="font-family: Calibri;">Verify that your power parameter values match the defaults shown below and in Table 1. If your parameter settings do not match these values, your Windows Server parameters may have already been reconfigured for optimal power efficiency in your environment.<span class="msoIns"><ins datetime="2008-11-17T10:03" cite="mailto:Matthew%20Robben"><span color="#008080" style="color: #008080;"> </span></ins></span></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Busy Adjust Threshold: 100<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Time Check: 100<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Increase Time: 100000<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Decrease Time: 300000<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Increase Percent: 30<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Decrease Percent: 50<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Domain Accounting Policy: 0<o:p></o:p></span></span></p>
<p style="page-break-after: avoid; margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Increase Policy: 0<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">Decrease Policy: 1<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 4pt;" class="BodyTextLink"><span style="font-family: 'Arial','sans-serif'; color: #0070c0; font-size: 8pt;"><o:p> </o:p></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Next, you need to change the parameter values to match the “Aggressive” settings described in this post. To do so, use the following command:</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /ppmperf /encode base 640864000000A0860100E09304001E00000032000000 /decreasetime 100000 /domainaccountingpolicy 1 /increasepolicy 1 /decreasepolicy 0<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">After executing this command, powercfg will print out a binary dataset representing the new values, like the one shown below.</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">640364000000A0860100A08601001E00000032000000<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="Le"><o:p><span color="#0070c0" style="color: #0070c0;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">You need to apply the new dataset by using the <b>setpossiblevalue</b> command:</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /setpossiblevalue /sub_processor /procperf 2 binary 640364000000A0860100A08601001E00000032000000<o:p></o:p></span></span></p>
<p style="margin: 0in 0in 0pt;" class="Le"><o:p><span color="#0070c0" style="color: #0070c0;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Finally, use the <b>setactive</b> command to enable the new parameter set. No reboot is necessary for these parameters to take effect.</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /setactive scheme_balanced</span></span></p>
<span face="Calibri" style="font-family: Calibri;"><span class="msoIns"><ins datetime="2008-11-17T10:05" cite="mailto:Matthew%20Robben"><span color="#000000" size="3" style="color: #000000; font-size: medium;"><o:p></o:p></span></ins></span></span>
<p style="margin: 0in 0in 0pt;" class="MsoNormal" mce_keep="true"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"></span></o:p></p>
<o:p></o:p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">If you want to restore the default setttings, use the <b>setpossiblevalue</b> command with the default dataset value (shown below), and follow it with a <strong>setactive</strong> command:</span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /setpossiblevalue /sub_processor /procperf 2 binary 640864000000A0860100E09304001E00000032000000</span></span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"><span style="font-family: 'Lucida Console'; font-size: 9pt; mso-bidi-font-size: 11.0pt;"><span style="background-color: #d9d9d9;">&gt;powercfg /setactive scheme_balanced</span></span></p>
<p style="margin: 0in 0in 0pt 0.25in;" class="MsoPlainText"></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">That’s it! You’ve taken your first step to increasing energy efficiency in your datacenter. As our <a href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx" mce_href="https://www.microsoft.com/whdc/system/pnppwr/powermgmt/Svr_Pwr_ITAdmin.mspx">white paper</a> explains, there’s even more you can do. It’s a highly recommended read for cost-sensitive administrators.</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><o:p><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;"> </span></o:p></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Thanks for reading!</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal" mce_keep="true"></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Matthew Robben</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Program Manager</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal"><span size="3" face="Calibri" style="font-family: Calibri; font-size: medium;">Windows Server Performance Team</span></p>
<p style="margin: 0in 0in 0pt;" class="MsoNormal" mce_keep="true"></p>]]></content:encoded>
    </item>
    <item>
      <title>Greater than 64 Logical Processor support on Windows Server 2008 R2</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/greater-than-64-logical-processor-support-on-windows-server-2008-r2</link>
      <pubDate>Fri, 21 Nov 2008 20:19:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2008/11/21/greater-than-64-logical-processor-support-on-windows-server-2008-r2/</guid>
      <description><![CDATA[In the past few weeks, there have been a number of new feature announcements around Windows 7 and...]]></description>
      <content:encoded><![CDATA[<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>In the past few weeks, there have been a number of new feature announcements around Windows 7 and Windows Server 2008 R2 at PDC and WinHEC conferences.&nbsp; From a Server perspective, Power Management, Virtualization, and Greater than 64 processor support are considered the top three features for Windows Server 2008 R2.&nbsp; I will focus on the greater than 64 processor support, given it is a new milestone for Windows, and sets up the stage for competing on much larger and higher end servers.&nbsp; The support enables large scale database customers to deploy their solutions on Windows and expect good scalability numbers.&nbsp; Of course, the scalability realized is highly dependent on the applications and drivers being able to scale well beyond 64 processors.&nbsp; To do so, application and driver developers are strongly encouraged to read up on the greater than 64 processor work </FONT><A href="https://www.microsoft.com/whdc/system/Sysinternals/MoreThan64proc.mspx"><FONT face=Calibri size=3>here</FONT></A><FONT face=Calibri size=3> to see what has changed, and what type of code modifications are necessary to take full advantage of this new capability.&nbsp; The document describes the architecture, terminology, and goes into more details about the new APIs.</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Ahmed Talat</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Performance Manager</FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Windows Server Performance Team</FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Hyper-V and VHD Performance - Dynamic vs. Fixed</title>
      <link>https://docs.microsoft.com/archive/blogs/winserverperformance/hyper-v-and-vhd-performance-dynamic-vs-fixed</link>
      <pubDate>Fri, 19 Sep 2008 14:08:00 GMT</pubDate>
      <dc:creator><![CDATA[winsrvperf]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/winserverperformance/2008/09/19/hyper-v-and-vhd-performance-dynamic-vs-fixed/</guid>
      <description><![CDATA[My name is Tim Litton, I work as a Program Manager within the Microsoft Windows Server team, and my...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>My name is Tim Litton, I work as a Program Manager within the Microsoft Windows Server team, and my particular area of focus is performance optimization for Hyper-V.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>With the recent release of Hyper-V, customers are starting to ask us how to configure Hyper-V to get the best performance.&nbsp; It’s generally recognized that there is overheard running a virtualized environment, but the question that really needs to be answered is how much?<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>With this in mind, I thought I’d share some of our recent testing of Hyper-V and how disk workloads perform when using Fixed or Dynamic VHDs.&nbsp; The goal here is to provide some data that backs up the tuning guidance that can be here: </FONT><A href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx" mce_href="https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx"><FONT color=#800080 face=Calibri>https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx</FONT></A><FONT face=Calibri>.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>The following graph shows the relative performances for a number of different scenarios (with Dynamic VHD being the baseline).<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri></FONT>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri><IMG title="Hyper-V VHD Performance - Dynamic vs. Fixed" alt="Hyper-V VHD Performance - Dynamic vs. Fixed" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/13/6191/00/00/03/12/61/79/Hyper-V%20-%20VHD%20-%20Dynamic%20vs.%20Fixed.jpg" original-url="https://blogs.technet.com/photos/winsrvperf_img/images/3126179/425x268.aspx" mce_src="https://blogs.technet.com/photos/winsrvperf_img/images/3126179/425x268.aspx"><o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="mso-fareast-language: EN-US; mso-no-proof: yes"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></SPAN><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Fixed VHD always performs better than a Dynamic VHD in most scenarios by roughly 10% to 15% with the exception of 4k writes, where Fixed VHD performs significantly better.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>We ran 16 virtual machines when performing these tests (see “How We Tested” below) with the goal of evaluating how well Hyper-V performed in the server consolidation scenario.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Being able to consolidate a number of physical machines onto a single machine and have the virtual machines able to handle the load is a very important design goal for Hyper-V.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>The exact result that a customer is going to see will depend on quite a few variables (e.g. how large and often the reads and writes are, how many outstanding I/O there can be at one time), so performing real-world testing is the best way to assess what impact virtualization will have.<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Recently, QLogic&nbsp; published a benchmark for I/O throughput for storage devices going through Windows Server 2008 Hyper-V (</FONT><A href="https://www.qlogic.com/promos/products/hyper-v.aspx" mce_href="https://www.qlogic.com/promos/products/hyper-v.aspx"><FONT color=#0000ff face=Calibri>https://www.qlogic.com/promos/products/hyper-v.aspx</FONT></A><FONT face=Calibri>) that closely matches the native performance, thus demonstrating Hyper-V’s ability to bring the advantages of virtualization to large-scale </FONT><A style="mso-comment-reference: AJ_1; mso-comment-date: 20080916T1200"><FONT face=Calibri>datacenters</FONT></A><FONT face=Calibri>. <o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><U><FONT face=Calibri>How We Tested<o:p></o:p></FONT></U></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Hardware: DP DL580 G5, 16 x 2.4 GHz (Intel E7340), 16 GB RAM<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Disk: HP P800, 25 spindles<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Virtual Machine Setup: 16 Virtual machines, each running Windows Server 2008 Enterprise Edition (64 bit), 1 CPU, 796 MB RAM<o:p></o:p></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT face=Calibri>Testing Software: We used IO Meter (</FONT><A href="https://www.iometer.org/" mce_href="https://www.iometer.org/"><FONT color=#800080 face=Calibri>https://www.iometer.org</FONT></A><FONT face=Calibri>) to generate the workload for the I/O system, with a maximum number of 8 outstanding I/Os per virtual machine to a 100MB file.</FONT></P>]]></content:encoded>
    </item>
  </channel>
</rss>