云軸科技ZStack創建的云主機適用于絕大部分的應用場景,但隨著云軸科技ZStack用戶數量的不斷增長,更多用戶提出了高性能云主機的需求。為滿足高性能云主機需求,云軸科技ZStack此前為云主機提供了手動配置CPU綁定和vNUMA的接口,但需要用戶了解其中原理并且手動分配物理機資源才能進行配置,操作門檻較高。因此ZStack Cloud云平臺在4.3.12版本上升級了原有的vNUMA配置方法,帶來了全新的智能vNUMA(virtual NUMA)功能。
01 什么是NUMA架構
NUMA(Non-uniform memory access、非統一內存訪問)架構是一種為多處理器電腦設計的內存架構,內存訪問時間取決于內存相對于處理器的位置。NUMA架構通過對CPU和內存資源分組,引入了本地內存和遠程內存。訪問本地內存可以直接通過當前node的內存控制器,但是遠程內存就需要通過inter-connect通道來訪問。這種物理結構決定了在訪問遠程內存的延遲會比訪問本地內存更高。
圖1 NUMA架構示例圖
ZStack Cloud云平臺創建的VM通過操作系統的調度策略,會盡量讓同一個VM的CPU、內存資源保持在同一個NUMA node上,當出現資源非常緊張,或者CPU、內存規格不合理導致操作系統難以分配資源的情況時,可能會因為跨NUMA內存訪問帶來的內存訪問延遲而導致VM性能下降。
市面上的一些IaaS軟件也提供了vNUMA配置功能,但限制較多:
1.需要手動設置vCPU綁定,且VM資源優先綁定在物理機同一個NUMA node上;
2.對VM的CPU數量有要求并且不支持手動綁定到物理機NUMA node上。
對于VM的CPU、內存以及vNUMA node資源與物理機上對應資源,均無法查看兩者之間的綁定關系。過去版本的ZStack Cloud云平臺也提供了vNUMA配置接口,但需要用戶手動規劃云主機的vCPU和內存區域如何與物理機上CPU和內存區域綁定,并且手動配置vCPU綁定、vNUMA拓撲等,這一系列流程對于用戶來說操作難度較大。
基于上述原因,ZStack Cloud云平臺在4.3.12版本上優化了vNUMA配置流程,帶來了全新的智能vNUMA功能。
02 ZStack智能vNUMA配置
ZStack 智能vNUMA方案是基于現有的CPU綁定功能拓展而來。基于云主機使用的vCPU和物理機pCPU的綁定關系自動生成與物理機NUMA拓撲一致的云主機 vNUMA拓撲,即根據vCPU pin pCPU的綁定關系,透傳pCPU所在的物理機NUMA拓撲信息作為云主機的vNUMA拓撲(NUMA拓撲一致性)。
要開啟vNUMA并生效,存在前提條件:
1.云主機所有的vCPU均綁定了物理機CPU;
2.云主機的單個vCPU綁定的多個pCPU不能分別屬于物理機上多個NUMA node。例如vCPU 0綁定了物理機上NUMA node 0中的CPU 0以及NUMA node 1中的CPU16,由于vCPU 0可能運行在物理機NUMA node 0 或者node 1上,具有不確定性,故而無法開啟vNUMA;
3.配置vNUMA后需要重啟才能生效。ZStack智能vNUMA方案在原先允許手動配置CPU綁定的基礎上提供了智能綁定,可以自動地將vCPU按照1:1的比例綁定到pCPU上,降低了用戶操作的難度。后續只需要用戶開啟vNUMA開關,啟動云主機時各個vNUMA node的內存大小會根據云主機內存大小以及各個vNUMA node中vCPU數量的比例來自動分配,并且自動配置云主機的vNUMA 拓撲信息。云主機啟動成功后即可在ZStack Cloud云平臺頁面上查看vNUMA拓撲與物理機NUMA拓撲之間的綁定關系,讓用戶更加直觀地了解云主機的vCPU和內存與物理機CPU和內存的對應關系。
03 性能測試
通過在相同的兩臺物理機上創建相同規格的云主機,進行MySQL性能測試,驗證vNUMA開啟與關閉狀態下的性能表現。
3.1 配置與測試工具
物理機配置
ZStack Cloud云平臺配置
測試工具
云主機配置
MySQL配置
3.1 配置與測試工具
使用相同的服務器硬件、云主機規格以及MySQL版本,使用HammerDB在數據庫MySQL寫入1000個warehouse的測試數據。然后其中一臺云主機開啟vNUMA,配置如表1所示,并在MySQL配置文件中設置innodb_numa_interleave=1。最后使用HammerDB測試MySQL性能并記錄。
表1 開啟vNUMA的云主機的配置情況
圖2 24C80G云主機vNUMA拓撲圖
3.3 測試數據
MYSQL TPM(Transaction Per Minute)性能對比圖表:
表2 MYSQL TPM(Transaction Per Minute)性能對比圖表
圖3 vNUMA啟用前后MySQL TPM性能對比圖表
MySQL NOPM(New Order Per Minute)性能對比圖表:?
表3 MySQL NOPM(New Order Per Minute)性能對比圖表
圖4 vNUMA啟用前后MySQL NOPM性能對比圖表
3.4 結論
vNUMA功能啟用后,MySQL性能提升明顯,平均提升約為15%,在測試壓力較大時性能可以提升18%,提升更明顯。
04 思考
1、本次測試未做CPU isolate、物理機上的內核進程以及中斷等,仍然可以在已經被綁定的pCPU上運行,可能會影響到pCPU的性能。
2、本次測試中物理機未啟用大頁內存,啟用大頁內存可以減少操作系統對頁面狀態的維護,并且能夠提升Translation Lookaside Buffer(頁面緩沖,TLB)的命中率,啟用大頁內存通常對數據庫有性能提升的作用。