Cosa farà il sistema con il restante 20%?
Il kernel utilizzerà la memoria fisica rimanente per i propri scopi (strutture interne, tabelle, buffer, cache, qualunque cosa). L'impostazione dell'overcommit della memoria gestisce le prenotazioni della memoria virtuale dell'applicazione userland, il kernel non utilizza la memoria virtuale ma quella fisica.
Perché questo parametro è obbligatorio in primo luogo?
Il overcommit_ratio
Il parametro è una scelta di implementazione progettata per impedire alle applicazioni di riservare più memoria virtuale di quella che sarà ragionevolmente disponibile per loro in futuro, ovvero quando accedono effettivamente alla memoria (o almeno provano a farlo).
Impostazione overcommit_ratio
al 50% è stato considerato un valore predefinito ragionevole dagli sviluppatori del kernel Linux. Presuppone che il kernel non avrà mai bisogno di utilizzare più del 50% della RAM fisica. Il tuo chilometraggio può variare, il motivo per cui è sintonizzabile.
Perché non dovrei impostarlo sempre al 100%?
L'impostazione al 100% (o qualsiasi valore "troppo alto") non disabilita in modo affidabile l'overcommit perché non puoi presumere che il kernel utilizzerà lo 0% (o troppo poco) di RAM.
Non impedirà alle applicazioni di bloccarsi in quanto il kernel potrebbe comunque prevalere su tutta la memoria fisica che richiede.
L'impostazione del rapporto su 100% non riserverà spazio per pagine con file di backup o allocazioni all'interno del kernel come codice del kernel, buffer di rete, ecc.
Le strutture interne al kernel verranno allocate a prescindere, causando un overcommit. Sono generalmente limitati individualmente (ad esempio, c'è un'impostazione per i buffer di rete). Non credo che ci sia un limite complessivo del 50%, anche se un limite complessivo è qualcosa su cui si è lavorato allo scopo di ospitare i container.
Le pagine supportate da file sono quelle da cui di solito esegui il codice dello spazio utente, quindi hai bisogno di spazio anche per quello.