如何進(jìn)行numa架構(gòu)與性能的解析,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)公司主營(yíng)惠陽(yáng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開發(fā),惠陽(yáng)h5成都微信小程序搭建,惠陽(yáng)網(wǎng)站營(yíng)銷推廣歡迎惠陽(yáng)等地區(qū)企業(yè)咨詢
說到服務(wù)器的NUMA架構(gòu),大家或許都知道。NUMA架構(gòu)在中大型系統(tǒng)上一直非常盛行,也是高性能的解決方案,尤其在系統(tǒng)延遲方面表現(xiàn)都很優(yōu)秀。但NUMA架構(gòu)對(duì)服務(wù)器的相關(guān)性能到底有什么影響,怎樣設(shè)置會(huì)更好呢?小編在此解析一下。
1、什么是NUMA
NUMA(Non Uniform Memory Access Architecture)是一種用于多處理器的電腦記憶體設(shè)計(jì),內(nèi)存訪問時(shí)間取決于處理器的內(nèi)存位置。 在NUMA下,處理器訪問它自己的本地存儲(chǔ)器的速度比非本地存儲(chǔ)器(存儲(chǔ)器的地方到另一個(gè)處理器之間共享的處理器或存儲(chǔ)器)快一些。
NUMA架構(gòu)在邏輯上遵循對(duì)稱多處理(SMP)架構(gòu)。 它是在二十世紀(jì)九十年代被開發(fā)出來的,開發(fā)商包括Burruphs (優(yōu)利系統(tǒng)), Convex Computer(惠普),意大利霍尼韋爾信息系統(tǒng)(HISI)的(后來的Group Bull),Silicon Graphics公司(后來的硅谷圖形),Sequent電腦系統(tǒng)(后來的IBM),通用數(shù)據(jù)(EMC), Digital (后來的Compaq ,HP)。 這些公司研發(fā)的技術(shù)后來在類Unix操作系統(tǒng)中大放異彩,并在一定程度上運(yùn)用到了Windows NT中。
NUMA 的主要優(yōu)點(diǎn)是伸縮性。NUMA 體系結(jié)構(gòu)在設(shè)計(jì)上已超越了 SMP 體系結(jié)構(gòu)在伸縮性上的限制。通過 SMP,所有的內(nèi)存訪問都傳遞到相同的共享內(nèi)存總線。這種方式非常適用于 CPU 數(shù)量相對(duì)較少的情況,但不適用于具有幾十個(gè)甚至幾百個(gè) CPU 的情況,因?yàn)檫@些 CPU 會(huì)相互競(jìng)爭(zhēng)對(duì)共享內(nèi)存總線的訪問。NUMA 通過限制任何一條內(nèi)存總線上的 CPU 數(shù)量并依靠高速互連來連接各個(gè)節(jié)點(diǎn),從而緩解了這些瓶頸狀況。
2、NUMA的幾種架構(gòu)方案
NUMA 系統(tǒng)通常比一致內(nèi)存訪問系統(tǒng)(UMA)更加經(jīng)濟(jì)且性能更高。一致內(nèi)存訪問系統(tǒng)必須平等地為所有 CPU 提供內(nèi)存,而 NUMA 系統(tǒng)則能夠?yàn)橹苯舆B接到 CPU 的內(nèi)存提供高速互連,同時(shí)為與 CPU 相隔較遠(yuǎn)的內(nèi)存提供較為便宜但更高延遲的連接。
使用 NUMA 時(shí),會(huì)經(jīng)常遇到下面幾種方案,以SQL SERVER數(shù)據(jù)庫(kù)為例。(參閱technet資料)
A. 沒有端口到 NUMA 的關(guān)聯(lián)
這是具有硬件 NUMA 和單個(gè) SQL Server 實(shí)例的計(jì)算機(jī)中的默認(rèn)設(shè)置。所有通信流量都通過一個(gè)單獨(dú)的端口輸入并采用循環(huán)方式分布到任何可用的 NUMA 節(jié)點(diǎn)。NUMA 增大了內(nèi)存和 CPU 訪問的區(qū)域并增加了 I/O 和惰性編寫器線程的數(shù)量。在建立連接后會(huì)立即將其作用域限定為此節(jié)點(diǎn)。它提供了 NUMA 節(jié)點(diǎn)間的自動(dòng)負(fù)載平衡??蛻舳藨?yīng)用程序可以連接到單個(gè)端口,而且可以輕松地進(jìn)行部署。
將一個(gè)端口關(guān)聯(lián)到多個(gè)用于主要應(yīng)用程序的硬件 NUMA 節(jié)點(diǎn)。將第二個(gè)端口關(guān)聯(lián)到另一個(gè)用于第二個(gè)次要應(yīng)用程序的硬件 NUMA 節(jié)點(diǎn)。用于這兩個(gè)應(yīng)用程序的內(nèi)存和 CPU 資源量非常不平衡,用于主要應(yīng)用程序的本地內(nèi)存和 CPU 資源量是用于次要應(yīng)用程序的三倍。次要應(yīng)用程序可以是數(shù)據(jù)庫(kù)引擎的第二個(gè)實(shí)例,它在同一數(shù)據(jù)庫(kù)引擎實(shí)例中,甚至在同一數(shù)據(jù)庫(kù)中提供次要的功能。通過向優(yōu)先使用的連接提供額外資源,它提供了一種線程優(yōu)先執(zhí)行的方式。
可以將多個(gè)端口映射到同一 NUMA 節(jié)點(diǎn)。這樣,您就可以為不同的端口配置不同的權(quán)限。例如,您可以通過控制對(duì)相應(yīng) TCP 端點(diǎn)的權(quán)限來嚴(yán)格限制由某個(gè)端口提供的訪問。在此示例中,端口 1450 在 Intranet 上普遍可用。端口 1433 則設(shè)置為通過防火墻連接到 Internet,并對(duì)它的訪問進(jìn)行嚴(yán)格的限制。兩個(gè)端口都可以充分、平等、安全地利用 NUMA。
3、如何設(shè)置,遵循什么原則
那么在虛擬化場(chǎng)景中,如何設(shè)置NUMA呢?原則是什么?
例如一臺(tái)配置了兩顆八核處理器以及128GB內(nèi)存的服務(wù)器,我們需要在其上分配CPU和內(nèi)存資源并劃分虛機(jī)。
首先在NUMA架構(gòu)中,每個(gè)處理器能夠控制64GB的物理內(nèi)存,每個(gè)處理器的八個(gè)核心中的每個(gè)核心將對(duì)應(yīng)一個(gè)8GB的NUMA節(jié)點(diǎn)。這將會(huì)如何影響虛擬機(jī)性能?由于每個(gè)處理器核心訪問NUMA節(jié)點(diǎn)內(nèi)內(nèi)存的速度要比其他節(jié)點(diǎn)快,因此當(dāng)虛擬機(jī)內(nèi)存大小少于或者等于NUMA節(jié)點(diǎn)的內(nèi)存大小時(shí),虛擬機(jī)在理論上能夠獲得最好的性能。如果給虛擬機(jī)分配更多的內(nèi)存,則虛擬機(jī)必然要訪問其NUMA節(jié)點(diǎn)之外的部分內(nèi)存,這樣或多或少會(huì)影響其性能。如果應(yīng)用能夠感知NUMA,那就更好了。vSphere使用vNUMA可以創(chuàng)建能夠感知NUMA的虛擬機(jī)。該虛擬機(jī)將會(huì)被分割為虛擬NUMA節(jié)點(diǎn),每個(gè)vNUMA節(jié)點(diǎn)將會(huì)被放置到一個(gè)不同的物理NUMA節(jié)點(diǎn)。盡管虛擬機(jī)仍舊在兩個(gè)NUMA節(jié)點(diǎn)之間擴(kuò)展,但虛擬機(jī)內(nèi)的操作系統(tǒng)和應(yīng)用能夠感知NUMA,資源使用將會(huì)得到優(yōu)化。
NUMA現(xiàn)已經(jīng)對(duì)在數(shù)據(jù)中心服務(wù)器上安裝及選擇內(nèi)存的方式帶來了很多改變。在給服務(wù)器增加物理內(nèi)存時(shí),我們需要注意增加的內(nèi)存要在NUMA節(jié)點(diǎn)之間進(jìn)行平衡及匹配以使主板上的每個(gè)處理器擁有相同的內(nèi)存。如果在我們所舉例的服務(wù)器上配置更多的內(nèi)存,那么必須在處理器之間平衡這些內(nèi)存模塊。如果增加64GB的內(nèi)存,那么每個(gè)處理器將分配到32GB的內(nèi)存(每個(gè)處理器可支配的內(nèi)存將增加到96GB,服務(wù)器總內(nèi)存數(shù)將達(dá)到192GB),每個(gè)NUMA節(jié)點(diǎn)的內(nèi)存大小將從8GB增加到12GB。由于每個(gè)Socket控制的內(nèi)存插槽是不同的,因此要確保內(nèi)存插槽是均勻的。例如192G內(nèi)存分為12個(gè)16G的內(nèi)存條,那么應(yīng)該4個(gè)插在一個(gè)Socket的內(nèi)存插槽中,另8個(gè)插在另兩個(gè)socket的內(nèi)存插槽中。在為虛機(jī)分配vCPU資源時(shí),也盡可能按照Socket/Core的倍數(shù)分配,比如1X1, 1X2, 1X 4, 1X8, 2X1, 2X2, 2X4, 2X8等組合,但不要使用2X3, 2X5, 2X7這種組合。后面的組合會(huì)引起跨Socket的內(nèi)存調(diào)用,從而容易導(dǎo)致性能下降。
結(jié)合實(shí)踐,不同的業(yè)務(wù)對(duì)內(nèi)存會(huì)有不同的要求,但最好不要跨NUMA單元去進(jìn)行調(diào)用,盡可能的使每個(gè)CPU訪問它的直連內(nèi)存單元。遵循這些簡(jiǎn)單的原則,就會(huì)使性能更好。
關(guān)于如何進(jìn)行numa架構(gòu)與性能的解析問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。