NUMA

說到服務器的NUMA架構,大家或許都知道。NUMA架構在中大型系統上一直非常盛行,也是高性能的解決方案,尤其在系統延遲方面表現都很優秀。但NUMA架構對服務器的相關性能到底有什麼影響,怎樣設置會更好呢?本文在此解析一下。

  1、什麼是NUMA

  NUMA(Non Uniform Memory Access Architecture)是一種用於多處理器的電腦記憶體設計,內存訪問時間取決於處理器的內存位置。 在NUMA下,處理器訪問它自己的本地存儲器的速度比非本地存儲器(存儲器的地方到另一個處理器之間共享的處理器或存儲器)快一些。

  NUMA架構在邏輯上遵循對稱多處理(SMP)架構。 它是在二十世紀九十年代被開發出來的,開發商包括Burruphs (優利系統), Convex Computer(惠普),意大利霍尼韋爾信息系統(HISI)的(後來的Group Bull),Silicon Graphics公司(後來的硅谷圖形),Sequent電腦系統(後來的IBM),通用數據(EMC), Digital (後來的Compaq ,HP)。 這些公司研發的技術後來在類Unix操作系統中大放異彩,並在一定程度上運用到了Windows NT中。

  

  NUMA 的主要優點是伸縮性。NUMA 體系結構在設計上已超越了 SMP 體系結構在伸縮性上的限制。通過 SMP,所有的內存訪問都傳遞到相同的共享內存總線。這種方式非常適用於 CPU 數量相對較少的情況,但不適用於具有幾十個甚至幾百個 CPU 的情況,因爲這些 CPU 會相互競爭對共享內存總線的訪問。NUMA 通過限制任何一條內存總線上的 CPU 數量並依靠高速互連來連接各個節點,從而緩解了這些瓶頸狀況。


  2、NUMA的幾種架構方案

  NUMA 系統通常比一致內存訪問系統(UMA)更加經濟且性能更高。一致內存訪問系統必須平等地爲所有 CPU 提供內存,而 NUMA 系統則能夠爲直接連接到 CPU 的內存提供高速互連,同時爲與 CPU 相隔較遠的內存提供較爲便宜但更高延遲的連接。


使用 NUMA 時,會經常遇到下面幾種方案,以SQL SERVER數據庫爲例。(參閱technet資料)

A. 沒有端口到 NUMA 的關聯

這是具有硬件 NUMA 和單個 SQL Server 實例的計算機中的默認設置。所有通信流量都通過一個單獨的端口輸入並採用循環方式分佈到任何可用的 NUMA 節點。NUMA 增大了內存和 CPU 訪問的區域並增加了 I/O 和惰性編寫器線程的數量。在建立連接後會立即將其作用域限定爲此節點。它提供了 NUMA 節點間的自動負載平衡。客戶端應用程序可以連接到單個端口,而且可以輕鬆地進行部署。

連接使用任何 NUMA 節點。

B. 將單個端口關聯到多個節點以提高主要應用程序的性能

將一個端口關聯到多個用於主要應用程序的硬件 NUMA 節點。將第二個端口關聯到另一個用於第二個次要應用程序的硬件 NUMA 節點。用於這兩個應用程序的內存和 CPU 資源量非常不平衡,用於主要應用程序的本地內存和 CPU 資源量是用於次要應用程序的三倍。次要應用程序可以是數據庫引擎的第二個實例,它在同一數據庫引擎實例中,甚至在同一數據庫中提供次要的功能。通過向優先使用的連接提供額外資源,它提供了一種線程優先執行的方式。

一個端口連接到多個 NUMA 節點。

C. 將多個端口關聯到多個節點

可以將多個端口映射到同一 NUMA 節點。這樣,您就可以爲不同的端口配置不同的權限。例如,您可以通過控制對相應 TCP 端點的權限來嚴格限制由某個端口提供的訪問。在此示例中,端口 1450 在 Intranet 上普遍可用。端口 1433 則設置爲通過防火牆連接到 Internet,並對它的訪問進行嚴格的限制。兩個端口都可以充分、平等、安全地利用 NUMA。


多個端口連接到所有可用的 NUMA 節點

  3、如何設置,遵循什麼原則

  那麼在虛擬化場景中,如何設置NUMA呢?原則是什麼?

  wKioL1T0GqKiiEVRAAFyH7l6yPM786.jpg

  例如一臺配置了兩顆八核處理器以及128GB內存的服務器,我們需要在其上分配CPU和內存資源並劃分虛機。

  首先在NUMA架構中,每個處理器能夠控制64GB的物理內存,每個處理器的八個核心中的每個核心將對應一個8GB的NUMA節點。這將會如何影響虛擬機性能?由於每個處理器核心訪問NUMA節點內內存的速度要比其他節點快,因此當虛擬機內存大小少於或者等於NUMA節點的內存大小時,虛擬機在理論上能夠獲得最好的性能。如果給虛擬機分配更多的內存,則虛擬機必然要訪問其NUMA節點之外的部分內存,這樣或多或少會影響其性能。如果應用能夠感知NUMA,那就更好了。vSphere使用vNUMA可以創建能夠感知NUMA的虛擬機。該虛擬機將會被分割爲虛擬NUMA節點,每個vNUMA節點將會被放置到一個不同的物理NUMA節點。儘管虛擬機仍舊在兩個NUMA節點之間擴展,但虛擬機內的操作系統和應用能夠感知NUMA,資源使用將會得到優化。

  NUMA現已經對在數據中心服務器上安裝及選擇內存的方式帶來了很多改變。在給服務器增加物理內存時,我們需要注意增加的內存要在NUMA節點之間進行平衡及匹配以使主板上的每個處理器擁有相同的內存。如果在我們所舉例的服務器上配置更多的內存,那麼必須在處理器之間平衡這些內存模塊。如果增加64GB的內存,那麼每個處理器將分配到32GB的內存(每個處理器可支配的內存將增加到96GB,服務器總內存數將達到192GB),每個NUMA節點的內存大小將從8GB增加到12GB。由於每個Socket控制的內存插槽是不同的,因此要確保內存插槽是均勻的。例如192G內存分爲12個16G的內存條,那麼應該4個插在一個Socket的內存插槽中,另8個插在另兩個socket的內存插槽中。在爲虛機分配vCPU資源時,也儘可能按照Socket/Core的倍數分配,比如1X1, 1X2, 1X 4, 1X8, 2X1, 2X2, 2X4, 2X8等組合,但不要使用2X3, 2X5, 2X7這種組合。後面的組合會引起跨Socket的內存調用,從而容易導致性能下降。


  結合實踐,不同的業務對內存會有不同的要求,但最好不要跨NUMA單元去進行調用,儘可能的使每個CPU訪問它的直連內存單元。遵循這些簡單的原則,就會使性能更好。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章