Я запустил 4 процесса, выполняющих тяжелые вычисления. Машина имеет 4 полных ядра, и каждый процесс является однопоточным, поэтому они не конкурируют за ЦП. Однако я понял, что им требуется больше памяти, чем физически существует в этой системе (16 ГБ). Теперь их выделенное адресное пространство в сумме составляет около 20 ГБ, поэтому у каждого из них часть адресного пространства выгружена.
Итак, я решил приостановить один из этих процессов, и я хотел поместить его страницы памяти для подкачки, чтобы физическая память обслуживала только три других процесса. Я предполагаю, что это в конечном итоге произойдет, пока три активных процесса попытаются получить доступ к выгруженным страницам. Но я бы хотел сделать так, чтобы вычислениям не приходилось ждать ввода-вывода.
Мои вопросы:
Можно ли заставить память приостановленного процесса перейти на свопинг? (чтобы не было ввода-вывода, когда живые процессы будут выполнять новые распределения)
Можно ли заставить память живого процесса вернуться в ОЗУ?
Это Debian SID.
Вы можете приостановить один из процессов, например, подключив к процессу отладчик.
gdb process_executable process_pid
а все остальное сделает планировщик linux. Когда первые три процесса завершатся, вы можете просто отсоединить отладчик, чтобы возобновить четвертый процесс.
Вы можете достичь той же цели, просто отправив SIGSTOP процессу:
kill -stop process_pid
И
kill -cont process_pid
Чтобы возобновить его, когда ресурсы станут доступны. В будущем вы можете рассмотреть возможность использования некоторого планировщика заданий, такого как крутящий момент, для полуавтоматического планирования процессов в соответствии с их требованиями к ресурсам.
Изменить: я не обратил внимания на исходный вопрос и пропустил, что приостановка процесса не является проблемой. Проблема в том, что простое перемещение страниц для обмена и обратно занимает много времени.