Numa架構下進程與CPU綁定


    先要說的是,並不是所有的場景都適合綁定的,當出現內存交叉訪問,或者緩存命中較低時,或者你想把某進程運行在特定的CPU上時可以進行綁定。那么要先知道怎么查看是否出現了交叉內存訪問。

    那么除了交叉內存訪問,還有什么值得我們去綁定進程呢?

        那就了解下內存貶值吧:   

      如果很多進程運行在CPU的某一個核心之上,我們都知道,CPU核心都是和L1直接打交道的,而各個進程間呢,還是切換着輪流運行的,如果我L1中全部緩存了進程A的數據,那么當我進程B或進程C運行時,極有可能會置換L1中的緩存數據,如果A進程沒有運行完,當進程A再次執行時,還需要去置換L1中的緩存數據,這樣,各個進程運行時可能每次都要置換L1中的數據,可能大部分時間都浪費在了置換緩存上,所以,我們可以將對性能敏感的進程綁定到某一個或一組核心,將多線程的程序也綁定到某一核心,這樣,將大大提高服務器性能。

 

    先來說numastat這個命令:

      這個命令主要是顯示進程與每個numa節點的內存分配的統計數據和分配的成功與失敗情況。先上個圖:

        

     

     可以看到我這里只有一個Node節點,也就是說只有一顆CPU,所以可能看不出效果。

     numa_hit---命中的,也就是為這個節點成功分配本地內存訪問的內存大小

     numa_miss---把內存訪問分配到另一個node節點的內存大小,這個值和另一個node的numa_foreign相對應。

     numa_foreign--另一個Node訪問我的內存大小,與對方node的numa_miss相對應

     interleave_hit---這個參數暫時不明確

     local_node----這個節點的進程成功在這個節點上分配內存訪問的大小

     other_node----這個節點的進程 在其它節點上分配的內存訪問大小

      很明顯,miss值和foreign值越高,就要考慮綁定的問題。

      numastat的常用參數:

        -c:緊湊的顯示信息,並將內存四舍五入到MB單位,如果節點較多,可以使用這個參數,看圖,來看下效果:

            

 

 

            單位都變成了MB了

        -m:顯示每個節點中,系統范圍內使用內存的情況,可以與其它參數組合使用:

            

 

 

        -n:以原格式顯示,但單位為MB

        -p:可以指定pid或指定某Node

            

 

 

       

        -s:進行排序,查看的更直觀:

            

 

 

           -z:忽略所有為0的行和列

 

        下面再來說一下一個綁定的命令,numactl,這個命令可以將某個進程綁定到某個node或某個node上的某個或某組核心上。

        --show:可以查看當前的numa策略,

         -H:可以顯示各Node中內存使用情況

        --membind:只從某節點分配內存,當某節點內存不足,則會分配失敗,格式:

          numactl --membind=nodes program(nodes寫你要分配的節點0或1或者其它節點數,后面是程序,可以寫絕對路徑,也可寫服務啟動腳本)

        --numactl:把進程綁定到某節點上,用法如下:

          numactl --cpunodebind=nodes program(nodes為Cpu節點,后面跟程序,)

        --physcpubind:把進程綁定到某核心上,如果程序運行,用法如下(參數太長就簡寫了,其它簡寫參數自己Man):

          numactl -C 1,3 httpd

        --localalloc:指令永遠在當前節點分配內存,用法:

            numactl -l httpd

        --preferred:如果指定的內存無法分配足夠的空間,可以指定去某一個節點的內存分配,格式如下:

            numactl --preferred=0 httpd

            

         上面的大部分參數需要停止服務后執行。機器重啟配置失效。

         在redhat6中,有一個numad的服務(需手工安裝),它可以自動的監控我們cpu狀況,並自動平衡資源,這個服務需要在內存使用量非常大的時候才會有明顯的效果,當內存空余量較大時,需要關閉KSM,避免發生沖突。官方說在某些內存使用巨大的環境中,可能會提高50%的性能。 

        兩種使用方法:

            1.service numad start

            2.numad -S 0 -p pid   使用numad -i 0 停止

         numad暫時沒有使用過,了解的不多。。

        
-----------------------------------
©著作權歸作者所有:來自51CTO博客作者胡研的原創作品,如需轉載,請與作者聯系,否則將追究法律責任
CPU性能監控之二-----Numa架構下進程與CPU綁定
https://blog.51cto.com/hl914/1557615


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM