OpenStack中的CPU綁核、NUMA親和、大頁內(nèi)存

azeqjz OpenStack: OpenStack中的CPU綁核、NUMA親和、大頁內(nèi)存

Flavor中定義的CPU綁核、NUMA親和、大頁內(nèi)存

CPU綁核策略

對Libvirt驅(qū)動而言,虛擬機(jī)的vCPU可以綁定到主機(jī)的物理CPU上(pCPU)。這些配置可以改善虛擬機(jī)實(shí)例的精確度與性能。

注意:
應(yīng)該摔死主機(jī)組來隔離綁核虛擬機(jī)與非綁核虛擬機(jī),因?yàn)榉墙壓颂摂M機(jī)不會顧及綁核虛擬機(jī)的資源需求。

$ openstack flavor set FLAVOR-NAME \
    --property hw:cpu_policy=CPU-POLICY \
    --property hw:cpu_thread_policy=CPU-THREAD-POLICY

有效的CPU-POLICY值為:

  • shared: (默認(rèn)值) 虛擬機(jī)的vCPU允許在主機(jī)pCPU上自由浮動,盡管可能受到NUMA策略的限制。
  • dedicated: 虛擬機(jī)vCPU被嚴(yán)格綁定到一組主機(jī)pCPU上。當(dāng)CPU綁定生效時(shí),虛擬機(jī)CPU拓?fù)鋾徒壎ǖ腃PU拓?fù)洳呗砸恢隆_@意味著超分率為1.0。例如,如果2個(gè)vCPU的虛擬機(jī)綁定到有兩個(gè)線程的物理CPU核,那么虛擬機(jī)的CPU拓?fù)錇橐粋€(gè)socket、一個(gè)核、兩線程。

有效的CPU-THREAD-POLICY值為:

  • prefer: (默認(rèn)值) 主機(jī)可能是也可能不是SMT(同時(shí)多線程simultaneous multithreading-based)架構(gòu),如果應(yīng)用SMT架構(gòu)時(shí),優(yōu)選兄弟線程。
  • isolate: 應(yīng)用在主機(jī)可能不是SMT架構(gòu),或者必須模擬非SMT架構(gòu)。當(dāng)主機(jī)不是SMT架構(gòu)時(shí),每個(gè)vCPU相當(dāng)于一個(gè)核。如果主機(jī)應(yīng)用SMT架構(gòu),也就是說一個(gè)物理和有多個(gè)兄弟線程,每個(gè)vCPU也相當(dāng)于一個(gè)物理核。其他虛擬機(jī)的vCPU不會放在同一個(gè)核上。選中的核上只有一個(gè)兄弟線程可用。
  • require: 主機(jī)必要使用SMT架構(gòu)。每個(gè)vCPU被分配在兄弟線程上。如果主機(jī)沒有SMT架構(gòu),那就不使用此主機(jī)。如果主機(jī)使用SMT架構(gòu),卻沒有足夠空閑線程的核,那么nova調(diào)度失敗。

注意:
hw:cpu_thread_policy只在hw:cpu_policy設(shè)置為dedicated時(shí)有效。

NUMA拓?fù)?/h2>

Libvirt驅(qū)動程序可以為虛擬機(jī)vCPU定義放置的NUMA節(jié)點(diǎn),或者定義虛擬機(jī)從哪個(gè)NUMA節(jié)點(diǎn)分配vCPU與內(nèi)存。對于內(nèi)存與vCPU超過計(jì)算節(jié)點(diǎn)NUMA容量的flavor,NUMA拓?fù)涠x允許主機(jī)更好地利用NUMA并提高GuestOS的性能。

