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

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

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

Спасибо за любую справку!

16
задан jww 14 September 2014 в 05:38
поделиться

3 ответа

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

mlockall(MCL_CURRENT | MCL_FUTURE);

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

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

8
ответ дан 30 November 2019 в 22:31
поделиться

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

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

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

6
ответ дан 30 November 2019 в 22:31
поделиться

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

4
ответ дан 30 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: