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

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

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

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

Ответы [ 3 ]

8 голосов
/ 02 марта 2010

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

mlockall(MCL_CURRENT | MCL_FUTURE);

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

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

6 голосов
/ 02 марта 2010

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

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

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

4 голосов
/ 02 марта 2010

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

...