Oltre alle altre risposte, è possibile configurare Linux per richiedere il backup di qualsiasi memoria allocata, anche se i programmi non la utilizzano.
Tuttavia, il sovraccarico della memoria e il timore del killer OOM non sono parti necessarie dell'esperienza Linux. Semplicemente impostando il parametro sysctl vm / overcommit_memory su 2 si disattiva il comportamento di overcommit e si tiene a bada il killer OOM per sempre. La maggior parte dei sistemi moderni dovrebbe avere spazio su disco sufficiente per fornire un ampio file di scambio per la maggior parte delle situazioni. Piuttosto che cercare di evitare che i processi degli animali domestici vengano uccisi quando la memoria sovraccarica si esaurisce, potrebbe essere più semplice evitare completamente la situazione. [ Respiro dal killer OOM ]
Se un programma alloca memoria, il kernel può semplicemente contrassegnare più pagine di scambio come impegnate. Questa indicazione è memorizzata nel gestore della memoria del kernel, lo spazio su disco effettivo non è stato ancora toccato. Fino a quando quella memoria non viene utilizzata, nulla deve essere scambiato dentro e fuori. Se non vengono mai utilizzati, l'utilizzo degli swap fluttuerà senza influire sulle prestazioni.
Poiché i processi sono presentati con il loro spazio di indirizzi o "view" (questo è il modo in cui lo swap funziona in primo luogo), il kernel ha molta libertà nel modo in cui lo gestisce. Utilizzando un esempio fork anche dall'articolo collegato sopra, poiché è molto più probabile che abbia pagine di memoria condivise rispetto ad allocare di recente una grande quantità di memoria inutilizzata, la memoria può essere allocata copia su scrittura, aumentando il conteggio degli usi di swap. Quando viene effettivamente scritto (che potrebbe non accadere), è possibile sostituire "commit swap" con qualsiasi RAM inutilizzata (aumentando quindi l'utilizzo della RAM e diminuendo l'uso dello swap). Immagina un processo con 500 MB allocati che eseguono il fork su una macchina con tutta o quasi tutta la RAM in uso. Se ci sono 500 MB disponibili in swap (e lo spazio su disco è economico, quanto è grande l'1% delle unità TB di oggi?: P), non è necessario copiare memoria (ancora,
In tal modo si evita la possibilità del killer OOM, ed è molto più semplice progettare la maggior parte dei software partendo dal presupposto che le allocazioni di memoria (incluse allocazioni "implicite" attraverso qualcosa come fork) o abbiano successo o falliscano immediatamente, con la realizzazione pratica che se la memoria deve essere scambiato quindi potrebbe influire sulle prestazioni. Tale impatto è quasi sempre lieve, ma nel peggiore dei casi porta al blocco dello swap (a volte preferibile comunque a un crash del kernel o un killer OOM).
Sebbene non conosca i dettagli esatti di come funziona il gestore della memoria Linux, questa risposta è la mia comprensione generalizzata e ciò che ricordo di aver letto negli anni. Ho provato a modificare nuovamente questa risposta, quindi è necessaria una comprensione minima della progettazione del sistema operativo (è considerevolmente complessa e non qualcosa che mi interessa terribilmente), ma sembra vagare un po '; per favore fatemi sapere se vedete come potrebbe essere migliorato. D'altra parte, potrebbe non essere una domanda così imbarazzante.