兩個進程進行大量計算 - 我希望其中一個進程能夠獲得約 100% 的處理器時間 - 如何實現?

兩個進程進行大量計算 - 我希望其中一個進程能夠獲得約 100% 的處理器時間 - 如何實現?

我正在運行帶有兩個進程的Ubuntu 基本伺服器: - 進程1 - 執行100% 正常運行時間的計算,我用它來向社區共享計算能力(它運行於@ prio 19) - 進程2 - 執行計算5 -10 分鐘,從有時,我用它來計算(它正在運行@prio -19)

我希望進程 2 具有 100% 的運算能力(此時進程 1 的 CPU 使用率應該接近 0%)。

我嘗試使用nice / renice,進程1的優先權為19(最低的可能),進程2的優先權為-19(最高的可能)。但我得到的最好結果是進程 1 佔用了 50% 的 CPU,進程 2 佔用了 50% 的 CPU(使用 htop 檢查)——這讓我感到驚訝...

兩個進程都是多執行緒的,並且單獨運行時會消耗 100% 的 CPU 所有核心。沒有其他資源(I/O、記憶體、頻寬...)可以影響此使用。

當我需要計算能力時,我不想手動停止/啟動任何進程(兩個進程必須一直運行);必須自動為進程 2 提供 100% 的 CPU。

我該做什麼來實現我的目標?謝謝。

答案1

感謝@ubfan1,我探索了不同的調度策略,這是迄今為止我取得的最佳結果:

  • 進程 1 正在使用 SCHED_BATCH 策略執行

  • 進程 2 正在使用 SCHED_RR 策略執行

結果:當兩個進程同時運行時: - 進程 1 給出了 ca。 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

相關內容