我在服务器上有一个单线程进程,我想静态绑定到一个 CPU 内核并始终为其提供所有可用的计算能力(它是受资源不足严重影响的实时进程)。不幸的是,机器严重超载,因此 CPU 平均占用 60% 或更多 CPU,并且进程通常会窒息。我已经分配了实时循环优先级 99,但它仍然远非完美。
如何在启动时将所有其他进程分配给剩余的 7 个 CPU 核心,并让一个核心专用于这一进程?我说的是所有新生成的进程从一开始就已经绑定到 7 个内核的情况。
我在服务器上有一个单线程进程,我想静态绑定到一个 CPU 内核并始终为其提供所有可用的计算能力(它是受资源不足严重影响的实时进程)。不幸的是,机器严重超载,因此 CPU 平均占用 60% 或更多 CPU,并且进程通常会窒息。我已经分配了实时循环优先级 99,但它仍然远非完美。
如何在启动时将所有其他进程分配给剩余的 7 个 CPU 核心,并让一个核心专用于这一进程?我说的是所有新生成的进程从一开始就已经绑定到 7 个内核的情况。
使用内核引导参数 isolcpus 删除您想要为实时进程专用的 cpu:
如果您使用的是带有 systemd 的发行版,则可以
CPUAffinity
在您的服务单元中使用我从来没有这样做过,所以这只是一个建议。
似乎
taskset
配置是继承的。因此,您可以尽早在引导过程中为 PID 1 进行这样的设置,以便 SystemD 之后启动的所有内容都将仅使用这些内核:或者您不在乎在启动过程中的哪个时间点会发生这种情况,只需遍历所有现有进程即可。
不要忘记为您的特殊应用更改设置...