zoukankan      html  css  js  c++  java
  • linux系统设置cpu孤立

    介绍

    针对cpu密集型的任务,消耗cpu较高,最好设置cpu亲和度,以提高任务执行效率,避免cpu进行上下文切换,浪费不必要的性能。
    特定任务(进程/线程)需要独占一个cpu核心并且不想让其他任务(进程/线程)使用该核心。

    默认情况下,linux系统任务(进程/线程)可以使用任意一颗核心,要想把指定的cpu孤立出来,不让普通进程使用,需要修改grub参数

    修改grub配置文件

    以debian为例,默认grub参数配置文件为/etc/default/grub

    找到GRUB_CMDLINE_LINUX行,

    我这里这一行默认为

    GRUB_CMDLINE_LINUX="text console=tty0 console=ttyS0,115200n8"
    

    想要孤立11-23号cpu,可以这么写

    GRUB_CMDLINE_LINUX="text isolcpus=11,12,13,14,15,16,17,18,19,20,21,22,23 nohz_full=11,12,13,14,15,16,17,18,19,20,21,22,23 rcu_nocbs=11,12,13,14,15,16,17,18,19,20,21,22,23 console=tty0 console=ttyS0,115200n8"
    

    所有的核心必须用逗号分隔开来写11,12,13,14,15,16,17,18,19,20,21,22,23,不能写为11-23

    生成新的grub引导文件

    修改/etc/default/grub文件后,需要重新生成grub引导文件

    使用命令

    update-grub
    

    或者

    update-grub2
    

    或者

    grub-mkconfig -o /boot/grub/grub.cfg
    

    上面3个命令都可以,其实就是重新生成了/boot/grub/grub.cfg文件,
    重启系统生效,系统默认就不会再使用11-23号cpu了

    使用孤立cpu

    我们要想使用这些cpu,可以在命令行中使用taskset命令

    比如:

    正常的命令运行为

    python xx.py
    

    这样运行,一定不会使用11-23号cpu,

    如果想使用11-15号cpu运行该进程,可以写为

    taskset -c 11,12,13,14,15 python xx.py
    

    或者

    taskset -c 11-15 python xx.py
    

    除了在命令行中用taskset命令,也可以使用库函数在代码中设置cpu亲和度来使用这些cpu

    注意

    在docker容器中,这些已经被孤立的cpu仍然可以被使用,
    比如上面我们孤立了11-23号cpu,在docker容器中运行命令默认也是可以使用这些cpu的

    当然,我们肯定不希望docker也可以使用这些cpu,因为这些cpu是供特定服务(进程)使用的,
    在创建docker容器时,通过参数--cpuset-cpus指定容器只能使用哪些cpu,可以达到将11-23号cpu孤立的目的。

  • 相关阅读:
    SQL80001: Incorrect syntax near ':'
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
    log4net 日志配置及使用
    在C#中将String转换成Enum:
    未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
    五大编程算法
    CodeSmith 使用说明
    PowerDesigner使用教程
    一个七年程序员的经验
    未能正确加载包“Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage
  • 原文地址:https://www.cnblogs.com/yanhai307/p/10783771.html
Copyright © 2011-2022 走看看