Как предотвратить пейджинг для одной программы/процесса?
У меня есть программа, которая требует много памяти, например, 2/3 всего физического барана. После некоторой рабочей среды моя операционная система начинает заменять программу на hdd. Но мне нужна программа, чтобы реагировать очень быстро все время, поэтому мне нужно предотвратить пейджинг для этого процесса.
Как вы можете предотвратить замену ОС на один процесс?
Спасибо за любую помощь!
Ответы
Ответ 1
В начале программы вызовите:
mlockall(MCL_CURRENT | MCL_FUTURE);
(Если у вас нет источника для программы, вам придется разгадать процесс с помощью ptrace
).
Помните, что это увеличит шансы на выделение памяти, вызванные сбоем процесса.
Ответ 2
Ну, там mlock для блокировки памяти (говоря ядро, что она не может быть заменена), но это означало для относительно небольших объема памяти и потребует модификации программы.
Другой вариант может заключаться в том, чтобы настроить "swappiness" Linux, т.е. свою тенденцию менять страницы. См. здесь для интересного обсуждения. Однако это невозможно для каждого процесса.
Я не знаю ни одного решения для каждого процесса для вашей проблемы.
Ответ 3
Используйте mmap() вместо malloc и используйте флаг MAP_LOCKED. (работает на Linux > 2.5.37)