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


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

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

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

3 16

3 ответа:

При запуске программы вызовите:

mlockall(MCL_CURRENT | MCL_FUTURE);

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

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

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

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

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

С помощью функции mmap() вместо malloc и использовать "с флагом map_locked" флаг. (работает на linux > 2.5.37)