溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mongodb 使用numactl 啟動(dòng)

發(fā)布時(shí)間:2020-05-21 10:24:11 來(lái)源:網(wǎng)絡(luò) 閱讀:34866 作者:xingliguang 欄目:MongoDB數(shù)據(jù)庫(kù)

一、NUMA介紹

在介紹numactl之前,需要先說(shuō)說(shuō)NUMA是什么,這樣才能更好的理解numactl。

  NUMA(Non Uniform Memory Access Architecture)字面直譯為"非一致性內(nèi)存訪問(wèn)",對(duì)于Linux內(nèi)核來(lái)說(shuō)最早出現(xiàn)在2.6.7版本上。這種特性對(duì)于當(dāng)下大內(nèi)存+多CPU為潮流的X86平臺(tái)來(lái)說(shuō)確實(shí)會(huì)有不少的性能提升,但相反的,如果配置不當(dāng)?shù)脑挘彩且粋€(gè)很大的坑.

  非統(tǒng)一內(nèi)存訪問(wèn)(NUMA)是一種用于多處理器的電腦記憶體設(shè)計(jì),內(nèi)存訪問(wèn)時(shí)間取決于處理器的內(nèi)存位置。 在NUMA下,處理器訪問(wèn)它自己的本地存儲(chǔ)器的速度比非本地存儲(chǔ)器(存儲(chǔ)器的地方到另一個(gè)處理器之間共享的處理器或存儲(chǔ)器)快一些。NUMA架構(gòu)在邏輯上遵循對(duì)稱多處理(SMP)架構(gòu)。 它是在二十世紀(jì)九十年代被開發(fā)出來(lái)的,開發(fā)商包括Burruphs (優(yōu)利系統(tǒng)), Convex Computer(惠普),意大利霍尼韋爾信息系統(tǒng)(HISI)的(后來(lái)的Group Bull),Silicon Graphics公司(后來(lái)的硅谷圖形),Sequent電腦系統(tǒng)(后來(lái)的IBM),通用數(shù)據(jù)(EMC), Digital (后來(lái)的Compaq ,HP)。 這些公司研發(fā)的技術(shù)后來(lái)在類Unix操作系統(tǒng)中大放異彩,并在一定程度上運(yùn)用到了Windows NT中。

首次商業(yè)化實(shí)現(xiàn)基于NUMA的Unix系統(tǒng)的是對(duì)稱多處理XPS-100系列服務(wù)器,它是由VAST公司的Dan Gielen為HISI設(shè)計(jì)的。 這個(gè)架構(gòu)的巨大成功使HISI成為了歐洲的頂級(jí)Unix廠商。

  NUMA通過(guò)提供分離的存儲(chǔ)器給各個(gè)處理器,避免當(dāng)多個(gè)處理器訪問(wèn)同一個(gè)存儲(chǔ)器產(chǎn)生的性能損失來(lái)試圖解決這個(gè)問(wèn)題。對(duì)于涉及到分散的數(shù)據(jù)的應(yīng)用(在服務(wù)器和類似于服務(wù)器的應(yīng)用中很常見),NUMA可以通過(guò)一個(gè)共享的存儲(chǔ)器提高性能至n倍,而n大約是處理器(或者分離的存儲(chǔ)器)的個(gè)數(shù)。

最早Intel在Nehalem架構(gòu)上實(shí)現(xiàn)了NUMA,取代了在此之前一直使用的FSB前端總線的架構(gòu),用以對(duì)抗AMD的HyperTransport技術(shù)。一方面這個(gè)架構(gòu)的特點(diǎn)是內(nèi)存控制器從傳統(tǒng)的北橋中移到了CPU中,排除了商業(yè)戰(zhàn)略方向的考慮之外,這樣做的方法同樣是為了實(shí)現(xiàn)NUMA.

   Intel的NUMA解決方案,Litrin始終認(rèn)為它來(lái)自本家的安藤。他的模型有點(diǎn)類似于MapReduce。放棄總線的訪問(wèn)方式,將CPU劃分到多個(gè)Node中,每個(gè)node有自己獨(dú)立的內(nèi)存空間。各個(gè)node之間通過(guò)高速互聯(lián)通訊,通訊通道被成為QuickPath Interconnect即QPI。

二、numactl介紹

numactl - Control NUMA policy for processes or shared memory   #官方介紹
翻譯:控制進(jìn)程或共享內(nèi)存的NUMA策略

Linux提供了一個(gè)手工調(diào)優(yōu)的命令numactl(默認(rèn)不安裝),首先你可以通過(guò)它查看系統(tǒng)的numa狀態(tài)

#numactl --hardware 
available: 2 nodes (0-1)
node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
node 0 size: 16290 MB
node 0 free: 11947 MB
node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
node 1 size: 16384 MB
node 1 free: 14282 MB
node distances:
node   0   1 
  0:  10  21 
  1:  21  10 
此系統(tǒng)共有2個(gè)node,各領(lǐng)取16個(gè)CPU和16G內(nèi)存。

這里假設(shè)我要執(zhí)行一個(gè)java param命令,此命令需要12G內(nèi)存;一個(gè)python param命令,需要16G內(nèi)存。
最好的優(yōu)化方案時(shí)python在node0中執(zhí)行,而java在node1中執(zhí)行,那命令是:
#numactl --cpubind=0 --membind=0 python param
#numactl --cpubind=1 --membind=1 java param
當(dāng)然,也可以自找沒(méi)趣進(jìn)行如下配置:
#numactl --cpubind=0 --membind=0,1 java param

通過(guò)numastat命令可以查看numa狀態(tài)
注:numastat - Show per-NUMA-node memory statistics for processes and the operating system
中文翻譯:顯示進(jìn)程和操作系統(tǒng)的每個(gè)NUMA節(jié)點(diǎn)內(nèi)存統(tǒng)計(jì)信息
# numastat
                           node0           node1
numa_hit             61086587932     25494360922
numa_miss              101325832     28581785059
numa_foreign         28581785059       101325832
interleave_hit             28949           28518
local_node           61086561129     25494416828
other_node             101352635     28581729153

other_node過(guò)高意味著需要重新規(guī)劃numa.

三、使用numactl啟動(dòng)mongodb

#numactl --interleave=all /opt/app/mongodb/bin/mongod -f /etc/mongodb.conf
即分配所有的node供其使用,這也是官方推薦的用法。

四、使用普通用戶啟動(dòng)mongodb

關(guān)閉
#su - mongodb -s /bin/bash -c "/opt/app/mongodb/bin/mongod -f /opt/app/mongodb/etc/mongodb.conf --shutdown"
啟動(dòng)
#su - mongodb -s /bin/bash -c "numactl --interleave=all /opt/app/mongodb/bin/mongod -f /opt/app/mongodb/etc/mongodb.conf"


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI