虛擬化 CPU 核心與執行緒
我們在 Ubuntu 9.10 上有一個 KVM 主機系統,它帶有一個更新的四核 Xeon CPU 和超執行緒。正如英特爾產品頁面所詳述的那樣,該處理器有 4 個核心,但有 8 個執行緒。/proc/cpuinfo 和 htop 都列出了 8 個處理器,儘管每個處理器都在 cpuinfo 中聲明了 4 個核心。KVM/QEMU 還報告 8 個 VCPU 可分配給來賓。
我的問題是當我為 VM 來賓分配 VCPU 時,我應該按核心還是按執行緒分配?由於 KVM/QEMU 報告伺服器有 8 個 VCPU 要分配,我是否應該繼續設置來賓使用 4 個 CPU,而我之前將它設置為使用 2 個(假設總共有 4 個 VCPU 可用)?我想在不過度分配的情況下充分利用主機硬體。
更新: Chopper3 的回答無疑是正確的做法。但是,我仍然很想听聽任何硬體專家的意見,他們可以闡明執行緒與核心的性能方面……有人嗎?
設置您的伺服器執行其功能所需的最低 vCPU 數量,不要過度分配它們,否則您很容易減慢虛擬機的速度。
通常,HT 在 IO 上較重的工作負載上執行良好——當第一個虛擬 CPU 等待 IO 時,CPU 可以從另一個虛擬 CPU 的隊列中調度更多處理任務。真正為您提供的所有 HT 子系統都是硬體加速的上下文切換——這也是在 VM 之間切換時使用的工作負載模式。因此,如果每個 VM 都有一個虛擬核心,那麼當您擁有的 VM 數量多於核心數量時,HT(通常)會稍微降低速度。
如果 VM 中的應用程序是為執行緒編寫的,那麼將多個 vCPU 分配給 VM 可以提高性能,但也會使管理程序的工作更加困難;它必須一次在 2 或 4 個 CPU 上分配時間——因此,如果您有一個四核 CPU 和一個四 vCPU 虛擬機,那麼在該時間片內只能調度一個虛擬機(而它可以執行 4 個不同的單 vCPU 虛擬機立刻)。