2011-04-12 85 views
9

如果我使用的是Oracle的virtualbox,並且我將多個虛擬內核分配給虛擬機,那麼實際內核的分配情況如何?它是使用虛擬機中的兩個真實核心,還是使用模擬核心的東西?,當您分配多個虛擬內核時會發生什麼?

+0

你的問題很有趣。我在AMD x86_64處理器上使用VBox 4.0.4,我已經爲VM實例(Linux Red hat 64位)激活了兩個虛擬內核,但只有一個虛擬內核處於激活狀態,從文檔「VirtualBox最多可以爲每個虛擬機提供32個虛擬CPU 」。我會跟着這個問題。 – 2011-04-15 20:24:34

回答

10

你的問題幾乎就像問:操作系統如何確定運行給定進程/線程的內核?您的計算機始終在做這種類型的決定 - 它有更多的進程/線程正在運行,而不是您有可用的內核。這個具體的答案在本質上是相似的,但也取決於來賓機的配置方式以及您的硬件對加速虛擬化過程的支持程度 - 所以這個答案當然不是確定性的,我不會真正瞭解主機如何調度代碼但是讓我們來看看兩個相對簡單的例子:

第一個將是一個完全虛擬化的機器 - 這將是一個沒有啓用或啓用最小加速的機器。呈現給客戶端的硬件是完全虛擬化的,即使許多CPU指令直接通過並直接在CPU上執行。在這種情況下,您的虛擬機虛擬機的行爲與主機上運行的任何進程大致相同:CPU資源由操作系統調度(爲了清楚,在這種情況下爲主機),並且可以運行進程/線程在任何核心他們被允許。默認情況下通常是任何可用的內核,儘管可能存在一些優化以嘗試並保持同一內核上的進程,以允許L1/L2緩存更有效並最小化上下文切換。通常情況下,在這種情況下,只有一個CPU分配給來賓操作系統,這大致會轉化爲主機上運行的單個進程。

在稍微複雜的情況下,虛擬機配置了所有可用的CPU虛擬化加速選項。在Intel說這些被稱爲VT-x的AMD是AMD-V。這些主要支持特權指令,通常需要一些二進制翻譯/陷印來保護主機和客戶機。因此,主機操作系統失去一點可見性。包括硬件加速的MMU支持(例如,可以直接訪問內存頁表,而不會被虛擬化軟件遮蓋) - 並且可見性會下降一點。最終,它仍然在很大程度上表現爲第一個例子:它是一個在主機上運行的進程,並且相應地進行調度 - 只是您可以考慮爲每個虛擬CPU分配一個線程來運行指令(或將它們傳遞給它們)。

值得注意的是,儘管您可以(通過正確的硬件支持)爲guest虛擬機分配的虛擬內核數量比可用的多,但這不是一個好主意。通常這會導致性能下降,因爲guest虛擬機可能會崩潰CPU,並且無法正確調度正在請求的資源 - 即使CPU沒有完全納稅。我將它作爲一個場景與一個多線程程序共享某些相似之處,該程序產生的線程遠多於(實際上處於繁忙狀態)比可用來運行它們的空閒CPU內核多。如果您使用較少的線程完成工作,您的表現通常會更差。

在極端情況下,VirtualBox甚至支持hot-plugging CPU資源 - 雖然只有少數操作系統能夠正確支持它:Windows 2008數據中心版和某些Linux內核。當一個訪客CPU內核被視爲主機邏輯內核上的進程/線程時,通常應用相同的規則,但是主機和硬件本身決定使用哪個邏輯內核作爲虛擬內核。

與所有他這樣說 - 你怎麼VirtualBox的實際上分配這些資源的問題......嗯,我還沒有通過代碼掘我當然不能明確回答,但它一直是我的經驗,這一般表現如上所述。如果你真的很好奇,你可以嘗試在任務管理器中標記VirtualBox VBoxSvc.exe和相關的進程,並選擇「Set Affinity」選項並將它們的執行限制在一個CPU上,看看是否符合這些設置。這可能取決於如果這些設置得到主機認可,那麼可用硬件幫助的級別有所提高,因爲guest可能並未真正作爲這些設置的一部分運行。

相關問題