具有 2 個 CPU 的虛擬機器真的比具有 4 個 CPU 的虛擬機器快嗎?

具有 2 個 CPU 的虛擬機器真的比具有 4 個 CPU 的虛擬機器快嗎?

我們的 IT 創建了一個虛擬機,分配了 2 個 CPU,而不是我要求的 4 個。他們的理由是,虛擬機器在使用 2 個 CPU 時比使用 4 個 CPU 時效能更好(根據他們的說法)。其基本原理是,VM 管理程式(在本例中為 VMWare)會等待所有 CPU 都可用,然後再使用其中任何一個 CPU。因此,等待 4 個 CPU 而不是 2 個 CPU 需要更長的時間。

這個說法有道理嗎?

答案1

這曾經是正確的,但現在不再完全正確。

他們指的是嚴格協同調度

最重要的是,在嚴格的協同調度演算法中,滯後vCPU的存在會導致整個虛擬機器協同停止。在寬鬆的協同調度演算法中,領先的 vCPU 根據與最慢的同級 vCPU 的偏差來決定是否應該共同停止自身

現在,如果主機只有 4 個線程,那麼你分配所有線程就很愚蠢了。如果它有兩個處理器,每個處理器有 4 個線程,那麼你可能不想分配單一處理器的所有內容,因為您的虛擬機器管理程式應嘗試將vCPU 保留在同一個NUMA 節點上,以使記憶體存取速度更快,而您透過將整個套接字分配給單一虛擬機而使這項工作變得更加困難(請參閱上面 PDF 的第 12 頁)。

所以存在vCPU較少的場景表現比更多更好,但這並不是 100% 的情況。

綜上所述,我很少為每個來賓分配超過 3 個 vCPU。預設每個人都會獲得 2 個,如果工作負載很重則為 3 個,而對於 SQL Server 或真正繁重的批次虛擬機或具有大量用戶的終端伺服器之類的東西則為 4。

答案2

這很大程度上取決於底層虛擬機器管理程式和運行它的管理員,讓我解釋一下:

  1. 僅僅因為您有要求就隨意給您 4 個 CPU,這是一種不好的做法。一般來說,你思考你需要 4 個;但資源監控顯示您只需要 1。
  2. 以 VMware ESXi 為例當 vCPU 請求 CPU 資源時需要鎖定所有 pCPU;所以在這個虛擬機器管理程式上它對效能不利。 KVM 不像 ESXi 那樣鎖定;它使用底層核心調度程序,但從長遠來看仍然會造成 CPU 爭用。
  3. 如果您從一開始就使用 4 個 CPU 建置系統,那麼您實際上並不是在橫向擴展,而是向上擴展(這是一種不好的做法,尤其是在虛擬機器上)。您可能需要檢查您正在如何建立正在處理的任何內容,以便可以將其建置為可擴展到當今的現代雲端基礎架構。

你能從中學到什麼?始終使用最少的資源建立虛擬機,並根據需要增加。始終橫向擴展而不是向上擴展,您將能夠在任何地方運行您的應用程式。

由於虛擬機器管理程式可以體驗到鎖定,因此 2 個 CPU 確實比 4 個 CPU 更快。

答案3

是的,這種說法總體上是有道理的。然而,您應該測試您的確切配置和工作負載。有時,如果您能夠真正利用 CPU,更多 CPU 會更好。但是,如果您實際上沒有那麼多並行性,配置較少 CPU 的 VM 通常會表現得稍好一些,因為它避免了由於 CPU 就緒狀態暫停而導致的速度下降。

我減少了許多虛擬機器上的 vCPU,並且發現大多數虛擬機器的吞吐量有所提高。有少數情況變得更糟,需要增加 vCPU 數量。

相關內容