Issue adding a host to SCVMM when that host has more than 16 processors

It has come to our attention that trying to add a computer with more than 16 processors (for example a quad six-core machine with 24 processors) is crashing the VMM server with the following exception:

09435 00009433 273.19396973 [5684] 1634.16A4::07/22-20:50:29.545#26:VmRefresher.cs(182): System.InvalidOperationException: Nullable object must have a value.
09436 00009434 273.19396973 [5684] at System.Nullable`1.get_Value()
09437 00009435 273.19396973 [5684] at Microsoft.VirtualManager.Engine.Adhc.WindowsHostDataProperties.GetProcessorData()
09438 00009436 273.19396973 [5684] at Microsoft.VirtualManager.Engine.Adhc.WindowsHostDataProperties.PopulateProperties()

Here is an example of 24 processors from the SYSTEMINFO file:

System Model IBM 3850 M2 / x3950 M2
System Type x64-based PC
Processor Intel(R) Xeon(R) CPU E7450 @ 2.40GHz, 2398 Mhz, 6 Core(s), 6 Logical Processor(s)
Processor Intel(R) Xeon(R) CPU E7450 @ 2.40GHz, 2398 Mhz, 6 Core(s), 6 Logical Processor(s)
Processor Intel(R) Xeon(R) CPU E7450 @ 2.40GHz, 2398 Mhz, 6 Core(s), 6 Logical Processor(s)
Processor Intel(R) Xeon(R) CPU E7450 @ 2.40GHz, 2398 Mhz, 6 Core(s), 6 Logical Processor(s)

In the VM Manager log, note the following errors:

Log Name: VM Manager
Source: Virtual Machine Manager
Date: 7/22/2009 2:45:56 PM
Event ID: 19999
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: HOST.CONTOSO.com
Description: Virtual Machine Manager (vmmservice:2516) has encountered an error and needed to exit the process. Windows generated an error report with the following parameters:
Event:VMM20
P1(appName):vmmservice
P2(appVersion):2.0.3444.0
P3(assemblyName):E.Adhc.Operations
P4(assemblyVer):2.0.3454.0
P5(methodName):M.V.E.A.WindowsHostDataProperties.GetProcessorData
P6(exceptionType):System.InvalidOperationException
P7(callstackHash):e9f1

Log Name: VM Manager
Source: Virtual Machine Manager
Date: 7/22/2009 2:45:56 PM
Event ID: 1
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: HOST.CONTOSO.com
Description:
System.InvalidOperationException: Nullable object must have a value.
at System.Nullable`1.get_Value()
at Microsoft.VirtualManager.Engine.Adhc.WindowsHostDataProperties.GetProcessorData()
at Microsoft.VirtualManager.Engine.Adhc.WindowsHostDataProperties.PopulateProperties()
at Microsoft.VirtualManager.Engine.Adhc.WindowsHostAbstractionLayer.GetHostProperties(HostData oldHostData)
at Microsoft.VirtualManager.Engine.Adhc.HostRefresher.GatherAllInformation(Host host, Object agentRefreshSyncObj, Guid taskID)
at Microsoft.VirtualManager.Engine.Adhc.HostRefresher.RefreshLockedHost(Host host, Guid taskID)
at Microsoft.VirtualManager.Engine.BitBos.VMRefresherBase.UpdateHostToResponding(Nullable`1& prevState)
at Microsoft.VirtualManager.Engine.BitBos.VMRefresherBase.UpdateHostState(IVMComputerSystemSummary[]& vmComputers, Nullable`1& prevState)
at Microsoft.VirtualManager.Engine.BitBos.VMRefresherBase.RunLightRefresher()
at Microsoft.VirtualManager.Engine.BitBos.VMRefresherBase.UpdateHostandVMs(VMRefresherType refresherType, Guid vmObjectId, VM tempVm)
at Microsoft.VirtualManager.Engine.BitBos.VmLightRefresher.RefreshData(HostReference hostRef)
at Microsoft.VirtualManager.Engine.RefreshDriver`1.RefreshThreadFunction(Object obj)-2146233079

In the 19999 error note the WindowsHostDataProperties.GetProcessorData and System.InvalidOperationException which correspond directly to the exception from the trace. In the 1 error note the Nullable`1 also corresponds directly to the exception from the trace.

This issue is outlined on IBM’s website: https://www-947.ibm.com/systems/support/supportsite.wss/docdisplay?brandind=5000008&lndocid=MIGR-5079202

From a Hyper-V perspective we support up to 24 cores (requires a QFE KB956710). We have a few workarounds for VMM to work in this case (either do #1 or implement #2 and #3)

  1. You can limit the number of CPUs via msconfig to 16 (we know this solution is not ideal in this case, but wanted to document it anyway)
  2. Go to BIOS, then navigate to Advanced Setup>Clustering Technology and set it to Physical (default is Logical)
  3. Use Bcdedit to add USEPHYSICALDESTINATION and set to YES. This forces the physical APIC to be used.