Perché la maggior parte delle persone consiglia di ridurre la swappiness a 10-20?

51

Ho visto in diversi siti che consigliano di ridurre la swappiness a 10-20 per prestazioni migliori.

È un mito o no? È una regola generale? Ho un portatile con RAM da 4 GB e SSD da 128 GB, quale valore consigli per la mia swappiness?

Grazie.

    
posta Saeed Zarinfam 05.09.2012 - 07:02

6 risposte

80

Perché la maggior parte crede che lo swapping = brutto e che se non si riduce lo swappiness, il sistema si scambierà quando non ne ha davvero bisogno. Nessuno di questi è veramente vero. Le persone si associano a volte in cui il loro sistema si sta impantanando - tuttavia, scambia per lo più perché il sistema si impantana, non il contrario. Quando il sistema esegue lo swap, avrà già preso in considerazione il costo delle prestazioni nella sua decisione di swap, e ha deciso che non farlo avrebbe comportato una penalità complessiva maggiore nelle prestazioni o nella stabilità del sistema, che potrebbero successivamente diventare evidenti.

Nel complesso, le impostazioni predefinite offrono buone prestazioni e stabilità generali. Consiglierei di lasciarlo al valore predefinito. Ci sono miglioramenti che potrebbero essere apportati al modo in cui lo swap funziona su sistemi desktop / interattivi, ma in generale il controllo swappiness non è la soluzione migliore: regolalo in una direzione e potresti risolvere un problema e creare altri problemi. È impallidito rispetto alla semplice installazione di più RAM.

Come Linux usa la RAM

Qualsiasi RAM che non viene utilizzata dalle applicazioni può essere utilizzata come "cache". La cache è importante per un sistema veloce e scorrevole, velocizzando sia le letture che le scritture su disco.

Se le tue applicazioni aumentano la loro memoria, al punto che stanno utilizzando quasi tutta la tua RAM, la tua cache si ridurrà e in media le operazioni del disco rallenteranno di conseguenza.

Se le applicazioni aumentano la loro memoria, usa ancora di più, supponendo che non ci sia spazio di scambio, finirai per esaurire la memoria e il tuo sistema dovrà uccidere i processi. I processi di uccisione sono peggiori di un rallentamento in quanto provoca instabilità.

Come Linux usa lo swap

Per combattere entrambi questi problemi, il tuo sistema può riassegnare alcune delle memorie di applicazioni usate raramente nello spazio di swap sul disco, liberando più RAM. Questo può impedire che i processi muoiano a causa dell'esaurimento della memoria e può recuperare un po 'di cache in modo che le operazioni del disco possano funzionare senza intoppi.

Questa riallocazione non viene eseguita in base a un taglio preciso. Non raggiungi una certa percentuale di allocazione, quindi Linux inizia lo scambio. Ha un algoritmo "fuzzy". Ci vuole un sacco di cose in considerazione, che possono essere meglio descritte da "quanta pressione c'è per l'allocazione della memoria". Se c'è molta "pressione" per allocare nuova memoria, aumenterà le probabilità che alcuni vengano scambiati per guadagnare più spazio. Se c'è meno "pressione" allora diminuirà queste possibilità.

Il tuo sistema ha un'impostazione "swappiness" che ti aiuta a modificare il modo in cui viene calcolata questa "pressione". Normalmente non è raccomandato modificarlo affatto. Lo swapping è nel complesso una cosa molto buona - qualsiasi penalizzazione occasionale delle prestazioni è destinata a essere compensata da un aumento della reattività e stabilità generale del sistema per una vasta gamma di compiti. Se riduci lo swappiness, lasci che la quantità di memoria cache si riduca di un po 'di più rispetto a quella che avrebbe altrimenti, anche quando potrebbe essere davvero utile. Rischi quindi di rallentare il tuo computer in generale. Se si arriva al punto di disabilitare completamente lo swap, si rischia che i processi vengano uccisi a causa dell'impossibilità di allocare memoria.

