Linux实现CPU物理隔离

2024-07-14 1363阅读

文章目录

  • 背景
  • 使用 taskset 命令
  • 使用 cgroups
  • 案例

    背景

    在 Linux 上实现 CPU 的物理隔离(也称为 CPU 隔离或 CPU pinning),可以通过将特定的任务或进程绑定到特定的 CPU 核心来实现。这可以提高系统性能,尤其是在需要实时响应的应用中。以下是几种实现方法。

    Linux实现CPU物理隔离
    (图片来源网络,侵删)

    使用 taskset 命令

    taskset 命令可以将进程绑定到指定的 CPU 核心。

    1.启动新进程并绑定到特定 CPU 核心:

    taskset -c 0,1 
    

    例如,绑定到 CPU 0 和 1:

    taskset -c 0,1 my_program
    

    2.将已有进程绑定到特定 CPU 核心:

    获取进程的 PID:

    ps -ef | grep my_program
    

    然后使用 taskset 绑定:

    taskset -cp 0,1 
    

    使用 cgroups

    cgroups(控制组)可以更灵活地管理系统资源,包括 CPU 核心的分配。

    1.创建 cgroup 并设置 CPU 核心限制:

    sudo cgcreate -g cpuset:/mygroup
    sudo cgset -r cpuset.cpus="0-1" mygroup
    sudo cgset -r cpuset.mems="0" mygroup
    

    2.将进程加入 cgroup:启动新进程

    sudo cgexec -g cpuset:mygroup my_program
    

    3.将已有进程加入 cgroup:

    获取进程的 PID:

    ps -ef | grep my_program
    

    然后将 PID 写入 cgroup 的 tasks 文件:

    sudo sh -c 'echo  >
    

    案例

    linxu是8核16线程,指定特定python脚本运行特定CPU,实现CPU的物理隔离.

    使用 taskset 绑定 Python 脚本到特定 CPU 核

    确定要绑定的 CPU 核:例如,如果你想将脚本绑定到第0和第1个CPU核,可以使用CPU编号0和1。

    使用 taskset 运行 Python 脚本:假设你的Python脚本是script.py,可以使用以下命令将其绑定到CPU核0和1:

    taskset -c 0,1 python3 script.py
    

    这将会确保script.py只在CPU核0和1上运行。

    如果你想更精细地控制绑定到特定的超线程,可以使用类似的方法。例如,假设你想将脚本绑定到超线程0、1、2和3,可以使用以下命令:

    taskset -c 0,1,2,3 python3 script.py
    

    检查绑定情况

    可以使用htop或top命令来查看进程的CPU使用情况,并确认进程确实绑定到了指定的CPU核。

    假设有8个脚本,脚本以process_split_{}.py命名,linux有16个CPU,每个脚本按照顺序绑定2个CPU,实现物理隔离,这样每个脚本只使用2个CPU同时运行任务,互相隔离。

    创建Shell脚本:

    新建一个名为run_scripts.sh的Shell脚本,内容如下:

    bash
    复制代码
    #!/bin/bash
    # 绑定CPU核并运行脚本
    taskset -c 0,1 python3 process_split_0.py &
    taskset -c 2,3 python3 process_split_1.py &
    taskset -c 4,5 python3 process_split_2.py &
    taskset -c 6,7 python3 process_split_3.py &
    taskset -c 8,9 python3 process_split_4.py &
    taskset -c 10,11 python3 process_split_5.py &
    taskset -c 12,13 python3 process_split_6.py &
    taskset -c 14,15 python3 process_split_7.py &
    

    赋予Shell脚本执行权限:

    在终端中运行以下命令,赋予Shell脚本执行权限:

    chmod +x run_scripts.sh
    

    运行Shell脚本:

    现在可以运行这个Shell脚本,它将按照顺序启动所有Python脚本并绑定到指定的CPU核上:

    ./run_scripts.sh
    

    python代码

    import subprocess
    # 定义脚本名称和绑定的CPU核对
    scripts_and_cpus = [
        ("process_split_0.py", "0,1"),
        ("process_split_1.py", "2,3"),
        ("process_split_2.py", "4,5"),
        ("process_split_3.py", "6,7"),
        ("process_split_4.py", "8,9"),
        ("process_split_5.py", "10,11"),
        ("process_split_6.py", "12,13"),
        ("process_split_7.py", "14,15"),
    ]
    # 启动每个脚本并绑定到指定的CPU核
    for script, cpus in scripts_and_cpus:
        command = ["taskset", "-c", cpus, "python3", script]
        subprocess.Popen(command)
    print("所有脚本已启动并绑定到指定的CPU核。")
    

    当然使用cgroups 也可以实现对内存进行隔离。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]