Apparentemente lo swapping è accaduto quando le pagine RAM inattive erano effettivamente attive.
( Aggiornare: come è stato chiarito in un commento, questo non è il tuo caso. Quindi le persone con lo stesso problema possono salta in avanti alla regola orizzontale .)
Cioè hai avuto molti programmi in esecuzione e il kernel ha scambiato alcune pagine. Quindi hai abbandonato alcuni programmi. Il kernel contrassegna le proprie pagine RAM come inattive. Ma non rimpiazzerà le pagine nella RAM finché non saranno necessarie queste pagine. Ciò si traduce in avere pagine sia inattive che scambiate.
Perché non scambiare preventivamente le pagine? Perché quello sarebbe scommettere contro le probabilità: nel lungo periodo perdi. Pensiamo ad un esempio semplificato: due programmi A e B che non si adattano alla RAM contemporaneamente. Il programma A è ancora in esecuzione e tutte le pagine sostituite appartengono a A. Il programma B è stato abbandonato e tutte le pagine inattive appartengono a B.
Se il kernel scambia preventivamente-in pagine A e immediatamente dopo:
- il programma A deve accedere alle sue pagine - & gt; Vinci - le pagine sono già nella RAM.
- lanci di nuovo B - & gt; Perdi - hai "pagato" il costo per portare le pagine in RAM e ora devi rimandarle indietro.
- lanci un altro programma C - & gt; Si perde se A e C non si adattano nella RAM allo stesso tempo. Se si adattano, sei pari.
Tenere anche conto del fatto che lo swapping-out (scrittura su disco) è più costoso dello swapping-in (lettura dal disco). Il che rende questa "scommessa" ancora più poco attraente.
In breve: fidati del tuo kernel e non cercare di superarlo.
Aggiornare: Risulta che la memoria inattiva non funziona come Utilizzo di Activity Monitor per leggere la memoria di sistema l'articolo ha portato molte persone a credere che funzioni. La definizione fornita nell'articolo per la memoria non attiva è corretta:
Questa informazione è nella RAM ma non viene utilizzata attivamente, lo è stata
usato di recente.
Ma il seguente esempio è totalmente fuorviante e troppo semplificato (come il mio esempio per essere sincero):
Ad esempio, se hai utilizzato Mail e poi lo hai chiuso, la RAM è quella
La posta utilizzata era contrassegnata come memoria non attiva. La memoria inattiva è
disponibile per l'uso da un'altra applicazione, proprio come la memoria libera.
Tuttavia, se si apre Mail prima che la sua memoria inattiva venga utilizzata da a
applicazione diversa, Mail si aprirà più rapidamente perché è inattivo
la memoria viene convertita in memoria attiva, invece di caricarla dal
guida più lenta.
Ho cercato più risorse online e ho finito per questo thread nella mailing list del kernel di darwin che è piuttosto informativo. Citando Jim Magee (dal team di Darwin - Penso):
In breve, il sistema VM del kernel quando si gestiscono le scansioni della pressione della memoria
attraverso le pagine in uso e cerca di mantenerli in equilibrio tra
marcature attive e inattive. Le pagine inattive vengono scansionate per essere riutilizzate
mentre contrassegnato come inattivo. Se sono stati riutilizzati, sono contrassegnati come
attivo e qualche altra pagina deve passare dallo stato attivo a quello inattivo a
rilevare se è in uso attivo. Quindi, inattivo è un termine improprio. È
abbreviazione di "possibilmente inattivo, proviamo a verificarlo".
Come hai scoperto, il bilanciamento interno per cui (attualmente) ci battiamo è
circa 2/3 attivo vs 1/3 inattivo ...
Questo spiega il comportamento che osservi. Cioè le pagine inattive che vedi appartengono a programmi in esecuzione che non sono stati usati di recente. Quindi, quando si attiva un nuovo programma, le pagine inattive vengono scambiate. Allo stesso tempo, le pagine di altri programmi sono contrassegnate come inattive per mantenere il rapporto 2/1 tra attivo e inattivo.
Il filo contiene anche alcuni suggerimenti per saperne di più sugli interni di darwin. Ci sono anche alcuni suggerimenti nel caso in cui hai iniziato a studiare l'utilizzo della memoria a causa di problemi di beachball (che di solito hanno poco a che fare con esso).
La conclusione è la stessa: fidati del tuo kernel e non cercare di superarlo. :-)