Есть ли способ указать ядру Linux использовать только определенный процент памяти для буферного кэша? Я знаю, что /proc/sys/vm/drop_caches
можно использовать для временной очистки кэша, но есть ли какие-либо постоянные настройки, которые препятствуют его росту до, например, более 50% основной памяти?
Причина, по которой я хочу это сделать, заключается в том, что у меня есть сервер с OSD Ceph, который постоянно обслуживает данные с диска и в течение нескольких часов может использовать всю физическую память в качестве буферного кеша. В то же время мне нужно запускать приложения, которые будут выделять большой объем (несколько десятков ГБ) физической памяти. Вопреки распространенному мнению (см. Советы, данные почти по всем вопросам, касающимся кеш-буфера), автоматическое освобождение памяти путем удаления записей чистого кеша не происходит мгновенно: запуск моего приложения может занять до минуты, когда кеш-буфер заполнен ( *), хотя после очистки кеша (использования echo 3 > /proc/sys/vm/drop_caches
) одно и то же приложение запускается практически мгновенно.
(*) В течение этой минуты запуска приложения происходит сбой в новой памяти, но он тратит 100% своего времени в ядре, согласно Vtune в вызываемой функции pageblock_pfn_to_page
. Эта функция, похоже, связана с уплотнением памяти, необходимым для поиска больших страниц, что заставляет меня поверить, что проблема заключается в фрагментации.