Virtual-Machines

KVM:VM(“主機”與“kvm64”)的哪個 CPU 用於 Web 負載?

  • October 24, 2021

使用 Proxmox 5.0 作為管理程序平台並設置 KVM VM 來服務網站,我真的想知道我應該使用 kvm64 “虛擬” CPU 還是嘗試使用主機。具體來說,我有一個能夠進行超執行緒的 4 核 CPU,這導致在 KVM 中使用 8 個核心(或者我應該禁用超執行緒以獲得更多的每個核心的功率,最後?)我會將伺服器的大部分功能用於我的網站。

兩者背後的想法都很好:

  • 如果我使用“主機”類型的 CPU,我將獲得 CPU 的所有硬體功能,並且看起來我將獲得大部分功能。唯一的問題是我應該設置多少個核心供 VM 使用?如果我設置為 8,那麼 KVM 本身將使用哪些核心,如果我設置為 7(因此一個將僅由 KVM 本身使用),那麼我將減少 1/8 的功率。正確的?

如果我將 CPU 類型設置為“kvm64”,那麼我可以為 VM 分配更多的 CPU 核心(這些核心是虛擬的,所以我可以輕鬆地分配一些像 64 甚至 128 個這樣的核心),所以物理 CPU 被“拆分”成很多較小的,這可能對 web 類型的負載很有用。我的假設正確嗎?

你會推薦我選擇什麼?

Proxmox wiki部分解決了選擇哪種 CPU 類型的問題:

Qemu 可以模擬多種不同的 CPU 類型,從 486 到最新的 Xeon 處理器。每一代新的處理器都增加了新的特性,比如硬體輔助 3D 渲染、隨機數生成、記憶體保護等……通常你應該為你的虛擬機選擇一個與主機系統的 CPU 非常匹配的處理器類型,因為這意味著主機 CPU功能(也稱為 CPU 標誌)將在您的 VM 中可用。如果您想要完全匹配,您可以將 CPU 類型設置為主機,在這種情況下,VM 將具有與您的主機系統完全相同的 CPU 標誌。

不過,這有一個缺點。如果您想在不同主機之間實時遷移虛擬機,您的虛擬機可能最終會在具有不同 CPU 類型的新系統上執行。如果傳遞給來賓的 CPU 標誌失去,qemu 程序將停止。為了解決這個問題,Qemu 也有自己的 CPU 類型 kvm64,Proxmox VE 預設使用它。kvm64 是一種 Pentium 4 看起來像 CPU 類型,它具有減少的 CPU 標誌集,但保證可以在任何地方工作。

簡而言之,如果您關心節點之間的實時遷移和移動虛擬機,請保留 kvm64 預設值。如果您不關心實時遷移或擁有所有節點具有相同 CPU 的同構集群,請將 CPU 類型設置為主機,因為理論上這將為您的客人提供最佳性能。

但是,他們沒有提到的一件事是:如果您的伺服器都有不同的 CPU,那麼您可以使用比 kvm64 更強大的虛擬 CPU 生成,並且仍然可以進行實時遷移。您只需要確保您選擇的虛擬 CPU 類型是所有伺服器中所有物理 CPU 中最舊的(例如,如果您最舊的 CPU 是 Xeon E5630,您可以使用 Westmere)。這使您可以擁有一個具有混合 CPU 的伺服器場,並且仍然可以進行實時遷移。

同一個 wiki 還解決了要使用多少虛擬 CPU 核心:

如果所有虛擬機的核心總數大於伺服器上的核心數(例如,在只有 8 個核心的機器上,4 個虛擬機,每 4 個核心),那是完全安全的。在這種情況下,主機系統將平衡伺服器核心之間的 Qemu 執行執行緒,就像您執行標準多執行緒應用程序一樣。但是,Proxmox VE 將阻止您分配比物理可用更多的虛擬 CPU 核心,因為這只會由於上下文切換的成本而降低性能。

(這意味著不允許單個 VM 擁有比物理 CPU 核心更多的虛擬 CPU 核心。但是添加在一起的多個 VM 的虛擬 CPU 核心總數可能比物理 CPU 核心多。)

請記住,Web 伺服器負載通常不受 CPU 限制,因此無論如何您可能會有很多空閒 CPU。

引用自:https://serverfault.com/questions/876664