Два процесса выполняют обширные вычисления. Я хочу, чтобы один из них получил ~100% процессорного времени. Как это сделать?

Два процесса выполняют обширные вычисления. Я хочу, чтобы один из них получил ~100% процессорного времени. Как это сделать?

Я использую базовый сервер Ubuntu с двумя процессами: - процесс 1 - выполняет вычисления на 100% времени безотказной работы, и который я использую для обмена вычислительной мощностью с сообществом (он работает @prio 19) - процесс 2 - выполняет вычисления в течение 5-10 минут, время от времени, и который я использую для вычислений для себя (он работает @prio -19)

Я хочу, чтобы процессу 2 было предоставлено 100% вычислительной мощности (процесс 1 в этот момент должен получить около 0% ресурсов ЦП).

Я пробовал использовать nice / renice, и процессу 1 дается приоритет 19 (минимально возможный), а процессу 2 дается приоритет -19 (максимально возможный). Но лучшее, что я получаю, это 50% CPU для процесса 1 и 50% CPU для процесса 2 (проверено с помощью htop) - что меня немного удивило...

Оба процесса многопоточны и - при запуске по отдельности - потребляют 100% всех ядер ЦП. Никакие другие ресурсы (ввод-вывод, память, пропускная способность, ...) не могут повлиять на это использование.

Я не хочу вручную останавливать/запускать какой-либо процесс, когда мне нужна вычислительная мощность (оба процесса должны работать постоянно); 100% ресурсов ЦП для процесса 2 должны предоставляться автоматически.

Что мне нужно сделать, чтобы достичь своей цели? Спасибо.

решение1

Благодаря @ubfan1 я изучил различные стратегии планирования, и вот лучший результат, которого мне удалось достичь на данный момент:

  • процесс 1 выполняется с политикой SCHED_BATCH

  • процесс 2 выполняется с политикой SCHED_RR

результаты: когда оба процесса выполняются одновременно: - процесс 1 загружает около 5% ЦП - процесс 2 загружает около 95% ЦП

и когда только процесс 1 выполняет вычисления (процесс 2 ждет моего ввода, чтобы начать вычисления) - процесс 1 использует 100% ЦП

Если кому-то интересно, прочтите это:

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

Связанный контент