我在TechNet论坛上问了这个问题没有任何运气(link),所以我想我会看到周围的人是否有答案:
在我们公司,我们有一台VMM服务器(SCVMM 2012),它控制着两个物理Hyper-V主机(我们称之为HOST01和HOST02)。我试图通过VMM服务器上的PowerShell查询获取有关HOST01的一些信息:
Get-VMHost -ComputerName HOST01
..除其他外还返回一些CPU信息:
...
LogicalProcessorCount = 12
PhysicalCPUCount = 1
CoresPerCPU = 12
L2CacheSize = 2048
L3CacheSize = 20480
BusSpeed = 100
ProcessorSpeed = 2294
ProcessorModel = Xeon
ProcessorManufacturer = Intel
ProcessorArchitecture = 9
ProcessorFamily = 179
CpuUtilization = 33
...
现在,我碰巧知道HOST01在具有超线程*的6核CPU上运行,所以LogicalProcessorCount = 12
是正确的,但我希望看到CoresPerCPU = 6
(而不是12)。为什么VMM没有显示正确数量的物理内核?我在找错了地方吗?
或者,有没有办法看看主持人是否激活了超线程,所以我可以将2除以作为最后的手段?
* )HOST01是我们自己的测试服务器,因此我通过WMI分别查询它以获取CPU数据,但在生产环境中,我们不能依赖访问除VMM服务器之外的任何东西。
答案 0 :(得分:2)
启用Hyper-Threading后,每个核心可获得2个逻辑处理器。由于VMM只关心逻辑处理器的数量,我怀疑你能从中获得“较低级别”的CPU信息。要获得每个CPU的实际核心数,您必须通过WMI查询处理器信息:
Get-WmiObject Win32_Processor -Computer HOST01 |
select Name, NumberOfCores, NumberOfLogicalProcessors
编辑:在用户和主机根本无权访问虚拟机管理程序的情况下,我认为您无法获取该信息。并非没有对基础架构进行某些更改,也就是说。如果您有人可以为您在VMM主机上进行设置,则以下内容可能会提供可行的方法。
定期从虚拟机管理程序收集信息,其中计划任务在VMM主机上运行以下脚本:
$datafile = 'C:\path\to\data.csv'
$hypervisors = Get-SCVMHost | select -Expand Name
Get-WmiObject Win32_Processor -Computer $hypervisors |
select Name, NumberOfCores | Export-Csv $datafile -NoType -Encoding ASCII
使用VMM主机上的自定义Web服务器发布数据文件的内容:
$port = 8000
$datafile = 'C:\path\to\data.csv'
$lastUpdate = Get-Date 0
$data = ''
function Get-Data {
$filedate = (Get-Item $datafile).LastWriteTime
if ($filedate -gt $lastUpdate) {
$script:data = Import-Csv 'C:\Temp\text.csv' | ConvertTo-Json
$script:lastUpdate = $filedate
}
$script:data
}
If (-not (Test-Path -LiteralPath $datafile)) {
New-Item -ItemType File -Path $datafile | Out-Null
}
$listener = New-Object Net.HttpListener
$listener.Prefixes.Add("http://+:$port/")
$listener.Start()
while ($listener.IsListening) {
$response = $listener.GetContext().Response
$response.Headers.Add('Content-Type', 'text/plain')
$buffer = [Text.Encoding]::ASCII.GetBytes((Get-Data))
$response.ContentLength64 = $buffer.Length
$response.OutputStream.Write($buffer, 0, $buffer.Length)
$response.Close()
}
$listener.Stop()
如果在VMM主机上启用了Windows防火墙,则需要在其中打开侦听器端口。
有了这些,您可以从服务器或工作站访问数据,如下所示:
Invoke-WebRequest 'http://vmmserver:8000/' | select -Expand Content |
ConvertFrom-Json