
Я использую базовый сервер 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% ЦП
Если кому-то интересно, прочтите это: