Disabilita lo scambio di memoria inattiva

7

Sfondo:

OSX conserva alcune informazioni nella RAM che non è più utilizzata, ma è stata recentemente utilizzata. Questa è chiamata memoria inattiva e ha lo scopo di migliorare l'esperienza dell'utente accelerando alcune azioni:

For example, if you've been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. Inactive memory is available for use by another application, just like Free memory. However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading it from the slower drive.

Sembra discutibile (quanto puoi velocizzare Mail su un computer quad-core?), ma almeno questo non potrebbe probabilmente ferire poiché tale memoria può essere trattata come una memoria libera! In realtà, può :

In OS X, when the number of pages in the free list dips below a computed threshold, the kernel reclaims physical pages for the free list by swapping inactive pages out of memory.

Questo mi fa dubitare che la gestione della memoria di OSX sia effettivamente superiore; dopo tutto la stessa pagina menziona che

Paging of any kind... affects performance negatively because it forces the system to spend a lot of time reading and writing to disk. Reading a page in from the backing store takes a significant amount of time and is much slower than reading directly from RAM. If the system has to write a page to disk before it can read another page from disk, the performance impact is even worse.

Problema:

Questo è probabile che si verifichi la memoria inattiva e il successivo peggioramento delle prestazioni, anche durante operazioni banali come la navigazione multi-tab, anche se il numero di schede aperte contemporaneamente è mantenuto entro limiti ragionevoli (sia Safari che Chrome sembrano essere colpevole di aggiungere alla memoria inattiva ogni volta che si chiude una scheda).

La macchina diventa difficilmente utilizzabile quando questo accade - anche aprendo Terminal e spurgo memoria può richiedere alcuni minuti.

Domanda:

È possibile disattivare la memoria inattiva? Oppure, se la memoria non attiva non è essenziale, può essere disabilitata completamente?

In alternativa, è disponibile un daemon o un'app di Apple che monitora l'utilizzo della memoria inattiva (un ossimoro OSX) e quando supera una quantità arbitraria (mezzo concerto?) a purge viene eseguito?

    
posta o.v. 11.08.2012 - 09:25
fonte

2 risposte

8

Ho cercato questa stessa domanda per un po 'di tempo, e sono giunto alla conclusione che mentre ci sono molte cosiddette "soluzioni" offerte in vari luoghi, nessuno di loro risolve veramente il problema o fa i sintomi va via. Il meglio che ho trovato sono le tecniche che cambiano quando viene scambiata la memoria inattiva, come l'uso del comando purge a cui si fa riferimento. Credo che MacLemon sia corretto che lo swapping possa essere disabilitato solo nella sua interezza e non in modo selettivo, e quindi disabilitare lo swap della memoria inattiva equivarrebbe praticamente a disabilitare completamente la memoria virtuale, il che potrebbe essere una soluzione praticabile su una macchina con grandi quantità di RAM, ma non è pratico su macchine con una capacità di RAM massima bassa, come MacBook o Minis.

La ragione per cui nessuna delle soluzioni di eliminazione ad hoc rende la situazione significativamente migliore è che ci sono solo due modi per forzare OS X a cancellare la memoria inattiva: il comando purge , o forzare l'allocazione di tutta la memoria libera ( e dato che non sono sicuro di quale metodo purge usi, questi due potrebbero effettivamente essere più o meno gli stessi). purge , come hai detto, richiede una quantità di tempo non trascurabile da completare. L'allocazione di tutta la memoria libera accelera semplicemente il processo mediante il quale il contenuto della memoria inattiva viene scambiato in modo naturale, e quindi occupa ancora la stessa grande quantità di risorse di sistema. L'unico vantaggio di una di queste soluzioni è che ti permettono di scegliere quando avviene lo swapping, quindi può essere fatto prima che tu stia normalmente cercando di allocare quella memoria a qualcos'altro. Se ciò ti è effettivamente utile dipende da diversi fattori, quindi il modo più semplice per scoprirlo è provarlo.

Ho provato alcune delle utilità di cancellazione della memoria disponibili, e ho scoperto che per me forzare manualmente lo swap inattivo richiede un monitoraggio più attivo dei livelli di memoria di quanto sia pratico mentre sto effettivamente lavorando, e utilizzando un programma di utilità che forza automaticamente lo scambio quando la memoria libera scende al di sotto di una certa soglia non è meglio che lasciare che il sistema operativo lo faccia da solo, poiché non ho ancora alcun controllo su quando si verificherà lo scambio e le mie app SPOD. Quindi, mentre c'è un'app che farà esattamente quello che ti chiede la tua domanda alternativa, ciò non rende la situazione meno dolorosa.

Fino a quando il team di sviluppo del sistema operativo di Apple non deciderà che il sistema di gestione della memoria non funziona come previsto, e troveranno un modo per farlo funzionare correttamente, l'unica vera soluzione è identificare quali app generano il più inattivo memoria e smetti di usarli. Nella mia situazione, questo ha significato cambiare i browser web. Ne ho testato una varietà, e Chrome è finora quello che sembra generare la memoria meno attiva, probabilmente in parte perché ogni scheda e ogni estensione vengono eseguite come processo separato, consentendo alla gestione della memoria nativa del sistema operativo di trattare ciascuna uno separatamente in termini di prioritizzazione dello scambio. Safari è il peggiore che abbia mai provato; iniziando con Safari 5.1, potrei aprire alcune schede, fare assolutamente nulla e osservare la memoria inattiva aumentare rapidamente in Activity Monitor: passerebbe facilmente da < 1gb inattivo a > 3gb inattivo entro circa cinque minuti, esegui il ciclo di swap e poi fare la stessa identica cosa (Certo, la memoria che non sta facendo nulla è esattamente ciò che la rende inattiva, ma non dovrebbe creare più memoria inattiva di quella che è stata allocata attiva in primo luogo.) Safari 6 sotto Mountain Lion è un po 'meglio, ma non meglio che valga la pena di tornare indietro. Firefox, non essendo basato su WebKit, dovrebbe essere migliore di Safari o Chrome, ma ha il suo retaggio di problemi di gestione della memoria, inclusa una cronologia delle perdite di memoria, che non lo rendono migliore nella pratica.

Quello che risolverebbe davvero il problema è se ci fosse un'opzione, probabilmente un'opzione nascosta nel sistema operativo, dicendo al sistema operativo di scaricare semplicemente il contenuto della memoria inattiva quando necessario invece di scambiarne il contenuto su disco. Ma non mi aspetto che Apple possa mai rendere disponibile tale opzione.

    
risposta data 26.11.2012 - 08:33
fonte
5

Quanta RAM ha il tuo Mac? Inoltre, i browser (specialmente quelli Webkit) sono noti per utilizzare enormi quantità di memoria in questi giorni. La memoria inattiva è messa a frutto e si oppone alla RAM libera che si trova solo in quel punto. Nel caso di un browser, questo ti consente di annullare la chiusura di una scheda e di conservarne la cronologia, ecc.

Puoi disabilitare completamente lo scambio di memoria eseguendo sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist e un riavvio. Non puoi disattivare in modo selettivo lo swap.

Puoi annullare ciò eseguendo sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist e riavviandolo di nuovo.

    
risposta data 23.11.2012 - 12:15
fonte

Leggi altre domande sui tag