C'è un modo per dire al kernel Linux di usare solo una certa percentuale di memoria per la cache del buffer? So che /proc/sys/vm/drop_caches
può essere utilizzato per cancellare temporaneamente la cache, ma esiste qualche impostazione permanente che ne impedisce la crescita oltre il 50% della memoria principale?
Il motivo per cui voglio fare questo è che ho un server che esegue un Ceph OSD che serve costantemente dati dal disco e riesce a utilizzare l'intera memoria fisica come cache buffer in poche ore. Allo stesso tempo, ho bisogno di eseguire applicazioni che alloceranno una grande quantità (diversi 10 GB di memoria) di memoria fisica. Contrariamente alla credenza popolare (consultare i consigli forniti su quasi tutte le domande relative alla cache del buffer), la liberazione automatica della memoria eliminando le voci della cache pulita non è istantanea: l'avvio della mia applicazione può richiedere fino a un minuto quando la cache del buffer è piena ( *), mentre dopo aver cancellato la cache (usando echo 3 > /proc/sys/vm/drop_caches
) la stessa applicazione si avvia quasi istantaneamente.
(*) Durante questo minuto di avvio, l'applicazione presenta un errore nella nuova memoria ma trascorre il 100% del suo tempo nel kernel, secondo Vtune in una funzione chiamata pageblock_pfn_to_page
. Questa funzione sembra essere correlata alla compattazione della memoria necessaria per trovare pagine enormi, il che mi porta a credere che il problema sia effettivamente la frammentazione.