如何为进程分配特定数量的 CPU 功率?

如何为进程分配特定数量的 CPU 功率?

我想将一定数量的CPU核心分配给特定进程以提高性能。

我怎样才能做到这一点?

答案1

有许多程序已经允许您使用它 - 例如编译器。

对于您的情况,您应该查看您的程序是否设计为并行使用多个 cpu 或 cpu 线程。

如果您的程序(例如java进程)是单线程的并且不能同时使用多个核心,那么您可以仅使用nice命令来增加其优先级。

但是您可以编写利用多核的 Java 程序。

看这个帖子

答案2

我假设问题与 Linux 环境有关,并且系统中存在竞争性工作负载。

在 CPU 级别实现进程分离的最简单方法是使用taskset/sched_setaffinity并将进程分配给一组内核,并可能排除这些内核被该系统上的其他 CPU 重度用户使用。

另一种可能性是使用类似的机制cgroups(手动或通过容器解决方案,如docker)将大部分 CPU 时间分配给所选进程(通过shares)。

如果您的工作负载对性能敏感,您可能需要查看操作系统本身使用的 CPU,例如处理网络数据包。您可能想要检查哪个核心执行大部分处理(如果有si),这通常显示为top.确保您的流程落在(或不落在)该核心上可能会影响您的结果 - 不幸的是,两者都是如此。看看irqbalance是否能走到这一步。

最后,为了尝试降低外部干扰,您可以尝试通过使用 来调整敏感进程的 CPU 调度优先级,从而提高敏感进程的 CPU 调度优先级nice

答案3

我不确定您是否想要将进程限制为一定数量的 CPU 核心,或者是否想要将 CPU 核心专用于该进程。

专用CPU时间

据我所知,不可能“授予”进程对 CPU 的独占访问权限,或者至少很难做到。如果其他进程正在使用您希望可供其他进程使用的 CPU 时间,则您应该使用nice. Nice 本质上是进程的优先级系统,是 -20 到 19 之间的数字(默认为 0)。看man nice。更高的“友善度”意味着该进程获得的 CPU 时间更少,对其他进程来说“更好”。降低nice值,进程的nice性会降低,并且会消耗更多的CPU时间。例如,您可以以ls最高优先级运行:nice -20 ls

限制CPU核心

在 Linux 上,您可以使用它cgroups来限制进程。我不确定 BSD 其他 Unix 变体,但我假设它们具有类似的功能。

相关内容