虛擬化:vCPU 與超執行緒主機 CPU 固定?

虛擬化:vCPU 與超執行緒主機 CPU 固定?

我在配備 Core i7-2600 CPU 的 Linux 伺服器上使用 KVM/libvirt,該伺服器具有以下 CPU 拓撲(1 個插槽、4 個核心、8 個執行緒):

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

我通常在這台主機上運行3個虛擬機,每個虛擬機有2個虛擬CPU。為了透過保持快取熱量來提高效能,我想將虛擬機器的 vCore 固定到固定的主機核心。

現在的問題是虛擬機器核心到主機核心的映射,考慮到主機CPU使用超線程的事實:

選項 1:每個實體主機核心一個虛擬機

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

這樣,VM 的兩個虛擬核心將會對應到主機 CPU 上的同級超執行緒。來賓程式碼將從快取局部性中受益,因為兩個主機核心共享一些快取。

但考慮到兩個超線程也共享一些功能單元,它們在計算負載下會互相減慢。

選項 2:分散式 VM 核心

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

這種映射的優點是,如果虛擬機器的兩個虛擬核心都承受計算負載,則該負載將映射到主機上的兩個單獨的實體核心。如果當時沒有其他虛擬機器處於負載狀態,則前者可以使用兩個實體核心,而不是使用選項 1 僅使用一個實體核心。

這些虛擬機器主要運行 Web 服務(Nginx、MySQL、PHP-FPM),所以我知道這個問題相當理論性 - 但我仍然想知道。

答案1

你可能想太多了。

此處手動分配核心實際上可能會導致效能降低。在VMware世界中,除非有非常具體的要求,否則我們不會這樣做,但對於您所描述的工作負載和應用程式來說,這是不必要的。讓 KVM 安排事情並完成。如果有疑問,請取得更多核心和插槽。但 CPU 不會成為如此小型部署的限制因素。

答案2

在大多數情況下,選項 1 不應減慢速度,但作業系統和程式可能會對其工作負載感到滿意。可能會堆積起來。我認為如果你的鄰居不介意稍微減速的話,選項 2 更好。

相關內容