Che cosa sta succedendo quando il sistema è impantanato e si sta spostando pesantemente?

Lo swap è un'operazione lenta e costosa, quindi il sistema lo evita a meno che non calcoli che il compromesso nelle prestazioni della cache lo compenserà nel complesso, o se è necessario evitare i processi di abbattimento.

La maggior parte delle volte le persone guardano il loro sistema che sta massacrando il disco pesantemente e utilizzando un sacco di spazio di swap e colpa dello scambio per esso. Questo è l'approccio sbagliato da prendere. Se lo scambio ha raggiunto questo limite, significa che lo swapping è il tentativo del tuo sistema di gestire i problemi di memoria insufficiente, non la causa del problema.

E i sistemi desktop? Non richiedono un approccio diverso?

Gli utenti di un sistema desktop si aspettano che il sistema "si senta reattivo" in risposta alle azioni avviate dall'utente come l'apertura di un'applicazione, che è il tipo di azione che a volte può attivare uno scambio a causa dell'aumento di memoria richiesto .

Un modo per provare a modificare questo è ridurre il parametro swappiness che può aumentare la tolleranza del sistema alle applicazioni che utilizzano la memoria e stanno esaurendo lo spazio della cache.

Tuttavia, in una certa misura questo sta solo spostando i goalpost. L'applicazione potrebbe ora caricare senza un'operazione di scambio, ma lascerà meno spazio per la prossima applicazione che carica. Lo stesso scambio può avvenire solo più tardi, quando successivamente apri un'applicazione. Nel frattempo, le prestazioni del sistema sono solo leggermente più basse a causa della ridotta dimensione della cache. Pertanto, qualsiasi beneficio derivante dall'impostazione ridotta di swappiness può essere difficile da misurare, riducendo il ritardo di swapping in alcuni momenti ma causando altre prestazioni lente in altri momenti.Ridurre leggermente la swappiness può essere giustificato se sai cosa stai facendo, ma ridurlo a un minimo del 10% dovrebbe essere fatto con cautela, poiché questo può lasciare il sistema tollerante a dimensioni di cache molto basse e lasciare il sistema più soggetto a scambiare con breve preavviso.

Disattivare completamente lo swap dovrebbe essere evitato poiché si perde la protezione aggiuntiva contro le condizioni di esaurimento della memoria che possono causare l'arresto anomalo dei processi o la loro chiusura.

Il rimedio più efficace di gran lunga è installare più RAM se puoi permettertelo.

È possibile disabilitare lo swap su un sistema che ha comunque molta RAM?

Se disponi di una quantità di RAM maggiore di quella necessaria per le applicazioni, raramente avrai bisogno di scambiare. Disabilitare lo swap probabilmente non farà la differenza la maggior parte delle volte. Ma se hai un sacco di RAM, lasciare lo swap abilitato non avrà alcuna penalità perché il sistema non si scambia quando non è necessario.

Le uniche situazioni in cui vorrebbe fare la differenza sarebbero nella situazione improbabile che il sistema si trovi a corto di memoria e di conseguenza il sistema di cache viene ostacolato, ed è in questo tipo di situazione dove vuoi scambiare di più. Così puoi tranquillamente lasciare lo swap sulle sue normali impostazioni per una maggiore tranquillità senza che abbia un effetto negativo quando hai un sacco di memoria.

Ma come può swap accelerare il mio sistema? Non scambia le cose lente?

L'operazione di trasferimento dei dati dalla RAM allo swap è un'operazione lenta, ma è necessaria solo quando il kernel è abbastanza sicuro che il vantaggio complessivo derivante dal mantenimento di una dimensione della cache ragionevole sarà superiore a questo.

Una volta che i dati sono in scambio, quando esce di nuovo?

Una data parte della memoria tornerà fuori dallo swap non appena viene utilizzata, letta da o scritta. Tuttavia, in genere la memoria che viene scambiata è la memoria a cui non è stato effettuato l'accesso da molto tempo e che non dovrebbe essere presto necessaria.

Il trasferimento dei dati da swap richiede tanto tempo quanto metterlo lì. Il tuo kernel non rimuoverà i dati da esso se non è necessario. Mentre i dati sono in scambio e non vengono utilizzati, lascia più memoria per altre cose che sono in uso e più cache di sistema.

    
risposta data thomasrutter 05.09.2012 - 07:24
11

Su un normale desktop, hai 4-5 attività attive che consumano il 50-60% della memoria. Se si imposta swappiness su 60, allora circa 1 / 4-1 / 3 delle pagine task ACTIVE verranno scambiate. Ciò significa che, per ogni cambio di attività, per ogni nuova scheda che hai aperto, per ogni esecuzione di JS, ci sarà un processo di scambio.

La soluzione è quella di impostare lo swap su 10. Con osservazioni pratiche, questo fa sì che il sistema rinunci alla cache del disco io (che gioca poco o nessun ruolo sul desktop, poiché la cache di lettura / scrittura non è praticamente mai utilizzata. copiando costantemente file LARGE) invece di premere qualcosa in swap. In pratica, ciò significa che il sistema rifiuterà di scambiare pagine, tagliando invece la cache io, a meno che non colpisca il 90% della memoria utilizzata. E questo a sua volta significa un'esperienza desktop fluida, senza swapless.

Sul file server, tuttavia, imposterei swappiness a 60 o anche più, perché il server non ha enormi attività in primo piano attive che devono essere conservate nella memoria nel suo complesso, ma piuttosto molti processi più piccoli che stanno funzionando o dormire, e non cambiare davvero il loro stato immediatamente. Invece, il server spesso serve (perdonare) gli stessi identici dati ai client, rendendo le cache del disco molto più preziose. Quindi, sul server, è molto meglio sostituire i processi di sospensione, liberando spazio di memoria per le richieste di cache del disco.

Sui desktop, tuttavia, questa impostazione esatta porta a scambiare blocchi di memoria di applicazioni REALI, che quasi costantemente modificano o accedono a questi dati.

Stranamente, i browser spesso riservano grossi pezzi di memoria, che modificano costantemente. Quando tali blocchi vengono scambiati, ci vuole un po 'se vengono richiesti nuovamente - e allo stesso tempo, il browser continua ad aggiornare le sue cache. Che provoca enormi latenze. In pratica, resterai in attesa per 2 minuti per la singola pagina Web in una nuova scheda da caricare.

Il desktop non si preoccupa molto del disco io, perché il desktop raramente legge e scrive in cache ripetendo grandi porzioni di dati. Tagliare su disco io al fine di evitare lo swaping il più possibile è molto più preferibile per il desktop, piuttosto che avere il 30% di memoria riservata per la cache del disco con il 30% della RAM (piena di blocchi appartenenti alle applicazioni utilizzate attivamente) scambiata.

Basta avviare htop, aprire un browser, GIMP, LibreOffice - caricare alcuni documenti lì e quindi navigare per diverse ore. È davvero così facile.

    
risposta data Linux dude 02.06.2014 - 00:10
9

Se si esegue un server Java sul proprio sistema Linux, si dovrebbe davvero considerare di ridurre lo swappiness di molto rispetto al valore predefinito di 60. Quindi 20 è davvero un buon inizio. Lo swapping è un killer per un processo di raccolta dei rifiuti, perché ogni volta le raccolte devono toccare ampie parti della memoria del processo. Il sistema operativo non ha i mezzi per rilevare tali processi e ottenere le cose per loro. È consigliabile evitare di scambiare il più possibile per server di applicazioni produttivi.

    
risposta data Andreas 25.02.2014 - 13:22
4

Suggerirei di fare alcuni esperimenti mentre il monitor di sistema è aperto per vedere esattamente quanto carico è sotto la macchina, sto anche correndo con 4GB di memoria e un SSD da 128GB, quindi ho cambiato il valore di swappiness a 10 che non solo ha migliorato le prestazioni sotto carico ma come bonus aumenterà anche la durata del drive SSD in quanto subirà meno scritture.

Per un semplice video tutorial su come farlo con una spiegazione completa guarda il video di YouTube qui sotto

link

    
risposta data Tech-Compass 07.06.2014 - 18:20
1

Potrebbe essere che molti dei comportamenti di scambio percepiti all'avvio o all'apertura di programmi siano file di configurazione di lettura Linux ecc. da disco. Quindi forse è meglio guardare il programma di monitoraggio del sistema prima di assumere che l'accesso al disco rigido è dovuto allo scambio.

    
risposta data user1740850 24.04.2013 - 19:57
1

Voglio aggiungere una certa prospettiva da un ingegnere di Big Data Performance per dare agli altri un maggiore background sulla tecnologia 2017.

La mia esperienza personale è che mentre in genere ho disabilitato lo swap per garantire che i miei sistemi funzionino alla massima velocità, sulla mia workstation per un problema specifico, ho scoperto che lo swappiness di 1 e 10 porta al congelamento (per sempre) e lungo mette in pausa. Lo swappiness di 80 per questa particolare applicazione porta a prestazioni decisamente migliori e pause più brevi rispetto al default (60). Si noti che ho avuto 8 GB di RAM e 4x 256 GB di swap supportati da 1 HDD. Normalmente indicherò le statistiche precise osservate nei miei benchmark e le specifiche hardware complete, ma non ne ho ancora fatto ed è un desktop low-end recente che non è importante qui.

Ritornando alla mia ex azienda, il motivo per cui non abbiamo abilitato lo swappiness sui server Spark con [500-4TB] x [10-100] nodi è che abbiamo visto scarse prestazioni come segno per riprogettare la pipeline di dati e le strutture di dati in un modo più efficiente. Inoltre, non volevamo effettuare il benchmark degli HDD / SSD. Inoltre, lo scambio di molta RAM richiede 10-30 dischi per nodo con scritture parallele per ridurre al minimo il tempo di accesso al disco.

Oggi, 20 anni fa e 20 anni nel futuro, il caso rimarrà che alcuni problemi sono troppo grandi per la RAM. Con tempo e denaro infiniti, possiamo acquistare / noleggiare più hardware o ridisegnare qualsiasi processo per ottenere le prestazioni ad un livello desiderabile. Scambiare è solo un trucco per permetterci di ignorare il vero problema (non abbiamo abbastanza ram e non vogliamo spendere di più).

Per quelli che pensano che lo swappiness più elevato sia un cattivo consiglio, ecco una piccola prospettiva. In passato, le HD avevano solo pochi KB di cache, se presenti. L'interfaccia era IDE / Parallel ATA. Il bus della CPU era anche molto più lento insieme alla RAM e molte altre cose. In breve, i sistemi erano molto lenti (rispetto ad oggi) in ogni modo. Un paio di anni fa, gli HDD utilizzavano SATA3. Oggi usano il protocollo NVMe, che ha significativi miglioramenti della latenza. Le HD hanno molti MB di cache. E la parte più interessante è quando usi un SSD moderno (molto più stabile di lettura / scrittura, durata e perf) con NVMe o PCIe come memoria di scambio. È il miglior compromesso tra costo e prestazioni. Si prega di non provare questo con SSD economici o vecchi.

Swap + SSD! Con storage volatile ad alte prestazioni, consiglio vivamente di sperimentare con un valore swappiness elevato. Dipende principalmente dai modelli di accesso alla memoria (accesso casuale a tutta la memoria e accesso raramente alla maggior parte), utilizzo della memoria, se la larghezza di banda del disco è già saturata e costo effettivo del thrashing.

    
risposta data ldmtwo 25.04.2018 - 22:21

Leggi altre domande sui tag