Dove si trova la memoria rimanente di vm.overcommit_ratio?


10

Se disabilito il sovraccarico della memoria impostando vm.overcommit_memorysu 2, per impostazione predefinita il sistema consentirà di allocare la memoria fino alla dimensione di scambio + 50% della memoria fisica, come spiegato qui .

Posso cambiare il rapporto modificando il vm.overcommit_ratioparametro. Diciamo che l'ho impostato sull'80%, quindi può essere utilizzato l'80% della memoria fisica.

La mia domanda è:

  • cosa farà il sistema con il restante 20%?
  • perché questo parametro è richiesto in primo luogo?
  • perché non dovrei sempre impostarlo al 100%?

Risposte:


6

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 del sovraccarico di memoria gestisce le riserve di memoria virtuale dell'applicazione userland, il kernel non utilizza memoria virtuale ma fisica.

Perché questo parametro è richiesto in primo luogo?

Il overcommit_ratioparametro è una scelta di implementazione progettata per impedire alle applicazioni di riservare più memoria virtuale rispetto a ciò che sarà ragionevolmente disponibile per loro in futuro, ovvero quando accedono effettivamente alla memoria (o almeno provano a).

L'impostazione overcommit_ratiosu 50% è stata considerata un valore predefinito ragionevole dagli sviluppatori del kernel Linux. Presuppone che il kernel non dovrà mai usare più del 50% della RAM fisica. Il tuo chilometraggio può variare, il motivo per cui è sintonizzabile.

Perché non dovrei sempre impostarlo al 100%?

Impostarlo al 100% (o qualsiasi valore "troppo alto") non disabilita in modo affidabile il sovraccarico perché non si può presumere che il kernel userà lo 0% (o troppo poco) di RAM.

Non impedirà il crash delle applicazioni in quanto il kernel potrebbe comunque anticipare tutta la memoria fisica richiesta.


Se il kernel può comunque occupare tutta la memoria di cui ha bisogno, a che serve esporre questo parametro (o persino crearlo)?
Dan Tumaykin,

Esiste un documento ufficiale in cui tali parametri sono spiegati in dettaglio? Oltre a kernel.org/doc/Documentation/vm/overcommit-accounting - manca qualsiasi riferimento alla memoria del kernel.
Dan Tumaykin l'

1
Non ho ancora trovato documentazione che spieghi con abbastanza dettagli di cosa si tiene esattamente conto quando si fa riferimento a "commit dello spazio degli indirizzi totale". Il fatto che il documento da te fornito fornisca un link agli stati "nella maggior parte dei casi ciò significa che un processo non verrà ucciso ..." è comunque sufficiente per confermare che un po 'di memoria può essere usata altrove, e il consumatore ovvio per questa memoria è il kernel.
jlliagre,

2

L'impostazione del rapporto su 100% non riserverà spazio per le pagine supportate da file o allocazioni nel kernel come codice del kernel, buffer di rete, ecc.

Le strutture all'interno del kernel verranno allocate indipendentemente, causando un sovraccarico. Sono generalmente limitati individualmente (ad es. 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 è stato lavorato allo scopo di ospitare container.

Le pagine supportate da file sono da dove di solito esegui il codice dello spazio utente, quindi hai bisogno di spazio anche per quello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.