Innanzitutto, la quantità di RAM che deve essere salvata è sorprendentemente piccola. In effetti, solo il set di pagine sporche mappate ("writeback pigro") deve essere svuotato, così come tutte le pagine private che sono state scritte e trasferito codice eseguibile devono essere scritte.
- I segmenti .text degli eseguibili sono sempre supportati dalla mappatura dei file. Questo vale anche per almeno alcune DLL (ma non tutte, dipende dal fatto che debbano essere ricollocate).
- La memoria che è supportata in modo simile dai mapping dei file può essere scartata (si presume che non sia CoW o RW e sporca).
- Il writeback pigro dovrà ancora verificarsi, ma a parte questo, le cache possono essere scartate.
- La memoria che è stata allocata ma non è stata scritta (di solito la maggior parte dei dati dell'applicazione!) È supportata dalla pagina zero e può essere scartata.
- La maggior parte delle pagine di memoria che si trovano nello stato "standby" (il set di lavoro residente per processo effettivo su Windows è sorprendentemente piccolo, solo 16 MB) sarà stato copiato nel file di pagina in background ad un certo punto e può essere scartato .
- Le aree di memoria mappate da determinati dispositivi come la scheda grafica potrebbero (eventualmente) non dover essere salvate. A volte gli utenti sono sorpresi di aver inserito 8GiB o 16GiB in un computer e 1GiB o 2GiB sono semplicemente "spariti" senza una ragione apparente. Le principali API grafiche richiedono che le applicazioni siano in grado di rendere i contenuti del buffer non validi "in determinate condizioni" (senza dire esattamente cosa significhi). Non è quindi irragionevole aspettarsi che anche la memoria bloccata dal driver grafico venga scartata. Lo schermo diventerà comunque scuro, dopo tutto.
In secondo luogo, contrariamente alla copia di un file, il dumping dell'insieme di pagine RAM che devono essere salvate sul disco è una singola scrittura sequenziale e contigua dal punto di vista dell'unità. L'API Win32 espone anche una funzione a livello di utente proprio per questa operazione. Gather write è supportato direttamente dall'hardware e funziona in modo rapido poiché il disco è fisicamente in grado di accettare i dati (il controller estraerà direttamente i dati tramite DMA).
Esistono una serie di condizioni preliminari affinché funzioni (come allineamento, dimensione del blocco, pinning) e non funziona bene con la memorizzazione nella cache e non esiste un "lazy writeback" (che è un'ottimizzazione molto desiderabile durante il normale funzionamento ).
Questo è il motivo per cui non tutti scrivonofunziona sempre così. Tuttavia, quando il sistema sta salvando il file di ibernazione, tutte le condizioni preliminari vengono soddisfatte automaticamente (tutti i dati sono allineati, dimensionati e bloccati) e la memorizzazione nella cache è diventata irrilevante perché il computer verrà spento tra un momento.
Terzo, fare una sola scrittura contigua è molto favorevole sia per i dischi rotanti che per i dischi a stato solido.
Il file di scambio e il file di ibernazione sono in genere alcuni dei primi file creati e riservati sul disco. Di solito ne hanno uno, al massimo due frammenti. Pertanto, a meno che i settori non siano danneggiati e il disco non debba riallocare settori fisici, una scrittura sequenziale logica si traduce in una scrittura sequenziale fisica su un disco rotante.
Non sono necessarie operazioni di lettura-modifica-scrittura sul disco quando viene scritta un'enorme quantità di dati sequenziali e contigui. Questo problema è meno pronunciato su un disco rigido rotante che può scrivere singoli settori che sono piuttosto piccoli (Se non si scrivono singoli byte, cosa che la cache di solito impedisce, il dispositivo non deve recuperare il contenuto originale e riscrivere la versione modificata.) .
Questo è, tuttavia, qualcosa che è molto evidente su SSD in cui ogni scrittura significa che ad esempio un blocco da 512 kB (che è un numero normale, ma potrebbe essere più grande) deve essere letto e modificato dal controller e riscritto in un altro bloccare. Mentre in linea di principio è possibile scrivere (ma non sovrascrivere) unità più piccole su dischi flash, puoi sempre e solo cancellare blocchi enormi, è come funziona l'hardware. Questo è il motivo per cui gli SSD vanno molto meglio con enormi scritture sequenziali.