Memoria virtuale e addebito commessa


1

Ho letto molto sull'impegno e qualcosa mi sta ancora infastidendo. Sul mio mac (e probabilmente anche su Linux), qual è la relazione tra dimensione della VM e memoria Commit (Windows). Penso di aver compreso appieno il commit dopo alcuni test, ma in Windows non sembra che la quantità di memoria virtuale superi mai lo spazio di swap + ram. IN OSX (e Linux) la dimensione della VM sembra quasi superare la dimensione del mio hard disk! Immagino che includa la memoria condivisa più di una volta oppure include allocata ma non trattata o scritta nella memoria. Diciamo che faccio un malloc (2 GB) (ovviamente non in questo modo), è diverso dal scrivere effettivamente a quell'intero 2 GB.

Quindi questo mi porta alla mia domanda: che cosa esattamente misura la dimensione della VM in OSX e Linux. È un totale di tutte le chiamate malloc, ad esempio (o il totale possibile di VM, ad esempio, incluso praticamente 4 GB per ogni processo su una macchina a 64 bit), e come si confronta con Commit (limite, picco, utilizzo) su Windows? Windows non ti consente di allocare più del tuo limite swap + ram, come fanno OSX e Linux e perché?

Nelle immagini sottostanti puoi vedere che in windows swap + ram equals commit (2gb). In OSX la mia dimensione della VM è superiore a 200 GB su un hard disk di circa 200 GB.

Task Manager di Windows che mostra un massimo di 2 GB di commit (credo)

pannello di controllo di Windows che mostra 1024mb 1 (gb) di scambio più 1 (gb) di ram

gestore processi osx con dimensioni VM superiori a 200 GB

Risposte:


2

La dimensione della macchina virtuale è la quantità totale di spazio degli indirizzi utilizzata dal processo. Nessuno dei due sistemi operativi consente di superare la RAM + swap disponibile con la VM di cui è stato eseguito il backup , ma è possibile con la VM senza backup . In sostanza, la dimensione della macchina virtuale (specialmente sui sistemi operativi a 64 bit) è una misura insignificante. La memoria virtuale senza backup (memoria virtuale che non richiede e non può richiedere RAM o swap) è essenzialmente gratuita, quindi non c'è motivo di preoccuparsi di quanto viene utilizzata.

Su un sistema operativo a 64 bit, è possibile aprire un file da 2 GB di sola lettura e mappare l'intero file nello spazio degli indirizzi del processo. Ciò "consuma" 2 GB di VM, ma in realtà non richiede risorse significative. E poiché è un mapping di sola lettura, non può mai richiedere lo scambio.

Commit charge misura la memoria virtuale supportata, ovvero la memoria virtuale che alla fine potrebbe comportare il consumo di memoria fisica o spazio di paging / swap. Il sistema operativo non ha idea di quanta parte di questa memoria alla fine richiederà il backup, quindi generalmente non consentirà di assegnare più di RAM + swap. (Per quanto ne so, né Windows né OSX consentono il sovraccarico di memoria virtuale di backup. Linux lo fa.)


Per quanto riguarda la dimensione della VM in OSX, è solo la quantità di memoria virtuale riservata (come la memoria riservata in Windows) o è il totale di tutti gli spazi di memoria logica allocati a tutti i processi? Come i processi * estensione di vm mappata per processo? Sto rilevando una sottile differenza tra memoria riservata (virtuale) e memoria di backup dei file di paging. Qual è la differenza esatta?
rubixibuc,

Esiste una differenza tra memoria virtuale e memoria di backup dei file di paging. La differenza è che quando sono presenti come memoria fisica, potrebbe essere necessario scrivere la memoria di backup del file di paging nel file di paging prima che la pagina possa essere scartata. Ad esempio, un mapping di sola lettura di un file è memoria virtuale, ma non può mai essere necessario scriverlo nel file di paging (perché è già sul disco come un normale file). D'altra parte, la mallocmemoria normale , se modificata, dovrà essere scritta nel file di paging prima che le pagine possano essere sfrattate dalla memoria fisica.
David Schwartz,

Proprio così il mio piccolo cervello con comprensione Linux lo capisce, "commit charge" == "swap in use"?
Stu,

@Stu No. Commit charge è più simile alla RAM più swap che verrebbe riservato se l'overcommit fosse disabilitato. Oppure, per dirla in altro modo, la quantità massima di RAM + swap che potrebbe essere richiesta senza che il sistema operativo abbia l'opportunità di dire "no, non puoi averne di più". È come il saldo del conto, meno eventuali assegni scritti ma non ancora depositati.
David Schwartz,
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.