ESXi CPU排程原理

2021-09-18 03:56:07 字數 2191 閱讀 4118

很多客戶會反映某些虛擬機器的效能比較差,尤其是cpu,那麼究竟如何去做優化呢?要想做好優化,需要首先了解一下esxi的cpu排程原理。首先,作為虛擬化的基礎架構平台,esxi提供計算資源的共享,在esxi上執行的所有虛擬機器都可以共享該物理機的計算資源,包括cpu和記憶體,但是當虛擬機器的cpu需求增多的時候,就可能造成cpu效能下降,尤其是cpu超分的時候(overcommitment)。

在了解cpu排程之前,我們先介紹一下和cpu相關的幾個概念。

socket:槽位,指的是物理cpu的個數,vsphere授權方式就是按照socket售賣。

core:每個物理cpu的核心。

lcpu:邏輯cpu,也就是cpu的執行緒數,開啟超執行緒功能後,lcpu就是物理機總核心數的兩倍,沒開啟超執行緒功能,lcpu就等於物理機總核心數。

vcpu:管理員給虛擬機器分配的虛擬cpu數量。如果指定了vsocket和vcore,vcpu=vsocket*vcore。

首先我們討論一下smp(對稱多處理)架構,也就是uma(統一記憶體訪問)架構,隨後我們會討論numa(非統一記憶體訪問)架構,那麼scheduler究竟是怎麼工作的呢?它的工作原理大致有以下幾個過程:

由於cpu資源產生競爭,每個虛擬機器可能都會在需要cpu資源的時候,獲取不到,這個時候就會產生ready time(就緒值),從而影響虛擬機器的cpu效能。

在smp架構下,vmkernel要盡量保證物理cpu的負載均衡,預設行為下,同乙個虛擬機器的vcpu會被排程在不同的物理cpu上,但是對於記憶體密集型應用來說,這樣會損失效能,因為intel的cpu中,同乙個物理cpu的core之間會共享最後一級快取,從而提公升虛擬機器的效能,所以管理員為了做好優化,可以在虛擬機器的vmx配置檔案裡新增引數,sched.cpu.vsmpconsolidate="true" ,目的為了讓vmkernel把同乙個虛擬機器的vcpu排程在同乙個物理cpu上。

但是在numa架構下,vmkernel會盡量保證虛擬機器的vcpu執行在同乙個物理numa節點上,避免損失效能。

下邊我們來了解一下numa架構,numa--non-uniform memory access,非統一記憶體訪問。指的是vcpu執行在某乙個物理cpu的虛擬機會優先使用離這個物理cpu最近的記憶體資源。

vm1和vm2執行在左側的主節點(home node)上,vm3執行在右測的主節點上,效能達到最優。如果這三個虛擬機器的vcpu或者記憶體無法完全執行在主節點上,那麼就需要跨節點訪問資源,這樣就會影響效能。所以在設計虛擬機器規模的時候,也要考慮到物理機的numa架構。

從vsphere 5.5開始,支援vnuma架構,也就是在虛擬機器級別啟用numa,從而滿足guest os和應用程式的需要。當同時滿足以下兩個條件時,vnuma會自動啟用,否則需要手工修改引數來啟用:

如下圖所示:

該虛擬機器滿足以上兩個條件,自動啟用vnuma,虛擬numa節點數量等於物理numa節點數量,但是由於虛擬機器預設有10個vsocket,每個vsocket包含1個vcore,為了更優化,管理員需要修改vsocket和vcore的比例關係,比如,可以改為1個vsocket包含5個vcore,如下圖所示:

如何修改呢?很簡單,在虛擬機器的屬性中修改:

劇透一下,vcap6-dcv deploy的考試中有一道題,要求管理員通過引數配置手工啟用vnuma,因為該虛擬機器不滿足自動啟用vnuma的條件,比如只有8個vcpu,那麼管理員需要在vmx配置檔案裡新增引數:numa.vcpu.maxpermachinenode,比如設定為4,那麼虛擬機器的8個vcpu就會被人為分為兩個numa節點,每個節點4個vcpu,這樣就相當於讓guest os認為虛擬機器有兩個「物理」的numa節點了。

最後,強調一下,如果虛擬機器啟用了cpu熱新增功能,那麼vnuma功能就會被禁用。所以在設計虛擬機器的時候,需要注意虛擬cpu和物理cpu的匹配關係,以免影響效能。

原理 程序排程演算法

程序排程的原理 程序排程的指標 不同的程序排程演算法具有不同的特徵,為此需要建立衡量乙個演算法的基本指標。一般而言,衡量和比較各種程序排程演算法效能的主要因素如下所示 這些指標其實是相互有衝突的,響應時間短也就意味著在相關事件產生後,作業系統需要迅速進行程序切換,讓對應的程序盡快響應產生的事件,從而...

弄懂goroutine排程原理

golang語言作者rob pike說,goroutine是乙個與其他goroutines 併發執行在同一位址空間的go函式或方法。乙個執行的程式由乙個或更多個goroutine組成。它與執行緒 協程 程序等不同。它是乙個goroutine 簡單的說就是golang自己實現了協程並叫做gorunti...

《程序排程》1 排程原理與基礎概念

在正式介紹程序排程的細節前需要對一些概念作出介紹 程序排程的職責 負責決定在什麼時間,將那個程序投入使用,以及程序執行的時間。從而達到系統資源最大限度發揮,多程序併發執行的效果。1 就緒和執行狀態 task running 此時程式已經被掛入執行佇列,處於準備執行的狀態,一旦獲得處理器的使用許可權,...