Verify CPU requirements

This page describes what you can do to ensure that power plan settings are optimized for your deployment to avoid any performance degradation.

Check power plan settings

Windows

The default power plan for a Windows Server 2008 R2 is Balanced, so the CPU can be throttled to save on power consumption. Set High Performance for the AppMon Server to have consistent and predictable performance. Depending on the hardware vendor you can also modify the setting in the server BIOS (see below).

Linux

To get details on a Linux OS, you should use /proc/cpuinfo command. More information how to get all the CPU details like frequency and cores can be found here.

Note that in the model name the clock frequency is different than in the CPU MHz row. This is a clear indicator that the power plan is not set to high performance.

Check CPU clock speed

With the previous command, you can also double-check the CPU MHz and verify if this meets the server requirements (see Default Deployment Sizes). When it comes to CPUs, you have one of two firms to choose from: AMD and Intel. There are plenty of options available, but using Intel CPUs is highly recommended for optimal performance and efficiency.

Determine the physical cores

There are a certain number of physical cores required to run an AppMon Server of specific size and that cores must not be hyperthreaded or virtual / logical ones.

Hyperthreading improves CPU parallel computations to increase the number of independent instructions in the pipeline. This was the operating system addresses two virtual or logical cores for each physical processor core. Unfortunately, the AppMon Server cannot benefit from hyperthreading. The server requires full attention of the available processors and hyperthreading slows down the whole system, including the OS and sharing processor resources between applications. Hence, make sure that the min. requirement of physical cores is fulfilled.

In the following example shows a server with 16 physical cores, with hyperthreading enabled. The Sizing dialog box allows Xlarge to be selected, but warns that an insufficient number of cores are available.

How to detect Hyperthreading?

Rule of thumb:

disabled enabled
Hyperthreading Number of processing units = number of cores Number of processing units = number of cores * 2

Check for Hyperthreading on Windows

The Powershell script below from this source can help you to identify if hyperthreading is enabled on your machine.

# This Sample Code is provided for the purpose of illustration only and is not intended to be used in a production environment. THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. You are granted a nonexclusive, royalty-free right to use and modify the Sample Code and to reproduce and distribute the object code form of the Sample Code, provided that You agree: (i) to not use Our name, logo, or trademarks to market Your software product in which the Sample Code is embedded; (ii) to include a valid copyright notice on Your software product in which the Sample Code is embedded; and (iii) to indemnify, hold harmless, and defend Us and Our suppliers from and against any claims or lawsuits, including attorneys' fees, that arise or result from the use or distribution of the Sample Code.</pre>
# Author: Amit Banerjee

# Purpose: Helps identify the number of physical processors, logical processors and hyperthreading on the server.

# Provide the computer information
$vComputerName = "."
$vLogicalCPUs = 0
$vPhysicalCPUs = 0
$vCPUCores = 0
$vSocketDesignation = 0
$vIsHyperThreaded = -1

# Get the Processor information from the WMI object
$vProcessors = [object[]]$(get-WMIObject Win32_Processor -ComputerName $vComputerName)

# To account for older machines
if ($vProcessors[0].NumberOfCores -eq $null)
{
$vSocketDesignation = new-object hashtable
$vProcessors |%{$vSocketDesignation[$_.SocketDesignation] = 1}
$vPhysicalCPUs = $vSocketDesignation.count
$vLogicalCPUs = $vProcessors.count
}
# If the necessary hotfixes are installed as mentioned below, then the NumberOfCores and NumberOfLogicalProcessors can be fetched correctly
else.
{
# For any machine of Windows Server 2008 or higher.
# For Windows Server 2003, KB932370 needs to be installed.
# For Windows XP, KB936235 needs to be installed.

$vCores = $vProcessors.count
$vLogicalCPUs = $($vProcessors|measure-object NumberOfLogicalProcessors -sum).Sum
$vPhysicalCPUs = $($vProcessors|measure-object NumberOfCores -sum).Sum
}

# Additional code can be written here to input the data below into a database
"Logical CPUs: {0}; Physical CPUs: {1}; Number of Cores: {2}" -f $vLogicalCPUs,$vPhysicalCPUs,$vCores

if ($vLogicalCPUs -gt $vPhysicalCPUs)
{
"Hyperthreading: Active"
}
else
{
"Hyperthreading: Inactive"
}

Output:

Check for Hyperthreading on Linux

To get details on a Linux OS, you should use the /proc/cpuinfo command. More on how to get all the CPU details like frequency and cores can be found here

Tip

Thread(s) per core: 2 indicates that hyperthreading is enabled.

Output: