Perché la mia tabella delle pagine occupa così tanta memoria?


10

Il mio PC Windows 7 a 64 bit è molto lento. Ho notato in Task Manager che il mio utilizzo della memoria è vicino al 100%, tuttavia l'utilizzo riportato per ciascun processo non si aggiunge ai 6 GB totali (Firefox mostra circa 500 MB, il resto molto meno). Ho scaricato RAMMap e ho scoperto che la tabella delle pagine occupa una notevole quantità di memoria (2,5 GB).

Schermata RAMMap

Ho cercato su Google e non sono arrivato da nessuna parte - apparentemente la tabella delle pagine può essere frammentata. Ovviamente riavvio il computer e vedo se questo aiuta. Ma c'è un modo migliore per risolverlo?

EDIT: riavviato e la tabella delle pagine è ridotta a 30 MB.

EDIT 2: Dopo alcuni giorni di uptime, l'utilizzo della tabella delle pagine si sta nuovamente riducendo. Ho seguito le istruzioni di @ magicandre1981 in questa risposta per trovare l'origine dell'utilizzo della tabella delle pagine. Purtroppo ho disegnato uno spazio vuoto: la tabella delle pagine è utilizzata da "Sconosciuto"!

Schermata WPA

Qualcuno ha qualche idea brillante?


Devi determinare cosa sta usando il tuo file di paging per capire perché l'uso del tuo file di paging (cioè la tua memoria virtuale) è elevato.
Ramhound,

1
No, penso che questa sia memoria fisica in uso, non virtuale. Pensavo che la tabella delle pagine fosse una sorta di riferimento per il gestore della memoria?
benshepherd,

2
Come ho detto nella domanda, non ci sono processi che utilizzano la memoria. Avevo l'impressione che la tabella delle pagine fosse diversa dal file di paging .
benshepherd,


1
La tabella delle pagine è una cosa molto diversa dal file di paging. Vedi la mia risposta qui sotto. Inoltre, mentre il file di paging può essere frammentato, le tabelle di pagina ... beh, sono sempre frammentate (come sparse nella RAM) e non importa minimamente.
Jamie Hanrahan,

Risposte:


5

Devo commentare i commenti alla domanda, in particolare la confusione tra "tabella delle pagine" e "file delle pagine". Questa non è una risposta ma non si adatta allo spazio consentito per i commenti.

La "tabella delle pagine" è in effetti molto diversa dal file di paging. Avere n MB di RAM usati per le tabelle delle pagine non significa che stai usando n MB di spazio per i file di paging. E sebbene alcune voci della tabella delle pagine (PTE, che sono costituite dalle tabelle delle pagine) facciano riferimento al contenuto del file di paging, non tutti lo fanno.

Le tabelle di pagine sono strutture in memoria utilizzate dalla MMU della CPU per eseguire la traduzione degli indirizzi da indirizzi virtuali (di nuovo, non il file di paging) a indirizzi fisici e dal sistema operativo per tenere traccia dello spazio di indirizzi virtuali e aiutare a risolvere i guasti di pagina. Le tabelle delle pagine sono costituite da voci della tabella delle pagine (PTE). Ogni PTE occupa 8 byte e definisce 4K byte di spazio di indirizzi virtuali, ovvero una pagina virtuale. Esiste approssimativamente un PTE per ogni pagina non libera dello spazio di indirizzi virtuale.

A proposito, anche se il file di paging può sperimentare una frammentazione sia esterna che interna (il primo di solito non è un grosso problema; il secondo può essere migliorato rendendolo circa quattro volte più grande di quello che deve essere), le tabelle di paging no. Sono quasi sempre frammentati e non importa minimamente.

Ogni PTE ha un bit "valido". Per le pagine "valide", ovvero "residenti", il PTE contiene il numero di pagina fisica che corrisponde al numero di pagina virtuale associato al PTE; questo è usato direttamente dalla MMU.

Per le pagine "non valide" la MMU genera un errore di pagina e la PTE ha quindi molti formati e interpretazioni possibili.

Nota: tutto quanto sopra si applica a qualsiasi sistema operativo che abilita il paging su x86 / x64. Quanto segue è ampiamente specifico di Windows, ma molti dei concetti si applicano ad altri sistemi operativi, con differenze nei dettagli dell'implementazione.

Per una pagina nella cache delle pagine, il PTE contiene ancora il numero di pagina fisico. Per le pagine che sono state perse dalla RAM e scritte nel file di paging, il PTE contiene il numero del file di paging e l'offset all'interno del file di paging in cui sono stati scritti i contenuti della pagina. Altri possibili contenuti PTE sono riferimenti a descrittori di indirizzi virtuali , riferimenti a "prototipi di PTE", riferimenti a richiesta zero pagine, ecc., Nei quali non ho intenzione di entrare. Basti dire che solo alcuni dei PTE si riferiscono a posizioni nei file di paging.

Dico tutto questo principalmente per mostrare che il file di paging e le tabelle di pagina, sebbene correlate, non sono sicuramente la stessa cosa.

Le tabelle delle pagine sono organizzate in una struttura ad albero. Esiste un albero o una raccolta di tabelle di pagine differenti per ciascun processo: questo è ciò che consente a ciascun processo di definire la propria istanza di spazio di indirizzi virtuale. La tabella delle pagine nella radice dell'albero deve essere sempre nella RAM. Gli altri sono paginabili; sono persino inesistenti dove corrisponderebbero a grandi (minimo 2 MB) regioni di spazio di indirizzi virtuali indefiniti o liberi.

Le voci della tabella delle pagine nelle tabelle alle "foglie" dell'albero corrispondono alle pagine dello spazio degli indirizzi virtuali. Le PTE nelle tabelle di livello superiore - quelle più vicine alla radice (e alla radice stessa) - indicano dove si trovano le successive tabelle di livello inferiore (se esistono affatto).

Il numero mostrato da RAMmap è la memoria fisica (RAM) occupata da tutte le tabelle di pagine residenti (in-RAM) per tutti i processi più il sistema operativo.

Ciò che è importante qui è che il sistema nell'OQ avesse 2,5 GB di RAM collegati con le tabelle delle pagine. Ciò significa che, come minimo, sono definiti 2,5 GB di tabelle di pagine. Poiché le tabelle di pagine sono esse stesse impaginabili, la dimensione virtuale potrebbe essere molto più grande della dimensione fisica, il che è tutto ciò che RAMmap può mostrarci. Ma supponiamo che sia "solo" 2,5 GB. A otto byte per PTE sono circa 320 milioni di PTE. Poiché ogni PTE definisce una pagina - 4K byte - di spazio di indirizzi virtuali, ciò significa che oltre 1,2 terabyte di spazio di indirizzi virtuali sono definiti da tabelle di pagine in memoria .

Non è impossibile ma è piuttosto molto.

Per riferimento, sul mio atm di sistema, ho circa 125 MB di RAM nelle tabelle delle pagine. Ciò indicherebbe solo circa 65 GB di spazio di indirizzi virtuali. Il mio effettivo utilizzo virtuale è molto più elevato (125 TB solo per i processi) ma ciò è dovuto al fatto che la maggior parte delle tabelle delle pagine non sono nella RAM. Le "pagine grandi", un'altra cosa che non dovrei approfondire qui, possono anche aiutare a tenere conto di rapporti diversi tra dimensione delle tabelle di pagine e dimensione dello spazio di indirizzi virtuali in uso.

Quindi: per trovare il colpevole, per prima cosa vorrei andare a Performance Monitor nella categoria Processo per i processi con un valore contatore "Virtual Bytes" elevato.


4

Lenovo "RapidBoot Shield" è stato il colpevole per me.

Dopo una settimana senza riavvio, la mia "Tabella pagine" utilizzava 4 GB +. Si è scoperto che ogni processo terminato si bloccava usando 20K RAM (4K privato, 16K Page Table) come mostrato nella scheda "Processi" di RamMap, e ce ne erano ~ 200.000!

Il riavvio ha ridotto l'elenco ma ha ricominciato a crescere. È riproducibile aprendo il blocco note, uccidendolo e osservando che rimane nell'elenco dei processi di RamMap.

Sulla base dei suggerimenti su questo thread di technet ho disinstallato "RapidBoot Sheild", riavviato la macchina e quindi i processi non rimanevano più presenti quando venivano uccisi. Problema risolto!



1

Ho chiesto al mio dipartimento IT di questo, e sono stati similmente analizzati. Ho finito per usare DriverEasy per aggiornare i miei driver. Quelli che sembravano fare la differenza, stranamente, erano i driver del monitor. In precedenza avevo i driver standard "Monitor PnP generico" di Windows. Ma quando li ho aggiornati con la marca e il modello corretti dei miei monitor, il problema sembrava scomparire.


1

Apri la scheda "Processi" in RamMap e ordina per nome. Cerca un numero sospettosamente alto dello stesso processo. Sul mio computer, "SynTPEnh.exe" era il colpevole (una parte del driver del touchpad). Dopo una settimana di uptime, ha accumulato decine di migliaia di voci nella tabella delle pagine, ciascuna con dimensioni di 32kb.

La dimensione della tabella della mia pagina era 1 GB, dopo un riavvio, è solo 50 MB.

inserisci qui la descrizione dell'immagine

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.