Как предотвратить пейджинг для одной программы / процесса?

У меня есть программа, которая требует много памяти, как 2/3 всего физического оперативной памяти. После некоторого времени выполнения моя операционная система начинает менять программу на жесткий диск. Но мне нужно, чтобы программа все время реагировала очень быстро, поэтому мне нужно предотвратить подкачку для этого процесса.

Как вы можете помешать ОС поменять местами один процесс?

Спасибо за любую помощь!

3 ответа

Решение

В начале программы позвоните:

mlockall(MCL_CURRENT | MCL_FUTURE);

(Если у вас нет источника для программы, вам придется испортить процесс с ptrace сделать это).

Имейте в виду, что это увеличит шансы выделения памяти из-за сбоя процесса.

Ну, есть блокировка памяти для блокировки (сообщающая ядру, что ее нельзя заменить), но она предназначена для относительно небольших объемов памяти и требует модификации программы.

Другой вариант может заключаться в том, чтобы отрегулировать "подкачку" Linux, то есть его тенденцию менять страницы. Смотрите здесь для интересного обсуждения. Однако это невозможно для каждого процесса.

Я не знаю ни одного решения вашей проблемы для каждого процесса.

Используйте mmap() вместо malloc и используйте флаг "MAP_LOCKED". (работает на Linux > 2.5.37)

Другие вопросы по тегам