Чи є спосіб сказати ядро Linux використовувати лише певний відсоток пам'яті для буфера кешу? Я знаю, що /proc/sys/vm/drop_caches
можна тимчасово очистити кеш, але чи є якісь постійні параметри, які не дають йому зрости більше ніж, наприклад, 50% основної пам'яті?
Причиною, для якої я хочу це зробити, є те, що у мене є сервер, на якому працює Ceph OSD, який постійно обслуговує дані з диска і встигає протягом декількох годин використовувати всю фізичну пам'ять як буфер кешу. У той же час мені потрібно запускати програми, які виділять велику кількість (кілька 10s ГБ) фізичної пам'яті. Всупереч поширеній думці (див. Поради щодо майже всіх питань, що стосуються кеш-пам'яті буфера), автоматичне звільнення пам’яті шляхом викидання чистих записів кешу не є миттєвим: запуск моєї програми може зайняти до хвилини, коли кеш-пам'ять буфера заповнена ( *), тоді як після очищення кеша (використання echo 3 > /proc/sys/vm/drop_caches
) той самий додаток запускається майже миттєво.
(*) Протягом цієї хвилини часу запуску програма несправно працює в новій пам'яті, але витрачає 100% свого часу на ядро, згідно з даними Vtune у функції, що називається pageblock_pfn_to_page
. Здається, ця функція пов'язана з ущільненням пам'яті, необхідним для пошуку величезних сторінок, що призводить мене до думки, що насправді є проблема фрагментації.