Назад | Перейти на главную страницу

Принудительно отменять замену страниц процесса

Я запустил 4 процесса, выполняющих тяжелые вычисления. Машина имеет 4 полных ядра, и каждый процесс является однопоточным, поэтому они не конкурируют за ЦП. Однако я понял, что им требуется больше памяти, чем физически существует в этой системе (16 ГБ). Теперь их выделенное адресное пространство в сумме составляет около 20 ГБ, поэтому у каждого из них часть адресного пространства выгружена.

Итак, я решил приостановить один из этих процессов, и я хотел поместить его страницы памяти для подкачки, чтобы физическая память обслуживала только три других процесса. Я предполагаю, что это в конечном итоге произойдет, пока три активных процесса попытаются получить доступ к выгруженным страницам. Но я бы хотел сделать так, чтобы вычислениям не приходилось ждать ввода-вывода.

Мои вопросы:

  1. Можно ли заставить память приостановленного процесса перейти на свопинг? (чтобы не было ввода-вывода, когда живые процессы будут выполнять новые распределения)

  2. Можно ли заставить память живого процесса вернуться в ОЗУ?

Это Debian SID.

Вы можете приостановить один из процессов, например, подключив к процессу отладчик.

 gdb process_executable process_pid

а все остальное сделает планировщик linux. Когда первые три процесса завершатся, вы можете просто отсоединить отладчик, чтобы возобновить четвертый процесс.

Вы можете достичь той же цели, просто отправив SIGSTOP процессу:

 kill -stop process_pid

И

 kill -cont process_pid

Чтобы возобновить его, когда ресурсы станут доступны. В будущем вы можете рассмотреть возможность использования некоторого планировщика заданий, такого как крутящий момент, для полуавтоматического планирования процессов в соответствии с их требованиями к ресурсам.

Изменить: я не обратил внимания на исходный вопрос и пропустил, что приостановка процесса не является проблемой. Проблема в том, что простое перемещение страниц для обмена и обратно занимает много времени.