Improving Performance by Disabling Hyper-Threading
Novell Cool Solutions: Feature
Digg This -
Posted: 5 Oct 2004
If you are experiencing poor or slow server performance, or excessively high utilization, you may want to think about disabling Hyper-Threading. Here's how:
- Use ACPIDRV.PSM on NetWare 6.5 and all non-HewLett-Packard servers
- On Hewlett-Packard/Compaq ProLiant servers use:
- CPQACPI.PSM on NetWare 6.0 with CPUs newer than Pentium III
- CPQMPK.PSM on NetWare 6.0 with CPUs that are Pentium III and below
- CPQMPK.PSM on NetWare 5.x
- Pre-merger Hewlett-Packard NetServer machines should always use MPS14.PSM, regardless of the processor family
"Intel's Hyper-Threading Technology brings the concept of simultaneous multi-threading to the Intel Architecture. Hyper-Threading Technology makes a single physical processor appear as two logical processors; the physical execution resources are shared and the architecture state is duplicated for the two logical processors. From a software or architecture perspective, this means operating systems and user programs can schedule processes or threads to logical processors as they would on multiple physical processors. From a microarchitecture perspective, this means that instructions from both logical processors will persist and execute simultaneously on shared execution resources." (Hyper-Threading Technology Architecture and Microarchitecture, Page 1)
- There are not two real processors on a single piece of silicon
- A Xeon is just one processor - 95% of the logic is shared; the other 5% makes it look like it is two processors - the architecture state (the "front end" of the processor) is duplicated.
- Therefore, you will only ever get a theoretical maximum of about 30% performance increase (Hyper-Threading Technology Architecture and Microarchitecture, Page 11)
- In reality, the CPU takes advantage of unused capacity on the chip to increase throughput
- Resources such as cache, the floating point unit, etc, are shared - so if these parts of the processor are being heavily utilised by one process (on one of the virtual CPUs) then the other process (on the other virtual CPU) may not get its fair share of these shared resources
Problems with Hyper-Threading
Customers have reported some issues where a server was performing poorly and disabling Hyper-Threading in the BIOS has caused the problems to go away. In many cases, this fix has been sufficient and therefore no further investigation has been done.
If a server is suffering from poor performance and Hyper-Threading is enabled, then one of the first troubleshooting steps should be to turn it off.
It must be understood that not all Hyper-Threading performance problems are due to bugs. Hyper-Threading employs a number of tricks and compromises that can mean that it just isn't appropriate to use it in all scenarios. In some cases, systems can perform better with Hyper-Threading disabled. It is important to realise that many problems are not specific to Novell NetWare with Hyper-Threading. These are industry-wide issues, not just NetWare issues. These same types of problems could happen with any operating system that is running on hardware with Hyper-Threading capabilities.
Some of the reasons for this are explained below.
Hyper-Threading will increase the latency of individual requests and trade that for increased throughput; any individual request takes longer to complete, but more requests can be completed in a given time period. Going from uni-processor to multi-processor also adds cache contention and the increased locking complexity also slows things down; so performance will vary depending on what you are doing. You end up with two virtual processors running at around 65% the speed of a stand-alone processor. If you add the two together you get 130%.
Therefore, if the workload doesn't max out a uniprocessor system, you wouldn't want to add latency to each individual request (i.e. by turning on Hyper-Threading) just so you can increase the throughput - because your current throughput capacity is more than sufficient for the workload. Hyper-Threading should be used to increase throughput in servers that are maxed out.
Larger multi-processor/Hyper-Threading systems with more than one physical processor tend to do better because their Hyper-Threading companion processors are more likely to be idle and halted. But as the load increases, those processors wake up and the overall latency in the system increases.
Because logical processors can share data in the cache, there is the potential for cache conflicts, which can result in lower observed performance. However, there is also the possibility for sharing data in the cache. For example, one logical processor may prefetch instructions or data, needed by the other, into the cache; this is common in server application code. In a producer-consumer usage model, one logical processor may produce data that the other logical processor wants to use. In such cases, there is the potential for good performance benefits.
(Hyper-Threading Technology Architecture and Microarchitecture, Page 9)
When your bottleneck is device I/O, whether LAN or Disk, Hyper-Threading does not increase performance.
Hyper-Threading can have adverse affects on storage system performance when the storage system is under heavy load. This has a simple cause. Intel quotes 30% benefit from HT. So, a 1GHz HT processor would be like two processors with a combined capacity of 1.3GHz. This is like two 650MHz processors. The reality is that individual thread performance will vary between zero and 1GHz with the sum of two threads being an effective 1.3GHz. This is fine for word-processor or computational use but it is very poor for I/O. The reason is very simple. I/O drivers and related layers must interact with hardware devices which inherently are slower than today?s fast CPUs. This results in CPU thread execution delays waiting on hardware which are counter productive to the hyper-threading architecture. In NetWare 6.5, Novell has enhanced this type of operation so that it is less invasive on HT CPUs. This is accomplished by not spreading hardware interrupts across the HT virtual processors but only across the physical processors.
(Novell White Paper, Improving Your NetWare Backup Performance , Page 4 - http://www.novell.com/coolsolutions/netware/features/a_improve_backup_nw.html)
When you have a single operation/thread generating high CPU utilization, Hyper-Threading does not increase performance.
Hyper-Threading helps when you have a high CPU utilization that's caused by a number of separate threads trying to execute at the same time. This is where you trade increased latency .for increased throughput. This helps things like Java that are CPU intensive, and eDirectory, for example, if you have a large enough directory cache and if you are doing mainly read operations with your database.
It comes down to understanding the load on your server before you can determine if Hyper-Threading will actually help performance.
For additional or updated information, see TID 10091810
This TID references Hyper-Threading Technology Architecture and Microarchitecture from the Intel Technology Journal, Volume 06 Issue 01 Published 14 February 2002 (ISSN 1535-766X), available at http://www.intel.com/technology/itj/ - for further information, please refer to this article.
All page references in this TID are taken from the PDF version of the article, which is available at http://www.intel.com/technology/itj/
There is further information on the subject of Hyper-Threading at http://arstechnica.com/paedia/h/hyperthreading/hyperthreading-1.html
These links are provided as a courtesy. Novell is not responsible for, and does not endorse in any way, the content of external internet sites.
Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com