如何防止某个特定的 CPU 核心被使用?

如何防止某个特定的 CPU 核心被使用?

是否可以防止 Linux 中的操作系统使用 CPU 核心?maxcpus=<n>启动参数可防止在操作系统中看到指定数量的核心。我希望所有核心都可见,但只有一些核心可供操作系统用于调度进程。

编辑:这是为了确保关键进程可以在核心上进行调度,而其余不是绝对重要但 CPU 密集度高的进程可以相互竞争其他核心。这是在 CentOS 6 上。

答案1

使用isolcpus内核命令行上的参数将某些核心与用户空间任务隔离。引用内核启动参数文档

isolcpus= [KNL,SMP] 将 CPU 与通用调度程序隔离。格式:,..., 或 -(必须是按升序排列的正值范围)或混合 ,...,-

           This option can be used to specify one or more CPUs
           to isolate from the general SMP balancing and scheduling
           algorithms. You can move a process onto or off an
           "isolated" CPU via the CPU affinity syscalls or cpuset.
           <cpu number> begins at 0 and the maximum value is
           "number of CPUs in system - 1".

           This option is the preferred way to isolate CPUs. The
           alternative -- manually setting the CPU mask of all
           tasks in the system -- can cause problems and
           suboptimal load balancer performance.

答案2

您可以使用以下方式禁用处理器(例如 core0),echo 0 > /sys/devices/system/cpu/cpu0/online并使用以下方式启用echo 1 > /sys/devices/system/cpu/cpu0/online

您可以使用以下方式验证状态cat /proc/cpuinfo

答案3

通用答案...直到您提供更多信息。

您可能希望使用适合您的发行版的 CPU 隔离工具。此外,cgroups 也可能有用,具体取决于您具体想要完成的任务。

taskset和cpuset之间的区别


编辑:

您正在寻找 CPU 防护罩。在 EL6 上,您可能需要了解有关 cgroups 以及cgred守护进程和cgconfig程序包的信息。

例如:

/etc/cgconfig.conf:

mount {
        cpuset  = /cgroup/cpuset;
        cpu     = /cgroup/cpu;
        cpuacct = /cgroup/cpuacct;
        memory  = /cgroup/memory;
        devices = /cgroup/devices;
        freezer = /cgroup/freezer;
        net_cls = /cgroup/net_cls;
        blkio   = /cgroup/blkio;
}

group ppro-users {
        cpuset {
                cpuset.mems="0-1";
                cpuset.cpus="2-7,14-19";
        }
        cpu {
                cpu.shares = 1000;
        }
        memory {
                memory.limit_in_bytes = 40960m;
        }
}

上面的代码片段将“ppro-users” cgroup 中的进程限制到某些 CPU。我通过使用 cgred 包来识别和管理应属于该 cgroup 的进程,从而增强了这一功能。

/etc/cgrules.conf

# Example:
#<user>         <controllers>   <destination>
#@student       cpu,memory      usergroup/student/
#peter          cpu             test1/
#%              memory          test2/
admin           cpu,cpuset,memory       ppro-users/
@ppro:dbc       cpu,cpuset,memory       ppro-users/

相关内容