您好,登錄后才能下訂單哦!
一、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"
免責(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)容。