两个进程进行大量计算 - 我希望其中一个进程获得~100%的处理器时间 - 如何做?

两个进程进行大量计算 - 我希望其中一个进程获得~100%的处理器时间 - 如何做?

我正在运行包含两个进程的 Ubuntu 基本服务器: - 进程 1 - 100% 正常运行时间执行计算,我使用它来与社区共享计算能力(它的运行优先级为 @prio 19) - 进程 2 - 不时执行 5-10 分钟的计算,我使用它来为我自己计算(它的运行优先级为 @prio -19)

我希望进程 2 获得 100% 的计算能力(进程 1 此时的 CPU 利用率应该接近 0%)。

我尝试使用 nice / renice,进程 1 的优先级为 19(最低),进程 2 的优先级为 -19(最高)。但我得到的最好结果是进程 1 的 CPU 为 50%,进程 2 的 CPU 为 50%(使用 htop 检查)——这让我有点惊讶……

这两个进程都是多线程的,单独运行时会占用 100% 的 CPU 核心。没有其他资源(I/O、内存、带宽等)可以影响此使用情况。

当我需要计算能力时,我不想手动停止/启动任何进程(两个进程必须一直运行);必须自动为进程 2 提供 100% 的 CPU。

我该怎么做才能实现我的目标?谢谢。

答案1

感谢@ubfan1,我探索了不同的调度策略,这是我迄今为止取得的最佳结果:

  • 进程 1 正在使用 SCHED_BATCH 策略运行

  • 进程 2 正在使用 SCHED_RR 策略运行

结果:当两个进程同时运行时: - 进程 1 占用约 5% 的 CPU - 进程 2 占用约 95% 的 CPU

并且当只有进程 1 在执行计算时(进程 2 正在等待我的输入以开始计算) - 进程 1 使用了 100% 的 CPU

如果有人更感兴趣,请阅读以下内容:

  1. http://manpages.ubuntu.com/manpages/xenial/man8/schedtool.8.html
  2. http://man7.org/linux/man-pages/man7/sched.7.html

相关内容