Ответ 1
Я предлагаю ничего не менять, потому что алгоритмы кэширования LRU/MRU, поставляемые с ядром, очень эффективны. Гораздо больше, чем то, что вы можете настроить.
Во-первых, ядро не поддерживает основной список всех файлов в кеше страниц, поскольку оно не нуждается в такой информации. Вместо этого, учитывая индекс, вы можете искать связанные страницы кэша страниц и наоборот.
каждый кэш страницы struct page, page_mapping() будет возвращать struct address_space, принадлежащую хосту члена struct address_space, идентифицирует владелец struct inode, и оттуда вы можете получить номер и устройство inode.
Когда вы спрашиваете о программе, вы можете использовать cgroups:
Создайте cgroup с именем наподобие group1 с ограничением памяти (например, 50 ГБ, поддерживаются другие ограничения, например, CPU, например, также упоминается CPU):
cgcreate -g memory,cpu:group1
cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) group1
Затем, если ваше приложение уже запущено, перенесите программу в эту группу:
cgclassify -g memory,cpu:group1 $(pidof your program)
Или выполните свою программу в этой группе:
cgexec -g memory,cpu:group1 your_app_name
Как очистить буфер/кеш страницы (дисковый кеш) под Linux
Что такое кэш памяти
Чтобы ускорить выполнение операций и уменьшить количество дисковых операций ввода/вывода, ядро обычно выполняет такое же кэширование
Как очистить кэш памяти с помощью /proc/sys/vm/drop_caches
1. Чтобы очистить только PageCache, запустите:
# sync; echo 1 > /proc/sys/vm/drop_caches
2. Чтобы очистить dentries (также называемый кешем каталогов) и выполнить inode:
# sync; echo 2 > /proc/sys/vm/drop_caches
3. Чтобы очистить PageCache, запустите dentries и inode:
# sync; echo 3 > /proc/sys/vm/drop_caches
Примечание: - Начиная с команды синхронизации, как показано в приведенных выше 3 командах, необязательно. Команда sync позволяет ядру записывать на диск как можно больше грязных страниц кэша (чтобы максимизировать количество страниц кэша данных, которые можно удалить)
Кэш страницы - это память, хранящаяся после чтения файлов. Ядро Linux предпочитает хранить неиспользуемый кеш страниц при условии, что файлы, которые будут прочитаны один раз, скорее всего, будут снова прочитаны в ближайшем будущем
dentry и inode_cache - это память, которая хранится после чтения атрибутов каталога/файла, таких как open() и stat(). dentry распространен во всех файловых системах, но inode_cache для каждой файловой системы. Ядро Linux предпочитает хранить эту информацию, предполагая, что она снова понадобится в ближайшем будущем, поэтому избегая дискового ввода-вывода.