我正在运行包含两个进程的 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
如果有人更感兴趣,请阅读以下内容: