In Linux, come è possibile azzerare le pagine di memoria liberate per ridurre le dimensioni delle istantanee VM ?Come azzerare la memoria non utilizzata per ridurre le dimensioni dell'istantanea VM
La memoria non azzerata viene memorizzata nell'istantanea anche se tale memoria è stata liberata e non viene più utilizzata. Ad esempio, le pagine di memoria liberati dalla cache file system con
sync && echo 3 > /proc/sys/vm/drop_caches
sono inutilmente immagazzinate nella snapshot perché non sono state azzerate.
Aggiornamento Una soluzione veramente orribile che sembra funzionare è quello di memoria memset malloc + in un ciclo fino a quando il killer OOM calci. Questo riduce la dimensione di uno snapshot VM ho testato da circa 800 MB a circa 400 MB. C'è una soluzione migliore?
(risposta eliminato poiché dopo la modifica, a quanto pare ho frainteso quello che si voleva davvero) – Damon
credo che questo non è ancora possibile. Linux ha una sola pagina COW zero che restituisce su una nuova allocazione e che copia sul primo accesso in scrittura (creando una pagina piena di zeri, ma tecnicamente non è più una pagina zero). Potresti quindi azzerare tutta la memoria fisica (in teoria) allocando una grande quantità di memoria e scrivendo ''\ 0'' all'inizio di ogni pagina, ma queste saranno in seguito pagine contenenti dati (zero, come succede), non zero pagine. E se li liberi di nuovo, saranno uguali alle pagine liberate non zero che avevi comunque - solo che contengono zero. – Damon
Sebbene si possa provare a fare ciò (allocare molta memoria e renderlo fisicamente azzerato), e quindi 'MADV_MERGEABLE' su tutto il lotto. Forse la fusione del kernel samepage farà il trucco. Si noti che non si tratta precisamente di un'operazione libera (CPU-wise). – Damon