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

StackOverflow https://stackoverflow.com/questions/2360116

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

mlockall(MCL_CURRENT | MCL_FUTURE);

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top