Perché Windows 7 utilizza il file di paging quando c'è RAM fisica libera?


43

Sto usando Windows 7 a 64 bit con ram 8G. Dopo un po 'di utilizzo, sento che Windows sta diventando lento. L'unità si sta schiantando. Quando guardo il monitor delle risorse e l'attività del disco, vedo alcune istanze di utilizzo del file di paging (c: \ pagefile.sys). Controllo la memoria fisica e vedo circa 2.3G di memoria disponibile e 700M di memoria libera.

Perché Windows non utilizza più memoria libera e meno file di pagina? Deve lasciare una quantità x di ram gratis, quanto sarebbe? È una percentuale di montone fisico?

Il mio piano è ottenere più RAM e un SSD per l'unità principale. Nel frattempo soffro di prestazioni lente.


1
Solo perché sta scrivendo / leggendo il file di paging non significa che lo stiamo usando, potrebbe semplicemente aggiornarlo in modo da poter scaricare la memoria più velocemente se c'è una richiesta improvvisa. Raccomando di eseguire il monitoraggio delle prestazioni o fare una diagnostica approfondita e vedere cosa sta causando la lentezza.
Scott Chamberlain,

Avere più di 8 GB di RAM non aumenterà le prestazioni nel 99. (9)% dei casi. Hai riempito il tuo mobo di chip RAM economici a bassa frequenza / alta latenza? Sostituirli sarebbe un'idea migliore che aggiungerne altri.
Kotekzot,

3
@kotekzot Dipende. In genere ho riscontrato che la latenza della RAM è alquanto trascurabile nella maggior parte dei colli di bottiglia. Se ha memoria sufficiente da non dover attendere il paging delle applicazioni quando esegue l'alt-tab su tutte, allora il prossimo collo di bottiglia più grande di diversi ordini di grandezza è quasi sempre il disco rigido e un SSD risolverà quel diritto su.
Darth Android

@Se ho più RAM, posso mettere il file di paging in un ramdisk che è molto più veloce dell'accesso HD. È un livello di workstation portatile Dell, quindi sono sicuro che i componenti non sono economici. Sono consapevole che i laptop hanno dischi rigidi più lenti e IO subsystsem rispetto ai desktop.
Tony_Henrich,

1
Si prega di non mettere il file della pagina su un disco RAM. Ciò farà sì che il sistema subisca più errori di pagina. Sì, se si trovano sul pagefile-on-RAMdisk verranno risolti più rapidamente rispetto a se fosse andato su un disco reale, ma non averli affatto è ancora molto più veloce; inoltre, molti degli errori di pagina aumentati riguarderanno i file mappati e quelli non saranno affatto aiutati dal RAMdisk.
Jamie Hanrahan,

Risposte:


33

Innanzitutto, non posizionare il file di paging su un SSD. Mentre gli SSD sono migliorati sul livellamento dell'usura, il file di paging viene scritto frequentemente e degraderà l'SSD molto più velocemente dell'uso generale.

Ciò che molte persone non capiscono è che Windows non ha mai memoria libera. Ci sono alcuni MB che vengono mantenuti liberi per richieste di raffica, ma per il resto, la differenza tra la memoria attiva in uso e la memoria totale viene generalmente consumata da quella che è nota come memoria "standby".

Memoria di sistema

Queste sono pagine di memoria che possono essere scaricate se necessario (la memoria di standby è una cache grande e grande), quindi dal punto di vista dell'applicazione, è disponibile, ma non viene affatto utilizzata. Di solito, funzionano come cache del disco o cache del file di paging.

L'obiettivo di Windows è mantenere i dati più probabili da utilizzare in questa cache di standby, in base ai modelli di utilizzo. Per usare un esempio inventato, confrontiamo il valore relativo della memoria privata di un programma come Windows Update (in genere configurato per l'esecuzione una volta alla settimana), tramite la memorizzazione nella cache dei contenuti del desktop in questa memoria di standby:

Per la maggior parte delle volte, Windows Update è inattivo. Sta trattenendo la memoria e, per la maggior parte, non fa assolutamente nulla di valore mentre attende che il programma si ripercuota. Il contenuto della cartella del desktop, d'altra parte, potrebbe essere interrogato costantemente, soprattutto se ti piace salvare i file su di esso.

In questo caso, ciò che Windows farà è sfogliare la memoria allocata a Windows Update (anche se la memoria non è "piena" e utilizzare lo spazio reso disponibile nella RAM per memorizzare nella cache i contenuti del desktop. Ciò si traduce in prestazioni migliori per tu.

Windows sta prendendo migliaia di queste decisioni e sta gestendo una cache del disco per centinaia di file che vengono costantemente scritti da servizi in background mentre tenta di bilanciare questo con le esigenze di memoria delle applicazioni attive. A volte si sbaglia per un momento e potremmo dover aspettare che i dati della pagina tornino in memoria quando passiamo a un'applicazione che è rimasta in background per un po '. Ma cosa devi pensare è se avesse tenuto completamente quell'applicazione in memoria, quante altre applicazioni sarebbero a loro volta impantanate in attesa del completamento delle scritture e delle letture del disco o sarebbero state costrette a uscire di pagina? E se quelle fossero applicazioni che stavi utilizzando nel frattempo?


Le applicazioni allocano frequentemente le pagine di memoria utilizzate molto raramente, come il codice di avvio (usato una volta e poi non necessario), il codice di arresto (usato una volta e poi non necessario) o il codice di aggiornamento. Non è pratico mantenere tutto questo in memoria quando ci sono usi molto più importanti, quindi una volta che Windows identifica le sezioni di codice che non sono state necessarie per l'operazione corrente di un'applicazione, le pagine vengono felicemente archiviate nel file di paging, anche se tecnicamente potrebbe conservarli in memoria.

(E in realtà, a seconda delle applicazioni, i sistemi potrebbero allocare frequentemente più memoria di quella che hanno in realtà, aspettandosi che la maggior parte di essa finisca per essere pagata. Se stai osservando una suddivisione dettagliata della memoria, la carica "Commit" o "Commit" è la quantità di memoria che Windows ha allocato a varie applicazioni. Il file di paging viene utilizzato per fornire garanzie per questa memoria, anche se non ha abbastanza RAM fisica per coprirla.)


Ho appena notato che hai fatto una distinzione tra memoria disponibile e memoria libera nella tua domanda; Mi scuso se ti senti a lezione e conosci già la differenza. Idealmente, la memoria libera è sempre 0. Tuttavia, mentre la memoria di standby è una memoria che può essere rilasciata, non è sempre la memoria che può essere rilasciata rapidamente. Se provo a scrivere un file da 1 GB su disco, Windows lo bloccherà in una cache del disco in memoria, se possibile, e poi lentamente lo scriverà sul disco rigido in background. Se un'applicazione deve richiedere 50 MB di memoria aggiuntiva, ma nessuna è disponibile perché questa enorme cache del disco viene ancora scaricata, l'applicazione si bloccherà fino a quando non sarà disponibile. Tenere un piccolo buffer a portata di mano consente al sistema di risolvere questo problema con un ritardo minimo dal punto di vista dell'utente.


6
@FrankComputer Guarda lo screenshot che ho pubblicato per il mio sistema di lavoro da 8 GB: 6300 MB in uso, disco / cache in standby da 1700 MB, 42 MB gratuiti. Guardando il mio sistema di casa (memoria da 32 GB), in realtà hai ragione, ma solo alla soglia sbagliata: 9,2 GB in uso, cache del disco da 14,5 GB, 8,6 GB gratuiti. Avrai memoria libera se Windows ha semplicemente esaurito le cose nella cache, ma quella soglia è piuttosto alta. Windows non si scambia costantemente perché la cache del disco non è spazio di scambio, ma viene passivamente memorizzata nella cache quando vengono richiesti i file e non nella cache. Non noti i tempi che estrae dalla cache e non c'è attività sull'HDD.
Darth Android

8
@FrankComputer: se il tuo sistema funziona bene, non è a causa della memoria libera. La memoria libera è la memoria che il sistema non utilizza e non può avere più effetto sulle prestazioni della memoria sulla scrivania. L'unico modo per migliorare le prestazioni con la memoria è utilizzarlo , quindi se è gratuito, non viene utilizzato per migliorare le prestazioni. Fare più memoria libera significa usare meno, peggiorando le prestazioni.
David Schwartz,

1
@Tony_Henrich La disabilitazione del file di paging è errata. Molto brutto. (Spostare il file di paging su un ramdisk equivale effettivamente a disabilitarlo. Windows non è in grado di spostare i dati di cui non ha bisogno immediatamente dalla memoria). Molti programmi richiedono memoria di cui non hanno immediatamente bisogno, ma che potrebbe essere necessaria in futuro. Di solito, Windows alloca questa memoria nel file di paging e non fa nulla. Per esempio. Il server MSSQL alloca 8 GB di RAM all'avvio. Anche per 0 database. Solo perché. Se metti il ​​tuo file di paging su un ramdisk, sprecherai notevoli quantità di RAM che altrimenti potrebbero essere utilizzate per la cache
Darth Android

1
@Tony_Henrich Attualmente Windows gestisce in modo ottimale il tuo file di paging e la tua RAM, dato come usi il tuo sistema. Gli unici miglioramenti che puoi apportare sono tali: Aggiungi più memoria o sposta il tuo sistema operativo su un SSD. Fare casini con il tuo file di paging peggiorerà al massimo le prestazioni complessive del sistema o influenzerà la stabilità del sistema nel peggiore dei casi.
Darth Android

1
Stai spiegando cosa fa Windows con la memoria. Se ho molta memoria libera, Windows dovrebbe usarla, indipendentemente dal fatto che un'app stia dormendo o non faccia nulla. Qual è il danno nel tenerlo in memoria quando la memoria è disponibile. Quando la memoria si esaurisce, Windows può utilizzare il file di paging. L'uso del file di paging sta causando usura sull'unità. Non c'è usura nell'usare la memoria. In secondo luogo, utilizzo un SSD per il mio file di paging. Sebbene le vite degli SSD siano più piccole dei dischi rigidi e ci si logori allora con un sacco di scritte, questo non dura ancora alcuni mesi. È ancora da anni.
Tony_Henrich il

4

Si chiama pianificazione anticipata.

Scrivere pagine di memoria nel file di paging quando c'è ancora molta RAM è una buona cosa. Non appena un programma richiede più memoria di quanta ne sia libera, il sistema operativo può iniziare a liberare spazio il prima possibile. Meglio prepararsi ora che dopo.

Se il sistema operativo dovesse attendere, allora si verifica un collo di bottiglia delle prestazioni. Se un programma richiede più memoria di quella disponibile, ora è necessario attendere fino a quando il sistema operativo non scrive il blocco di memoria modificato, quindi liberarli.


Con 16G + e con programmi leggeri, i tempi in cui un programma richiede più memoria rispetto a ciò che è libero è molto inferiore rispetto all'uso frequente del file di paging. Quindi, in quei casi, è meglio usare un po 'di memoria libera e meno del file di paging. Non esiste una soluzione adatta a tutti i casi.
Tony_Henrich il

1
Non penso che tu l'abbia capito. Non deve essere l'uno o l'altro. Windows può scrivere nella memoria libera e scrivere nel file di paging. Non è come scrivere nel file di paging o scrivere in memoria.
surfasb,

1
Ma cercando di pianificare in anticipo, Windows non sta potenzialmente riempiendo la cache su chip dell'HDD / SDD, rallentando le operazioni di scrittura / caricamento di file simultanei? Questo pre-scambio di RAM suona come una buona idea, ma sembra che accidentalmente carichi il sistema nei momenti difficili.
binki,

1
@binki: Sì, interferisce con i tempi di lettura / scrittura del disco, ma se ricordo che usano una priorità più bassa, quindi le altre scritture di lettura dovrebbero essere le prime in generale.
Mooing Duck,


2

Il file della pagina è stato disattivato negli ultimi 7 anni. In realtà è la prima cosa che faccio dopo una nuova installazione. Non ho mai avuto problemi con esso. (In realtà ho avuto un gioco chiamato "titan quest" eseguito un controllo molto stupido all'avvio, quindi ho creato un file di paging di 4 MB solo per renderlo felice e in seguito ho disattivato PF). Per quanto riguarda la domanda originale. Windows utilizza la nostra RAM per la cache di I / O del disco. Per qualche motivo ritiene che la cache del disco sia altrettanto importante per il codice e i dati dei programmi attivi. E non c'è modo di limitare la dimensione della cache del disco. È lì per design e non possiamo farci niente ... Oh, aspetta! Noi possiamo! Basta disattivare il file di paging. Eseguendo applicazioni che sono pesanti sulla RAM? Acquista più RAM o chiudi un'app prima di avviarne un'altra. È possibile utilizzare Process Explorer per vedere quanta memoria viene utilizzata in un dato momento.


1
Sbarazzarsi del file di paging non disattiverà la memorizzazione nella cache del disco.
Jamie Hanrahan,

1
Hai scritto: "[Disk cacheing] è lì in base alla progettazione e non possiamo farci nulla. Oh aspetta! Possiamo! Basta disattivare il file di paging." Bene, disattivare il file di paging non fa nulla sulla cache del disco, quindi cosa stai dicendo? È comunque un'idea stupida, poiché costringe il sistema operativo a mantenere per sempre tutti i commit privati ​​nella RAM una volta toccato. Questo rende meno spazio per la memoria virtuale mappata (come il codice), in modo che le cose debbano essere paginate di più. La cache del disco proattiva (superfetch) utilizza ciò che è rimasto dopo tutto quanto sopra, quindi non aumenta il paging di nessuno dei due.
Jamie Hanrahan,

1
Non ho mai detto (o pensato) che disattivare il file di paging fosse la tua idea, quindi non stavo dicendo nulla sulla "tua idea". Oh, mentre "sono qui: " Per qualche motivo [Windows] ritiene che la cache del disco sia altrettanto importante per il codice e i dati dei programmi attivi " è completamente errata. Superfetch utilizza solo le pagine che sono nell'elenco di standby e quindi già parte di" RAM disponibile; non prende pagine dal codice e dai dati dei programmi. E quelle pagine rimangono disponibili, cioè immediatamente disponibili per il codice e i dati dei programmi, anche dopo che contengono dati memorizzati nella cache da file.
Jamie Hanrahan

1
Non sto dicendo niente del genere. (Dove stai ottenendo questo?) Sto dicendo, tuttavia, che Windows non sfoglia mai nulla per fare spazio alla cache del disco. Al contrario, la cache utilizza pagine che al momento non fanno parte dei processi e che altrimenti andrebbero sprecate. Tali resti RAM immediatamente disponibili per codice e dati che ne ha bisogno per paging roba in , quindi non è "esaurito" dalla cache, semplicemente "preso in prestito". Pertanto, la cache non riduce la quantità di codice e dati che possono essere paginati o conservati nella RAM. Rif: Windows Internals di Solomon, Russinovich e Ionescu.
Jamie Hanrahan,

1
Ho già risposto nella risposta di DA. Ma quello che hai appena detto non è quello che ha detto. Ha detto che Windows esporrà i processi a lungo inattivi (vero). E ha anche detto che la cache del disco potrebbe usare le pagine liberate in questo modo (anche true). Ciò non significa che la cache del disco abbia necessariamente la precedenza. La cache del disco utilizza tali pagine solo se non sono necessarie altre priorità più elevate. Un'enorme quantità di test ha dimostrato che questo è un buon compromesso.
Jamie Hanrahan,

1

Gli argomenti ( qui e qui ) per conservare e usare il file di paging anche se c'è abbastanza RAM sono:

  • Anche se adesso c'è memoria libera, la macchina potrebbe esaurire la memoria in seguito. Meglio lasciare in anticipo parti di memoria poco utilizzate su disco.
  • C'è anche la memoria "standby" che appare come libera ma viene effettivamente utilizzata per la memorizzazione nella cache del disco. È anche importante per le prestazioni, meglio averne alcune.
  • Se si esaurisce la RAM con il file di pagina disabilitato, si tratta dell'arresto anomalo.
  • Mentre 2, 4, 16 o qualsiasi altro numero di GB di RAM può sembrare "molto", questo potrebbe non essere vero come credi. Devi profilare.

Con il monitoraggio delle risorse di Windows è possibile vedere quanta RAM viene utilizzata per la memorizzazione nella cache (indicata come "Standby").

Se vedi che la tua RAM è effettivamente utilizzata o in standby, il file di paging è utile per te. Se la combinazione delle tue attività e della RAM disponibile è tale che una parte significativa della memoria viene visualizzata come inutilizzata ("Free"), penso che non sia necessario macinare il disco rigido solo rispetto a qualcuno che "conosce meglio e lo ha detto qui ".


-2

Mancano tutti questi commenti e la risposta corretta. Disattiva il tuo file di paging. Non è necessario con 8 GB di RAM e se hai bisogno di più RAM, acquistalo. piuttosto semplice davvero.


4
Windows è abbastanza intelligente nel determinare cosa (non) inserire nel file di paging. Con l'eccezione di alcuni scenari quasi puramente teorici, la disattivazione danneggerà le prestazioni, anche con 8 GB di RAM. Anche se mancava la risposta corretta, non è certo questo.
Marcks Thomas,

4
Hai qualche prova a sostegno della tua richiesta di "danno"? Vi presento un articolo MS support.microsoft.com/kb/889654
a2552308

6
In poche parole: i file di paging possono solo aumentare l'attività del disco ... e Windows non è abbastanza intelligente da non usarlo affatto se ha molta RAM. Su un sistema SSD questo potrebbe non essere troppo evidente, su un sistema mandrino questo potrebbe influire molto sulle prestazioni dell'applicazione. Fare riferimento al poster originale.
a2552308,

2
Sezione pertinente dell'articolo di MS: "Tuttavia, poiché una quantità maggiore di RAM viene aggiunta a un computer, la necessità di un file di paging diminuisce. Se nel computer è installata una RAM sufficiente, potrebbe non essere necessario un file di paging, a meno che non sia necessario da un'applicazione specifica. " Non sono riuscito a trovare le sezioni pertinenti dei numerosi articoli che hai collegato, forse potresti citare le sezioni pertinenti?
a2552308,

2
Sembra buono in teoria, ma non quello che ho osservato in pratica.
a2552308
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.