$ openstack flavor set FLAVOR-NAME \
    --property hw:numa_nodes=FLAVOR-NODES \
    --property hw:numa_cpus.N=FLAVOR-CORES \
    --property hw:numa_mem.N=FLAVOR-MEMORY
  • FLAVOR-NODES: (整數(shù)) 限制虛擬機(jī)vCPU線程運(yùn)行的可選NUMA節(jié)點(diǎn)數(shù)量。如果不指定,則vCPU線程可以運(yùn)行在任意可用的NUMA節(jié)點(diǎn)上。

  • N: (整數(shù)) 應(yīng)用CPU或內(nèi)存配置的虛擬機(jī)NUMA節(jié)點(diǎn),值的范圍從0到FLAVOR-NODES - 1。比如為0,則運(yùn)行在NUMA節(jié)點(diǎn)0;為1,則運(yùn)行在NUMA節(jié)點(diǎn)1.

  • FLAVOR-CORES: (英文逗號分隔的整數(shù)) 映射到虛擬機(jī)NUMA節(jié)點(diǎn)N上的虛擬機(jī)vCPU列表。如果不指定,vCPU在可用的NUMA節(jié)點(diǎn)之間平均分配。

  • FLAVOR-MEMORY: (整數(shù),單位MB) 映射到虛擬機(jī)NUMA節(jié)點(diǎn)N上的虛擬機(jī)內(nèi)存大小。如果不指定,則內(nèi)存平均分配到可用NUMA節(jié)點(diǎn)。

例子:Flavor定義虛擬機(jī)有4個(gè)vCPU,4096MB內(nèi)存,以下表示虛擬機(jī)的vCPU與內(nèi)存可以分布在2個(gè)NUMA節(jié)點(diǎn)。虛擬機(jī)的0號與1號vCPU在NUMA 0上,2號與3號vCPU在NUMA 1上。虛擬機(jī)的2048MB內(nèi)存在NUMA 0上,另外的2048MB內(nèi)存分配到在NUMA 1上。

$ openstack flavor set aze-FLAVOR \
    --property hw:numa_nodes=2 \
    --property hw:numa_cpus.0=0,1 \ 
    --property hw:numa_cpus.1=2,3 \
    --property hw:numa_mem.0=2048 \
    --property hw:numa_mem.1=2048 \

注意:
hw:numa_cpus.N與hw:numa_mem.N只在設(shè)置hw:numa_nodes時(shí)有效。另外,只有當(dāng)實(shí)例的NUMA節(jié)點(diǎn)具有非對稱的CPU和RAM分配(對于某些NFV工作負(fù)載很重要)時(shí)才需要。

注意:
N是虛擬機(jī)NUMA節(jié)點(diǎn)的索引,并不一定對應(yīng)主機(jī)NUMA節(jié)點(diǎn)。例如,在兩個(gè)NUMA節(jié)點(diǎn)的平臺,根據(jù)hw:numa_mem.0,調(diào)度會選擇虛擬機(jī)NUMA節(jié)點(diǎn)0,但是卻是在主機(jī)NUMA節(jié)點(diǎn)1上,反之亦然。類似的,F(xiàn)LAVOR-CORES也是虛擬機(jī)vCPU的編號,并不對應(yīng)與主機(jī)CPU。因此,這個(gè)特性不能用來約束虛擬機(jī)所處的主機(jī)CPU與NUMA節(jié)點(diǎn)。

警告:
如果hw:numa_cpus.N或hw:numa_mem.N的值比可用CPU或內(nèi)存大,則會引發(fā)錯(cuò)誤。

大頁內(nèi)存分配

$ openstack flavor set FLAVOR-NAME \
    --property hw:mem_page_size=PAGE_SIZE

有效的PAGE_SIZE值為:

  • small: (默認(rèn)值) 使用最小的內(nèi)存頁面,例如x86平臺的4KB。
  • large: 虛擬機(jī)RAM使用大頁內(nèi)存。例如x86平臺的2MB或1G。
  • any: 取決于計(jì)算驅(qū)動程序。此情況下,Libvirt驅(qū)動可能會嘗試尋找內(nèi)存大頁,但最終回落到小頁。其他的驅(qū)動則可能選擇可用策略。

注意:
大頁內(nèi)存可以分配給虛擬機(jī)內(nèi)存,而不考慮Guest OS是否使用。如果Guest OS不使用大頁內(nèi)存,則它值會識別小頁。反過來,如果Guest OS計(jì)劃使用大頁內(nèi)存,則一定要給虛擬機(jī)分配大頁內(nèi)存。否則虛擬機(jī)的性能將不及預(yù)期。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容