Skip to content

Che cosa sono la "memoria impegnata", la "cache", il "pool impaginato" e il "pool non impaginato" e in che modo sono diversi dalla "memoria in uso"?

Il nostro team di redattori cerca da molto tempo la risposta alle tue domande, ti forniamo le soluzioni quindi vogliamo che tu sia di grande supporto.

Soluzione:

Risposta a Q1:

  • In uso si riferisce alla quantità effettiva di memoria fisica utilizzata.
  • Il secondo numero nella memoria impegnata si riferisce al limite di commit che è la quantità di memoria fisica + la dimensione del file di pagina.
  • Il primo numero nella memoria impegnata si riferisce alla quantità di memoria che le applicazioni hanno richiesto di utilizzare.
    • Quando un'applicazione richiede per la prima volta di utilizzare una certa quantità di memoria, Windows si assicura che possa essere inserita da qualche parte, nel pagefile o nella memoria. Questo non significa che la quantità di memoria occupi la memoria fisica effettiva o lo spazio del pagefile. Significa solo che Windows riserva questo spazio nel limite di commit totale, nel caso in cui venga utilizzato. La maggior parte della memoria richiesta viene utilizzata, ma non tutta.
  • In cache Si riferisce alla quantità di memoria fisica utilizzata per accelerare l'accesso al file system. Sui sistemi operativi client, fino al 10% della memoria viene utilizzato per bufferizzare le scritture ("soglia della pagina sporca").
  • Pool a paginazione è la quantità di memoria del kernel e dei driver di dispositivo che può essere riversata dalla memoria fisica nel file di pagina lento (sorgente).
  • Pool non paginato è la quantità di memoria del kernel e del driver di periferica che deve rimanere nella memoria fisica. Questo tipo di memoria non può essere scaricata sul disco.

Risposta alla domanda 2:

In parole povere, in Windows la "memoria" può essere supportata dalla RAM fisica o da un file di pagina (su disco). Il file di pagina viene utilizzato per molti scopi, tra cui liberare la RAM fisica per i programmi a cui si accede di rado. È più lento di ordini di grandezza rispetto alla RAM fisica perché è supportato da un disco, in rotazione o meno.

Se il sistema non dispone di una memoria sufficiente, è possibile che le applicazioni utilizzate attivamente si riversino sul disco e che il sistema rallenti drasticamente.

Come si può notare dalla risposta 1, non è affatto facile determinare se si dispone di memoria sufficiente o meno da questi numeri.

Suggerisco il seguente metodo per determinare se la memoria è sufficiente o meno:

  1. Avviare Resource Monitor (Vincere+R e digitare perfmon /res)
  2. Utilizzate il vostro portatile come fareste normalmente.
  3. Quando si nota un rallentamento, tornare al monitor delle risorse e vedere il grafico della memoria sul lato destro. Il termine hard fault si riferisce approssimativamente al numero di volte in cui è stato necessario accedere al file di pagina per accedere alla memoria. Il numero di hard fault dovrebbe essere prossimo a 0. In caso contrario, la RAM non è sufficiente per qualsiasi cosa si stia facendo.

Ci sono un paio di rimedi:

  1. Chiudere le applicazioni o le schede inutilizzate prima che il sistema diventi lento.
  2. Aggiornare la RAM, se possibile.

Prendendo questi non nell'ordine richiesto...

( Nota: Questo è ancora in corso. Probabilmente lo modificherò e lo modificherò nei prossimi giorni. E aggiungerò le schermate).

( Nota seconda: mi rendo conto che è lungo. È il massimo della brevità che posso ottenere cercando almeno di rispondere alla maggior parte delle domande che comunemente sorgono da risposte più brevi. Per fare un confronto, il capitolo sulla gestione della memoria di Internazioni di Windows è di circa 200 pagine, abbastanza da costituire da solo un libro di dimensioni decenti. Se volete davvero imparare queste cose, c'è un altro libro (che vi consiglio) intitolato Cosa rende la pagina? che entra ancora più nel dettaglio. Sono poco più di 600 pagine. Come ho detto sopra, probabilmente lo modificherò nei prossimi giorni, ma non aspettatevi che diventi più corto! )

In uso

In uso è la quantità di memoria fisica (RAM) che corrisponde alle pagine virtuali a cui si può accedere senza incorrere in un page fault.

Attenzione: Non è la quantità di memoria virtuale a cui si può accedere senza incorrere in un errore di pagina! Si tratta di un numero più grande. Molte pagine virtuali diverse possono essere mappate sulla stessa pagina fisica.

Premessa: Ogni pagina virtuale può essere "valida", il che significa che occupa memoria fisica e che la sua voce nella tabella delle pagine ha il bit "valido" impostato. In alternativa, il bit di validità può essere azzerato, nel qual caso il riferimento alla pagina virtuale provocherà un errore di pagina. Il sistema operativo deve quindi risolvere l'errore. Si dice quindi che la pagina è stata "inserita" nella RAM. Si pensa comunemente che questo significhi "leggere la pagina dal disco", ma spesso non è così (dettagli in seguito). Un altro termine che si sente usare per una pagina valida è "residente".

Il maggior contributo a In uso è costituito dalle pagine che compongono la sezione set di lavoro dei processi e del sistema operativo, più il non gestiti (che di solito è piuttosto piccolo, qualche centinaio di MB o giù di lì - ne parlerò più avanti). L'insieme di lavoro di un processo è semplicemente un elenco delle pagine fisiche che sono attualmente "residenti" per quel processo. Ogni processo ha il proprio insieme di lavoro.

Nota: Le pagine fisiche della RAM possono trovarsi contemporaneamente negli insiemi di lavoro di più processi. Ciò significa che sommando le dimensioni degli insiemi di lavoro di tutti i processi si otterrà un numero maggiore della quantità effettiva di RAM utilizzata. Il In uso tiene conto correttamente delle pagine condivise, cioè non le conta due o più volte.

Attenzione: Il termine In uso può essere fuorviante, perché anche le pagine di RAM negli elenchi Standby e Modified sono probabilmente "in uso", anche se non è possibile accedervi senza errori di pagina e non sono in nessun set di lavoro. Questi due elenchi saranno spiegati più avanti.

n.b.: In questa discussione si parlerà molto di processi e dei loro insiemi di lavoro. Anche il codice e i dati in modalità kernel del sistema operativo Windows vivono nella memoria virtuale e gran parte di essi sono impaginabili. In altre parole, non è necessario che rimangano sempre nella RAM, così come non lo sono il codice e i dati delle applicazioni. Sebbene non sia un processo vero e proprio (a parte il cosiddetto processo "System"), esiste un set di lavoro che tiene traccia delle pagine "valide" per il sistema operativo o, più precisamente, per lo spazio degli indirizzi del kernel. In realtà, a partire da Windows 7, l'insieme di lavoro del sistema è stato suddiviso in quattro insiemi di lavoro (per vari tipi di codice e dati impaginabili), soprattutto per motivi di prestazioni. Quasi tutto ciò di cui parlo riguardo agli insiemi di lavoro si applica agli insiemi di lavoro del sistema operativo e a quelli dei processi, ma non aggiungerò "o uno degli insiemi di lavoro del sistema operativo" ogni volta che parlerò di un insieme di lavoro di un processo.

Disponibile

Questo non è stato chiesto, ma è importante. Disponibile è tutta la RAM che può essere assegnata a un nuovo utilizzo (ad esempio a un processo diverso da quello che la stava usando in precedenza, o anche a una nuova pagina virtuale all'interno dello stesso processo) senza rimuoverla da un insieme di lavoro e senza salvarne il contenuto da qualche parte. (Perché il contenuto è già salvato da qualche parte, se è importante).

Disponibile non appare nella scheda Prestazioni di Task Manager, riquadro Memoria. È visibile nella scheda Memoria di Resource Monitor. È la somma degli elenchi delle pagine Standby, Libere e Zero. I dettagli su questi ultimi sono in arrivo.

In cache

Il In cache nella scheda Prestazioni di Task Manager è il totale dei seguenti tre utilizzi della RAM. Si tratta di un conteggio della RAM, non della memoria virtuale.

In cache parte 1: la Elenco delle pagine in standby (incluso SuperFetch)

È visibile nella scheda "Memoria" di "Monitor risorse". Prima di Windows Vista veniva utilizzata esclusivamente come "cache di pagina": Le pagine di RAM che vengono eliminate dagli insiemi di lavoro (dopo di che il riferimento ad esse incorrerebbe in un pagefault) vengono prima inserite nell'elenco delle pagine di standby. Da lì possono essere riassegnate ad altri usi ("repurposing"). Ma se il processo originale fa riferimento a una pagina dell'SPL prima che ciò avvenga, la pagina può essere ripristinata nel suo set di lavoro originale (cioè può essere "resa valida") senza doverla leggere dal disco. L'SPL costituisce quindi una cache first-in, first-out di tutto il sistema per le pagine che potrebbero essere necessarie a breve. (A differenza degli insiemi di lavoro, che sono per processo; le pagine vengono eliminate dagli insiemi di lavoro in base all'utilizzo più recente, non FIFO).

Tutto ciò è ancora valido. Ma da Vista in poi, alcune delle pagine dell'SPL possono essere riproposte per essere utilizzate da SuperFetch. SuperFetch è un meccanismo di cache dei file proattivo e di sola lettura che mantiene una cronologia dei file a cui si accede spesso e cerca di accelerare le cose leggendo tali file nella RAM prima che vengano effettivamente richiesti.

L'aspetto intelligente di SuperFetch è che le pagine utilizzate da SuperFetch non vengono rimosse dall'elenco delle pagine in attesa e quindi possono essere riutilizzate in breve tempo come qualsiasi altra cosa presente nell'SPL. E sono ancora conteggiate come parte di In cache. E come parte di Disponibile. Quindi SuperFetch non "usa" davvero la RAM! O almeno, non toglie nulla a "Disponibile", né contribuisce a "In uso".

SuperFetch è disattivato per impostazione predefinita sui sistemi con un'unità SSD per il disco del sistema operativo. L'elenco Standby viene ancora utilizzato come descritto qui, come cache di pagina.

L'elenco di pagine in standby fa parte della RAM che viene segnalata come Disponibile, il che significa che tutte le sue pagine possono essere riutilizzate per qualsiasi altra cosa in qualsiasi momento, anche quelle utilizzate da SuperFetch. È non parte di In uso anche se viene utilizzato. Sicuramente SuperFetch lo sta usando! Viene utilizzato anche ogni volta che un errore di pagina morbido viene risolto all'SPL. Tutto ciò che sto dicendo è che affermare che In uso sia la quantità di RAM "utilizzata" è, nella migliore delle ipotesi, fuorviante. Microsoft avrebbe dovuto scegliere un termine diverso per In uso.

In cache parte 2: il Elenco delle pagine modificate

A partire da Windows 8 e successivi, l'opzione Cached include anche le pagine fisiche che si trovano nella cartella Elenco pagine modificate. (L'MPL esiste da sempre; la novità è che viene conteggiata come parte di Cache.) Come l'SPL, la dimensione dell'MPL può essere visualizzata nella scheda Memoria di Resource Monitor, anche se di solito dovrebbe essere molto piccola o nulla.

L'MPL è come l'SPL, ma viene utilizzato per le pagine il cui contenuto è stato modificato mentre erano residenti. (Quando vengono rimosse dal loro insieme di lavoro, tali pagine vengono spostate nell'MPL anziché nell'SPL. I thread "Modified page writer" nel processo "System" si svegliano periodicamente, copiano il contenuto di queste pagine nei rispettivi backing store (il file di pagina o, per le pagine supportate da file, i rispettivi file) e quindi le spostano nell'elenco delle pagine in standby, a quel punto diventano parte di Disponibile e vengono trattate come se fossero state inserite nell'SPL. Non facevano parte di Disponibile mentre si trovavano nell'MPL, perché non possono essere riutilizzati per qualcos'altro prima che il loro contenuto sia salvato da qualche parte.

L'MPL non viene conteggiato come parte di In uso né.

Si noti che se si è (stupidamente e in barba ai buoni consigli) disabilitato il pagefile, il sistema non sarà mai in grado di scrivere le pagine modificate supportate dal pagefile. Il solito sintomo è un MPL assurdamente grande, che può causare carenza di RAM disponibile e quindi "page thrashing", in cui il sistema operativo spende più tempo a copiare pagine dentro e fuori la RAM che a fare il lavoro che si vuole fare.

La funzione "Memoria compressa" di Windows 10 ha modificato in qualche modo la parte di "scrittura nel pagefile"; non mi soffermerò su questo aspetto perché non influisce sui contatori di cui stiamo parlando.

In cache parte 3: il File System Cache

  • AGGIORNAMENTO: A un certo punto, durante le numerose versioni di Windows 10, o forse già da Windows 8, questo elemento non fa più parte del Task Manager Cache di Task Manager. Ma esiste ancora e il contatore PerfMon che ho menzionato è ancora presente e attivo. La dimensione residente della cache del file system è ancora inclusa in In uso. Devo fare delle prove per vedere esattamente quando è stato cambiato.

o almeno la porzione "residente" della Cache del File System. Ancora una volta, "residente" significa che è la porzione in-RAM, in un set di lavoro, di un'allocazione virtuale più grande.

Ehi, non abbiamo già parlato di una cache? "SuperFetch"? Sì, ma questa non è la stessa cache di SuperFetch. A differenza di SuperFetch, la cache del file system è una cache reattiva (mai predittiva), cioè non memorizza nulla finché non viene effettivamente utilizzato, quindi viene memorizzato per un rapido utilizzo futuro (all'interno della stessa istanza del sistema operativo).

La cache dei file ha anche un ruolo vitale nel supportare l'accesso ai file su confini non allineati ai settori. Se si apre un file con l'opzione "no caching", tutte le letture e le scritture devono essere in multipli della dimensione del settore dell'unità e devono iniziare sui confini del settore. La cache del file consente di leggere e scrivere solo un byte alla volta (almeno per quanto riguarda le chiamate API).

Nelle versioni precedenti di Windows la parte residente della cache dei file faceva parte dell'insieme di lavoro del sistema e il suo contributo all'insieme di lavoro del sistema poteva essere rilevato nel contatore PerfMon Memory | System Cache Resident Bytes. A partire da Windows 7 e successivi, l'insieme di lavoro del sistema è stato suddiviso in quattro insiemi di lavoro separati, uno dei quali è occupato dalla cache dei file, e lo stesso contatore riflette ancora la sua dimensione residente. In ogni caso, la porzione residente della cache del file system è inclusa in "in uso" (perché è un working set).

  • n.b.: il contatore "in cache" del Task Manager non ha nulla a che fare con le cache interne della CPU (L1, L2, ecc.). Queste cache esistono, ma Windows non le gestisce e non si riflettono in nessuno dei contatori di gestione della memoria del sistema operativo: non "totale", non "in uso", certamente non "in cache".

I pool Nonpaged e Paged

Il Pagato e Non a paginazione I contatori forniscono le dimensioni virtuali di due regioni dello spazio degli indirizzi del kernel, chiamate "pool di memoria". Entrambi sono utilizzati per allocazioni di memoria piuttosto piccole e a breve termine (di solito molto meno di 1 MB ciascuna), necessarie a vari componenti del codice in modalità kernel di Windows, compresi i driver di periferica. Il codice in modalità kernel li utilizza in modo molto simile a quello dei programmi applicativi che usano gli "heap". (Il motivo per cui Windows li chiama pool invece di heap è storico).

Uno dei pool è Non gestito il che significa che viene sempre mantenuto nella RAM. Pertanto, la dimensione indicata da Task Manager è quella fisica (RAM) e quella virtuale. Il pool nonpaged è utilizzato dai componenti che possono essere eseguiti in contesti in cui i page fault non possono essere gestiti, come le routine di servizio di interrupt dei driver di periferica, le routine DPC e altre routine che devono essere eseguite a IRQL DISPATCH_LEVEL o superiore. Ho spiegato gli IRQL in un'altra risposta qui.

L'altro pool, chiamato Pagato dal Task manager, in realtà dovrebbe essere chiamato "page in grado di". Proprio come la normale memoria virtuale utilizzata dai processi, non è necessariamente paginata, è solo che porzioni di essa possono essere. Come tutte le altre regioni impaginabili, le sue pagine saranno "inserite" nella RAM su richiesta, cioè quando vengono referenziate mentre non sono in RAM, ed eventualmente "estratte" in un secondo momento se la memoria fisica si sta esaurendo e devono essere risolti nuovi errori di pagina.

La dimensione che Task Manager mostra per il pool paginabile è la dimensione virtuale. Un sottoinsieme di questa sarà "valido", cioè in RAM (cioè la dimensione fisica). La dimensione della porzione in-RAM (paginata) del pool paginato non è riportata da Task Manager, ma può essere vista nello strumento SysInternals Process Explorer (View | System Information) o nel contatore PerfMon. Memory | Pool Paged Resident Bytes.

Tutto il pool "non paginato" e la porzione "pagata" o "residente" del pool paginato fanno parte di ciò che viene conteggiato come "in uso".

Per ulteriori informazioni sui pool di memoria del kernel, vedere la documentazione sull'interfaccia del kernel. ExAllocatePool.

Attenzione: Non gestito non è il sottoinsieme paginato di Pagato! Si tratta di allocazioni virtuali separate. È quindi del tutto possibile, ad esempio, che il pool non-paged abbia una dimensione maggiore di quello paged, ma non è comune.

Attenzione: Questi dati non rappresentano in alcun modo la quantità totale di spazio di indirizzi virtuali del kernel.

Impegnato

Il Impegnati si riferiscono a un tipo particolare di memoria virtuale. Per spiegarlo veramente, devo spiegare gli altri tipi.

Ogni pagina dello spazio degli indirizzi virtuali può trovarsi in uno dei cinque stati: Non utilizzato, non paginabile, mappato, riservato e impegnato.

Gli spazi di indirizzamento virtuali "non paginabili", "impegnati" e "mappati" corrispondono a spazi di indirizzamento virtuali memoria e possono essere acceduti con successo (in lettura o scrittura), eventualmente con un page fault lungo il percorso; "Unused" e "reserved" non possono essere acceduti.

(Quel messaggio di errore che a volte si vede - "L'istruzione a 0x(qualche indirizzo) faceva riferimento alla memoria a 0x(qualche indirizzo), la memoria non poteva essere letta" (o "scritta")? È ciò che accade se il codice del sistema tenta di accedere a uno spazio di indirizzi "non utilizzato" o "riservato". Oppure se si tenta di scrivere su una pagina di sola lettura o di accedere a un indirizzo virtuale protetto dal kernel dalla modalità utente. n.b.: l'indirizzo riportato è virtuale, non fisico, e il messaggio non significa che ci sia un problema con la RAM. Si tratta di un bug del programma).

La memoria virtuale "non paginabile" è sempre fisicamente "residente" ed è quasi esclusivamente di competenza del codice della modalità kernel di Windows. Fa parte della memoria "in uso". Il Nonpaged già discusso, è un esempio di memoria virtuale non paginabile.

Attenzione: Anche se la memoria virtuale non paginabile è sempre residente, la consideriamo comunque "virtuale" perché continuiamo a farvi riferimento con indirizzi virtuali. Ha anche tutte le altre proprietà della memoria virtuale, tranne che è sempre "valida" e quindi non produrrà mai un page fault quando vi si accede.

Lo spazio di indirizzi virtuali "mappato" è paginabile da/verso il disco. Il suo "backing store" - che è un nome di fantasia per indicare dove vengono conservate le porzioni di esso se non possono essere conservate tutte in RAM allo stesso tempo - sono file forniti quando viene creata ogni regione mappata. (Le API rilevanti sono CreateFileMapping e MapViewOfFile.) Il contenuto delle regioni mappate inizia infatti in questi file; viene letto nella RAM man mano che vi si accede ("paginazione a richiesta").

La memoria mappata è eccezionalmente comune: è nelle regioni mappate che risiede tutto il codice eseguibile. È anche molto comunemente usata per accedere a file di grandi dimensioni, in contrapposizione al tradizionale accesso in lettura/scrittura.

Le regioni mappate possono essere condivise tra i processi. Se la mappatura è impostata per l'accesso in lettura/scrittura (cosa che in genere non avviene per i file di codice!), le modifiche ai v.a. mappati vengono riportate ai rispettivi file mappati.

Esiste tuttavia la possibilità di creare una "regione mappata sostenuta da un file di pagina" che può essere condivisa tra i processi come qualsiasi altra regione mappata, ma le cui modifiche non saranno conservate da nessuna parte una volta che tutti i processi l'avranno disinstallata.

Lo spazio degli indirizzi virtuali "impegnato" è anch'esso impaginabile da/verso il disco. La differenza tra questo e quello "mappato" è che il backing store per lo spazio virtuale "impegnato", se dovesse essere necessario, è il pagefile (se ne avete uno, cosa che sicuramente dovreste fare).

"Committed", come "mapped", è a richiesta paginata, ma la prima volta che si accede a una pagina di memoria committed, non c'è lettura dal disco, perché a differenza della memoria mapped, non c'è un posto dove leggere il contenuto iniziale. da. Una nuova pagina fisica viene semplicemente allocata al processo (dalla RAM precedentemente "disponibile", tipicamente l'elenco delle pagine zero) e resa valida nell'insieme di lavoro del processo. Quindi una pagina di memoria impegnata non occupa alcuno spazio di memoria fino alla prima volta che viene referenziata.

Poiché la memoria impegnata è impaginabile (anche se non avete un pagefile, ma dovreste averne uno), è probabile che non tutta la memoria impegnata sia presente in RAM - "residente" - nello stesso momento. Come di consueto, il sistema operativo cerca di mantenere in RAM le pagine di v.a.s. a cui si accede più di frequente; se la RAM disponibile è scarsa, il sistema operativo "sfoglia" altre pagine, rimuovendole dai loro set di lavoro e mettendole nell'SPL o nell'MPL. In quest'ultimo caso vengono presto scritte nel loro backing store.

La dimensione totale delle pagine "impegnate" (cioè supportate da pagefile, o lo sarebbero se aveste un pagefile, cosa che dovreste assolutamente fare), tra tutti i processi e il kernel del sistema operativo, è il primo numero sotto la parola Impegnato.

Include anche diversi altri contributi: Soprattutto i pool non-paged e paged e tutte le regioni mappate che sono mappate copy-on-write. Questo numero viene spesso chiamato carica di commit.

Un modo per pensare alla carica di commit è il seguente: Se si dispone di un pagefile (cosa che si dovrebbe fare) e di tutti contenuto paginabile della memoria (impegnato, pool paginato, ecc.), eccetto la memoria mappata, dovesse essere paginato fuori dalla RAM, questo è lo spazio necessario per il pagefile.

Il secondo numero sotto la parola Impegnato è il ''limite di commit''. È la dimensione della RAM più la dimensione totale attuale dei pagefile. Il carico di commit non può essere più grande di così. Se un processo tenta di impegnare memoria virtuale di dimensioni tali da superare il limite di commit, Windows, se possibile, allarga il pagefile per fare spazio (e viene visualizzato il pop-up "memoria insufficiente"). Se l'allargamento del file di pagina non è possibile, il messaggio dice "esaurita la memoria" e il processo che l'ha fatto si arresta.

Il sottoinsieme residente della carica di Commit fa parte di "in uso". Si noti che anche se non si ha un pagefile (e se non lo si ha, cosa c'è di sbagliato?) questo non è necessariamente lo stesso del costo di commit. Per prima cosa, se si impegna la memoria virtuale ma poi non si accede a tutta, le parti a cui non si accede non occuperanno mai memoria da nessuna parte. È anche possibile che la memoria impegnata venga eliminata da un working set e inserita nell'elenco delle pagine modificate. Di solito, solo un sottoinsieme della memoria impegnata occuperà la RAM.

Non c'è modo di determinare da Task Manager il sottoinsieme della memoria impegnata che si trova nella RAM. Tuttavia, lo strumento "RAMmap" di SysInternals può mostrarlo.

Sommare il tutto

Disponibile + In uso + Modificato si sommano alla RAM totale utilizzabile dal sistema operativo.

la RAM totale utilizzabile dal sistema operativo più la RAM "riservata all'hardware" dovrebbe essere uguale alla quantità totale di RAM installata.

Disponibile è uguale alla Elenco pagine in standby più il valore Elenco pagine libere, più l'elenco Elenco pagine zero

Liberocome visualizzato dalla scheda Memoria di Resource Monitor è la somma dell'Elenco pagine zero e dell'Elenco pagine libere.

(Ho deliberatamente omesso qualsiasi altra discussione sull'elenco delle pagine zero perché non è importante per i contatori richiesti).

In cache = il Elenco pagine in standby (alcuni dei quali sono utilizzati da SuperFetch), più (per Windows 8 e successivi) il file Elenco pagine modificate più (per le versioni precedenti di Windows, ancora da determinare con precisione) la porzione paginata o residente della cache dei file di sistema.

Attenzione: Poiché l'elenco delle pagine in standby fa parte sia di "Available" che di "Cached", è assolutamente possibile sommare "Available" e "Cached" e ottenere un totale superiore alla quantità totale di RAM! Questi numeri non sono semplicemente destinati a essere sommati.

La scheda Memoria di Resource Monitor mostra la somma di Libero e Zero come un singolo numero, etichettato come "Libero". Performance Monitor può mostrare queste dimensioni singolarmente.

Ho abbastanza RAM?

"Per quanto ne so, il kernel manipola la gestione della memoria in modo complesso, quindi posso concludere che se ho memoria libera nella RAM del mio portatile, la mia memoria è sufficiente.
portatile, la mia memoria è sufficiente?".

La migliore metrica per la domanda "ho abbastanza RAM?" è di solito il tasso di errori di pagina. Gli errori di pagina sono errori di pagina che richiedono la lettura da disco. Si può vedere nei grafici della colonna destra di Resource Monitor (sia nella scheda "Panoramica" che in quella "Memoria"), oppure per processo nella scheda Memoria. Il contatore PerfMon Memory | Page Reads/sec lo mostra anche.

Il tasso di errore complessivo è un sottoinsieme del tasso di errore duro e non è altrettanto interessante. Include i "soft page fault", che non comportano la lettura del disco e quindi richiedono molto meno tempo. (È difficile dire quanto tempo impieghino, ma secondo me si tratta al massimo di qualche centinaio di istruzioni). Questi includono i guasti risolti agli elenchi delle pagine standby e modificate, i guasti alle pagine condivise che sono già residenti per uno o più processi e i guasti "a richiesta zero", che si verificano al primo riferimento a pagine private. Non sorprendetevi se vedete migliaia di errori di pagina al secondo. È la lettura delle pagine dal disco che rallenta enormemente le cose (anche se il disco è un SSD).

Ma che dire di "Disponibile" o "Libero"?

Molte persone si preoccupano della quantità di memoria "disponibile" o "libera". In primo luogo, è abbastanza comune che un sistema Windows in cui non sono usciti molti processi per molto tempo non mostri memoria libera o quasi. Questo è previsto in quanto l'unico evento che tipicamente riporta la memoria a "Libera" è l'uscita di un processo; le pagine fisiche che erano valide per la sua memoria "impegnata" vengono quindi spostate nell'elenco "Libera".

La memoria "Disponibile" include l'elenco Standby ed è pronta per essere assegnata a un nuovo uso proprio come la memoria "Libera", quindi se si dispone di molta memoria "Disponibile" non ci si deve preoccupare del fatto che non ce ne sia molta "Libera".

Anche per quanto riguarda "Disponibile", il vantaggio principale di avere un'abbondanza di disponibile di memoria disponibile è quello di supportare l'avvio rapido di nuovi programmi o di nuovi comportamenti in programmi già in esecuzione. In questi momenti si assisterà a una serie di errori di pagina: questo è del tutto normale, anzi, inevitabile. Se il carico di lavoro non è elevato, il sistema può essere soddisfatto di una percentuale inferiore di RAM disponibile.

E ancora una volta lo ripeto: Un'unità SSD fa sì che gli errori di pagina siano molto più veloci di quelli che si verificano su un disco rotante. E saranno ancora più veloci se si tratta di un SSD M.2 PCIe. Sono comunque molto più lenti dei soft fault.

Un'altra cosa: spesso si sente dire che "la RAM non è mai abbastanza". È vero che (a meno di circostanze insolite) l'aggiunta di RAM al sistema non causerà mai un aumento delle prestazioni. problema. Tuttavia, è certamente possibile spendere troppi soldi per la RAM. Esiste un punto di diminuzione dei rendimenti oltre il quale l'aggiunta di altra RAM non accelera il sistema in modo significativo. Dove si trova questo punto dipende dal carico di lavoro e da vari aspetti dell'hardware (in particolare se si dispone di un SSD o di un disco rotante). Come credo di aver chiarito sopra, eliminare il pagefile non elimina il paging da/verso il disco, perché i file mappati esistono ancora e vengono letti e scritti tramite il paging. Quindi sbarazzarsi del pagefile (cosa che comunque non si dovrebbe fare) non significa che si possa smettere di preoccuparsi della velocità del disco.

Domanda 1:
Cosa sono esattamente i pool Commited Memory, Cached, Paged, Not-Paged e in che modo sono diversi dalla In-Use Memory.

Memoria impegnata:
La memoria impegnata è tutte le forme di memoria allocate per essere utilizzate. Include la memoria fisica e quella virtuale (paging). Memoria impegnata vs. memoria disponibile

Memoria cache: Memoria tipicamente integrata nella CPU. L'accesso a questa memoria è molto più rapido perché è il più vicino possibile al processore che la sta utilizzando.

Memoria a paginazione:
La memoria di paginazione è una memoria virtuale, cioè non è collegata al sistema. Quando il sistema determina che ha bisogno di più memoria di quella disponibile, crea una memoria virtuale che in realtà è solo spazio di archiviazione sul disco rigido. Questo tipo di memoria è molto più lento perché si basa sulla velocità di lettura e scrittura del disco rigido.

Non-pagato:
È semplicemente l'opposto della memoria paginata. Ciò significa che si tratta di un totale di memoria, esclusa la quantità di memoria paginata.

Domanda 2:
Per quanto ne so il kernel manipola la gestione della memoria in modo complesso, quindi posso concludere che se ho memoria libera nella ram del mio portatile, la mia memoria è sufficiente?

In generale, è bene assicurarsi di avere abbastanza memoria fisica per le attività che richiedono più memoria e per le quali si utilizzerà il computer. Come spiegato sopra, la memoria di paging tecnicamente può svolgere il lavoro, ma è molto più lenta della memoria fisica. Quello che vi suggerisco è di monitorare i livelli di memoria, aprire ed eseguire la configurazione più intensiva che pensate di poter realisticamente eseguire e vedere quanta memoria viene utilizzata.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.