Numa架构下进程与CPU绑定

转自:https://blog.51cto.com/hl914/1557615

先要说的是,并不是所有的场景都适合绑定的,当出现内存交叉访问,或者缓存命中较低时,或者你想把某进程运行在特定的CPU上时可以进行绑定。那么要先知道怎么查看是否出现了交叉内存访问。

    那么除了交叉内存访问,还有什么值得我们去绑定进程呢?

        那就了解下内存贬值吧:    

      如果很多进程运行在CPU的某一个核心之上,我们都知道,CPU核心都是和L1直接打交道的,而各个进程间呢,还是切换着轮流运行的,如果我L1中全部缓存了进程A的数据,那么当我进程B或进程C运行时,极有可能会置换L1中的缓存数据,如果A进程没有运行完,当进程A再次执行时,还需要去置换L1中的缓存数据,这样,各个进程运行时可能每次都要置换L1中的数据,可能大部分时间都浪费在了置换缓存上,所以,我们可以将对性能敏感的进程绑定到某一个或一组核心,将多线程的程序也绑定到某一核心,这样,将大大提高服务器性能。

 

    先来说numastat这个命令:

      这个命令主要是显示进程与每个numa节点的内存分配的统计数据和分配的成功与失败情况。先上个图:

        wKiom1QhHCyxxSmFAACZtTqIc-s735.jpg

     

     可以看到我这里只有一个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单位,如果节点较多,可以使用这个参数,看图,来看下效果:

            wKiom1QhIg6i0MZfAADozmFt73M202.jpg

            单位都变成了MB了

        -m:显示每个节点中,系统范围内使用内存的情况,可以与其它参数组合使用:

            wKiom1QhJKmy9eKKAAJ5V4sp14o778.jpg

        -n:以原格式显示,但单位为MB

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

            wKiom1QhJkOSTHT-AAJGq4eJxHs572.jpg

       

        -s:进行排序,查看的更直观:

            wKiom1QhL5rTFpisAAJ6yRwxHvY906.jpg

           -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暂时没有使用过,了解的不多。。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值