Intel Speed Shift Support in Windows Server 2016

If you are gathering evidence to help make the case for a complete data platform upgrade in 2017, you want to find as much information as possible to bolster your argument. This post is meant to assist you in your efforts.

By early-mid 2017, Windows Server 2016 will have been GA long enough to convince most skeptics that it is safe and stable. Windows Server 2016 has many tangible advantages over previous versions of Windows Server, which I will be discussing in future blog posts.

SQL Server 2016 already has its first Service Pack available, with many very valuable enhancements (especially for Standard Edition). Some people who are on older versions of SQL Server Enterprise Edition may be able to migrate to SQL Server 2016 Standard Edition SP1.

Finally, Intel is due to release the next generation two-socket server processor (which will require new model servers from the server vendors). One specific new improvement you will get with a new server/processor and Windows Server 2016 is called Intel Speed Shift.

Intel Speed Shift (which is different than the older Intel SpeedStep technology) was added in the Intel Skylake microarchitecture. It requires operating system support in order to work, and the first OS to enable Speed Shift was Windows 10, after an update in November 2015. This feature lets the OS give control of processor P-states back to the hardware, with P-state requests coming from the operating system. This lets the processor increase the clock speed of individual cores much more quickly in response to an OS request for more performance.

The upcoming Intel Xeon E5-2600 v5 processors (Skylake-EP) for two-socket servers are due to ship in mid-2017 (although rumor has it that they are already shipping to some cloud data center providers). I don’t know for sure whether Intel Skylake-EP will have Speed Shift like the mobile and desktop Skylake processors do, but it probably will. Supposedly, the flagship Xeon E5-2699 v5 will have 32 physical cores, even though you will likely want a lower core count model with a higher base clock speed in most cases, to minimize your SQL Server licensing costs.

Why this matters for SQL Server is that many short-duration OLTP queries might run a little faster with Speed Shift enabled. Legacy power management techniques on older processors can take up to 120ms to fully throttle up to full Turbo Boost clock speed, while Speed Shift does it in 35ms, with most of the frequency increase happening in 3-4ms.

Figure 1 shows an example of the difference in how quickly the processor can increase the clock speed with Speed Shift Technology.


Figure 1: Intel Speed Shift Technology Performance Example


If your operating system supports Intel Speed Shift (Windows 10 or Windows Server 2016) and if you have an Intel processor with Speed Shift Technology (Skylake or newer), then you will be able to get the performance benefits of Intel Speed Shift with virtually no effort beyond perhaps changing a BIOS/UEFI setting on your server. Figures 2 and 3 have some more information about how Intel Speed Shift works.


Figure 2: Intel Speed Shift Technology Introduction


Image result for intel speed shift

Figure 3: Intel Speed Shift Technology Details


Over the past year, there has been a decent amount of information regarding Intel Speed Shift support in Windows 10, but nothing regarding Windows Server 2016. Part of the problem here is that we already have Skylake processors available in the mobile and desktop space, and in the single-socket server space, but not on the higher socket count server platforms.

Just as a quick experiment, I installed Windows Server 2016 Standard Edition on a brand new HP Spectre X360 laptop that has an Intel Core i7-7500U Kaby Lake-U processor, to see if Intel Speed Shift would be enabled or not. As you can see in Figure 4, the green SST lettering in the Features box on the left side of the System Summary screen in HWiNFO64 shows that Intel Speed Shift is enabled in Windows Server 2016, at least for this processor (which is the next release after Skylake).



Figure 4: Intel Speed Shift Enabled on Windows Server 2016 Standard Edition


Now, this is not definitive proof that Intel Speed Shift will be enabled with two-socket Skylake-EP processors, but I would say the chances are pretty good (especially given some conversations I have had with some people who actually know the answer)…

The outstanding question is how much will this actually help SQL Server performance? At this point, we simply don’t know, without actually doing some testing. Based on some reading I have been doing about Windows 10, I believe there is a way to temporarily disable Intel Speed Shift in Windows 10. Once I figure that out, it should not be that difficult to do some initial testing with short duration queries (150 ms or less) to see if they have lower average durations when Intel Speed Shift is enabled or not.

There are many other variables to consider regarding your workload and configuration that will likely affect the results in real production usage, but I expect there will be some positive benefit from this feature. As I like to say in presentations, nobody has ever told me that their database server is “too fast”, so I will take any performance improvement that I can find!



Useful Hardware Utilities – HWiNFO64

Since I have a personal and professional interest in PC hardware (I have actually been accused by my friend Steve Jones of “loving hardware”), I like to find and talk about useful hardware utilities that are relevant for both personal machines and for PC-based servers.

One very interesting utility is HWiNFO64 from Martin Malík. This program does a pretty complete job of examining your system, from the details of the CPU, motherboard, chipset, BIOS version, GPU, memory, drives, and operating system. It also lets you drill into different components of your system to see even more details about your hardware and configuration status.

You might be wondering why this is relevant to a typical database professional? Well, first, I think DBAs should have some knowledge and interest in the hardware that their database servers are running on (whether it is a bare metal physical host, or a virtualization host), since this has a big effect on their performance and SQL Server licensing costs. Second, being aware of some of the seemingly trivial details of your hardware can have a huge positive benefit on performance.

For example, if you are using a hypervisor, such as VMware or Hyper-V, you want to make sure your hardware virtualization support is enabled in your BIOS/UEFI. This includes Intel VT-x (Intel Virtualization Technology) and VT-d (Intel Virtualization Technology for Directed I/O).

In HWiNFO64, the VMX (Virtual Machine Extensions) lettering in the Features box of the System Summary as shown in Figure 1, tells you whether VT-x is enabled or not. If it is grey, it is not supported. If it is green, it is supported and enabled. In my case, I have an Intel Core i7-6700K processor that supports VT-x, but I currently have it disabled in my BIOS/UEFI. In CPU-Z, VT-x is simply absent in the Instructions box, since it is disabled in the BIOS/UEFI, as shown in Figure 2.

Another example is Intel Speed Shift Technology (shown as SST in the Features box of the System Summary as shown in Figure 1). It shows up in red on my system, since I have a BIOS feature called multi-core enhancement (MCE) enabled, which runs all of my processor cores at full Turbo Boost speed all of the time.

Intel Speed Shift Technology is an interesting feature that is present in Intel Skylake and later processors, that also requires operating system support. Current builds of Windows 10 and Windows Server 2016 support this feature, which I think will be beneficial for some SQL Server workloads.



Figure 1: HWiNFO64 System Summary



Figure 2: CPU-Z 1.78 CPU Tab


Figure 3 shows part of the Sensor Status windows, which lets you see details about your memory usage, component voltage and speeds, component temperatures, etc..



Figure 3: HWiNFO64 Sensor Status


Figure 4 shows details about the MSI Geforce GTX 1060 ARMOR OC video card that is in my workstation, which is a very nice mid-range video card.



Figure 4: HWiNFO64 Video Adapter Details



SQL Server Diagnostic Information Queries for December 2016

This month, I have added a separate set of queries for SQL Server vNext. Right now, they are almost identical to the SQL Server 2016 queries, but I will make changes to surface new functionality in SQL Server vNext over time. I have also added support for new functionality in SQL Server 2016 Service Pack 1.

Rather than having a separate blog post for each version, I have just put the links for all six major versions in this single post. There are two separate links for each version. The first one on the top left is the actual diagnostic query script, and the one below on the right is the matching blank results spreadsheet, with labeled tabs that correspond to each query in the set. 

Here are links to the latest versions of these queries for SQL Server vNext, 2016, 2014 and 2012:

SQL Server vNext Diagnostic Information Queries (December 2016)

SQL Server nNext Blank Results Spreadsheet

SQL Server 2016 Diagnostic Information Queries (December 2016)

SQL Server 2016 Blank Results Spreadsheet

SQL Server 2014 Diagnostic Information Queries (December 2016)

SQL Server 2014 Blank Results Spreadsheet

SQL Server 2012 Diagnostic Information Queries (December 2016)

SQL Server 2012 Blank Results Spreadsheet

Here are links to the most recent versions of these scripts for SQL Server 2008 R2 and older:

Since SQL Server 2008 R2 and older are out of Mainstream support from Microsoft (and because fewer of my customers are using these old versions of SQL Server), I am not going to be updating the scripts for these older versions of SQL Server every single month going forward.  I started this policy a while ago, and so far, I have not heard any complaints. I did update these queries slightly in January 2016 though.

SQL Server 2008 R2 Diagnostic Information Queries (CY 2016)

SQL Server 2008 R2 Blank Results

SQL Server 2008 Diagnostic Information Queries (CY 2016)

SQL Server 2008 Blank Results

SQL Server 2005 Diagnostic Information Queries (CY 2016)

SQL Server 2005 Blank Results

The basic instructions for using these queries is that you should run each query in the set, one at a time (after reading the directions for that query). It is not really a good idea to simply run the entire batch in one shot, especially the first time you run these queries on a particular server, since some of these queries can take some time to run, depending on your workload and hardware. I also think it is very helpful to run each query, look at the results (and my comments on how to interpret the results) and think about the emerging picture of what is happening on your server as you go through the complete set. I have quite a few comments and links in the script on how to interpret the results after each query.

After running each query, you need to click on the top left square of the results grid in SQL Server Management Studio (SSMS) to select all of the results, and then right-click and select “Copy with Headers” to copy all of the results, including the column headers to the Windows clipboard. Then you paste the results into the matching tab in the blank results spreadsheet.

About half of the queries are instance specific and about half are database specific, so you will want to make sure you are connected to a database that you are concerned about instead of the master system database. Running the database-specific queries while being connected to the master database is a very common mistake that I see people making when they run these queries.

Note: These queries are stored on Dropbox. I occasionally get reports that the links to the queries and blank results spreadsheets do not work, which is most likely because Dropbox is blocked wherever people are trying to connect.

I also occasionally get reports that some of the queries simply don’t work. This usually turns out to be an issue where people have some of their user databases in 80 compatibility mode, which breaks many DMV queries, or that someone is running an incorrect version of the script for their version of SQL Server.

It is very important that you are running the correct version of the script that matches the major version of SQL Server that you are running. There is an initial query in each script that tries to confirm that you are using the correct version of the script for your version of SQL Server. If you are not using the correct version of these queries for your version of SQL Server, some of the queries are not going to work correctly.

If you want to understand how to better run and interpret these queries, you should consider listening to my three related Pluralsight courses, which are SQL Server 2014 DMV Diagnostic Queries – Part 1SQL Server 2014 DMV Diagnostic Queries – Part 2 and SQL Server 2014 DMV Diagnostic Queries – Part 3. All three of these courses are pretty short and to the point, at 67, 77, and 68 minutes respectively. Listening to these three courses is really the best way to thank me for maintaining and improving these scripts…

Please let me know what you think of these queries, and whether you have any suggestions for improvements. Thanks!