2013-11-28 24 views
0

我問在TechNet論壇這個問題沒有任何的運氣(link),所以我想我會看看是否有人在這裏可能有一個答案:CPU核心從Hyper-V主機數下SCVMM 2012

在我們公司,我們有一臺VMM服務器(SCVMM 2012),用於控制兩臺物理Hyper-V主機(我們稱之爲HOST01和HOST02)。我試圖通過PowerShell的查詢在VMM服務器上,以獲取有關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服務器之外的任何內容。

回答

2

通過使用Hyper-Threading,您可以獲得每個內核2個邏輯處理器。由於VMM只關心邏輯處理器的數量,所以我懷疑你能從中獲得「低級」的CPU信息。要獲得每個CPU內核的實際數量必須通過WMI查詢處理器信息:

Get-WmiObject Win32_Processor -Computer HOST01 | 
    select Name, NumberOfCores, NumberOfLogicalProcessors 

編輯:在的情況下用戶和主機沒有訪問在所有我不管理程序認爲你將能夠獲得這些信息。 有些改變了基礎設施,也就是說。如果您有可以在VMM主機上爲您設置它的人,以下可能會提供一種可行的方法。

  1. 定期收集來自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 
    
  2. 發佈數據文件的內容與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 
+0

謝謝回答!我無法再訪問此服務器設置,因此我無法仔細檢查您的腳本。但是,我相信我需要直接訪問HOST01以使腳本正常工作?可悲的是,我們不能依靠那個;在生產中,我們只能訪問VMM「保護傘」服務器,而不是下面的實際Hyper-V主機。 – Sphinxxx

+0

VMM服務器應該能夠連接到所有Hyper-V主機。當然,您仍然需要一個具有遠程WMI訪問權限的帳戶。 –

+0

是的,VMM可以連接到所有主機,但該腳本不是從VMM服務器運行的。該腳本從完全不同的計算機運行,並具有所需的憑據來查詢VMM(如果在問題中沒有明確說明,我很抱歉)。請糾正我,如果你仍然認爲你的解決方案應該在這種情況下工作。 – Sphinxxx