scambia partizione vs file per prestazioni?


62

Cosa è meglio per le prestazioni? Una partizione più vicina all'interno del disco avrà tempi di accesso più lenti e dobbiamo attendere che l'unità passi tra il sistema operativo e le partizioni di swap.

D'altra parte, una partizione di swap ignora tutto il filesystem consentendo le scritture direttamente sul disco, che può essere più veloce di un file.

Qual è il compromesso delle prestazioni?

Quanto fa la differenza avere un file di scambio di dimensioni fisse?

È un caso che sarà più lungo passare alla partizione di swap, ma le prestazioni saranno migliori mentre è sulla partizione di swap che se fosse stato un file di swap?


Solo per curiosità. Potete fornire dettagli di sistema come versione del kernel, RAM, partizione e schema del filesystem?
Viky,

Su quale sistema operativo stai cercando?
Mathieu Chateau,

4
Per informazioni su Linux, vedi lkml.org/lkml/2005/7/7/326
Adam Monsen,

Qualche aggiornamento per la domanda risponde?
Kokbira,

Risposte:


29
  1. Sui dischi rigidi, la velocità effettiva e la ricerca sono spesso più veloci verso l'inizio del disco, poiché i dati vengono archiviati più vicino all'area esterna del disco, che ha più settori per cilindro. Pertanto, la creazione dello swap all'inizio del disco potrebbe migliorare le prestazioni.

  2. Per un kernel Linux 2.6, non vi è alcuna differenza di prestazioni tra una partizione di swap e un file di swap non frammentato . Quando una partizione / file di swap è abilitato da swapon, il kernel 2.6 trova su quale disco è archiviato il file di swap, così che quando arriva il momento di scambiare, non deve assolutamente occuparsi del filesystem.

Pertanto, se il file di scambio non è frammentato, è esattamente come se ci fosse una partizione di scambio nella stessa posizione. In altre parole, otterresti prestazioni identiche se utilizzassi una partizione di swap grezza o la formattassi con un filesystem e poi creassi un file di scambio che riempiva tutto lo spazio, poiché in entrambi i dischi c'è un'area contigua utilizzata per lo scambio, che il kernel usa direttamente.

Quindi, se si crea il file di scambio quando il filesystem è aggiornato (assicurandosi così che non sia frammentato e all'inizio del volume), le prestazioni dovrebbero essere identiche ad avere una partizione di swap appena prima del volume. Inoltre, se si creasse il file di scambio dire nel mezzo del volume, con i file su entrambi i lati, si potrebbero ottenere prestazioni migliori, dal momento che si cerca meno di scambiare.

Su Linux, se il file di swap viene creato non frammentato e mai espanso, non può essere frammentato, almeno con normali filesystem come ext3 / 4. Userà sempre gli stessi blocchi del disco, che sono contigui.

Concludo che l'unico vantaggio di una partizione di swap dedicata è la non frammentazione garantita quando è necessario espanderla; se lo swap non verrà mai espanso, un file creato su un nuovo filesystem non richiede una partizione aggiuntiva.


5
L'unica cosa da aggiungere qui è che se la macchina è configurata per "sospendere su disco" ciò che sta realmente accadendo è che le cose in memoria sono scritte per lo scambio. Affinché ciò funzioni, lo swap deve trovarsi sulla propria partizione in quanto lo swap non può trovarsi su un filesystem attivo affinché ciò avvenga. Pertanto, se si dispone di un server, probabilmente non si utilizza questa funzione e si potrebbe tranquillamente utilizzare un file di scambio. Se hai un laptop, probabilmente vuoi una partizione di swap in modo da poter "sospendere il file" per l'ibernazione.
Nathan S. Watson-Haigh,

@ NathanS.Watson-Haigh Cosa succede con i dati che sono già in scambio? Non può essere gettato via.
XTF,

3
@ NathanS.Watson-Haigh Puoi collegare una fonte? Ubuntu 17.04 utilizza un file di scambio per impostazione predefinita. Sarebbe sorprendente se non potesse "sospendere su disco".
Matthias Weiler,

22

In realtà non fa molta differenza se non si utilizzano file sparsi .

La creazione di un file "normale" con dd alloca il file (se possibile) in una sola esecuzione, mentre la creazione di un file sparse ti dirà che hai un file da 10 GB in giro ma che non sta effettivamente occupando tutto lo spazio. Non sono del tutto sicuro che mkswap non alloca comunque lo spazio, ma in genere un file di swap cresce nel tempo e quindi non alloca un settore continuo (come parte del disco), ma alloca i blocchi secondo necessità che portano a frammentazione nel tempo (ovviamente a seconda dell'utilizzo del disco)

Internamente il kernel Linux accederà ai blocchi sottostanti di un file di scambio più o meno direttamente - Non riesco a trovare il link in questo momento cosa succede sotto il cofano, devi fidarti di me su questo a meno che qualcuno non trovi qualcosa di più ufficiale. Tutto quello che posso venire in questo momento è:

questo vale solo per la linea 2.6 di kernel Linux.

Se vuoi prestazioni ottimali (e che cos'è, davvero? ... lo scambio è lento, punto. Aumenta la RAM in modo da non scambiare per le migliori prestazioni), vorrai usare una partizione.


18
Le versioni moderne di swapon si rifiuteranno completamente di lavorare con file sparsi formattati come swap, citando che il file ha buchi.
Tim Post

3

Questa è una domanda interessante e ho letto molto sulla stessa cosa. Generalmente una partizione di swap è migliore di un file a causa del filesystem sottostante. Ma se hai sempre bisogno di aumentare le dimensioni del tuo swap, il file è un'opzione migliore. Fino al kernel 2.4 è stato considerato che una partizione di swap è più veloce di un file, ma ora con i miglioramenti del kernel 2.6, le prestazioni sono quasi le stesse.

Qualcosa che ho trovato anche su Internet.

http://www.go2linux.org/swap-file-vs-swap-partition

e

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html


Nessuno di questi link spiega in realtà i motivi alla base delle loro decisioni.
Bill Gray,

Il ragionamento è che il file avrà il sovraccarico del filesystem sottostante. Se si crea un file, potrebbe essere frammentato. e a seconda del file che viene memorizzato nella cache su swap, le letture potrebbero essere lente rispetto a un'intera partizione che è un file system di swap a sé stante.
Viky,

Ho provato a scavare ulteriormente e ho trovato l'articolo relativo sul wiki. Solo per assisterti ci sono alcuni parametri di ottimizzazione dello swap che puoi controllare. Controlla anche la spiegazione in fase di implementazione per Linux. Potrebbe aiutare. en.wikipedia.org/wiki/Paging
Viky,

Ho seguito una delle citazioni sul link wiki sopra menzionato e ho trovato un thread interessante sullo stesso problema. Potrebbe voler dare un'occhiata. lkml.org/lkml/2005/6/28/427
Viky

Ho menzionato il sovraccarico del filesystem nella mia domanda, ma non è tanto un blocco delle prestazioni quanto lo è avere una partizione vicino al disco interno. Questo ritardo sarebbe notevole rispetto al sovraccarico del filesystem.
Bill Grey,

2

Penso che allo stadio siamo adesso, a meno che tu non stia eseguendo un laptop con una configurazione che scriva i dati sullo swap quando sospende / dorme, lo swap dovrebbe davvero essere considerato "ultima risorsa". La tua scommessa migliore è mettere abbastanza RAM in una scatola in modo che non scorra mai sul disco.

Detto questo, una partizione è probabilmente il modo migliore, per quanto riguarda le prestazioni, sebbene un file sia più flessibile. Assicurati solo che si trovi su un mandrino da 7200 giri / min.


1
Perché una partizione dovrebbe essere migliore dal punto di vista delle prestazioni, quando i tempi di accesso possono essere più di un fattore di ritardo?
Bill Gray,

5
Perché l'uso di un file può richiedere più movimenti di testina, perché quando si trova la pagina per leggere / scrivere i dati potrebbero trovarsi ovunque nel filesystem, quindi potrebbe essere necessario cercare le strutture fs mentre con una partizione di swap ogni pagina sarà in una posizione nota all'interno del partizione. Ciò rende il tempo di accesso (in relazione alla velocità effettiva) un fattore di differenziazione.
David Spillett,

2
"Non configurare lo scambio a meno che non sia necessario il letargo" è una vista controversa. A volte, quando il sistema è in esaurimento, lo scambio di memoria reale può consentire il ripristino del sistema. Non avere lo swap può limitare l'esecuzione di programmi che eseguono enormi allocazioni di memoria ma che in realtà non la toccano (ad esempio alcuni strumenti di debug). A volte una regione di memoria occupata ma inattiva viene utilizzata meglio come cache del disco e ciò può consentire tale compromesso solo se è disponibile lo scambio. Vedi unix.stackexchange.com/questions/2658/… per la discussione.
Anon,

1
Cosa ha detto @Anon. Chrome è un famigerato porco di memoria e, anche con <100 schede, il mio laptop da 16 GB non risponde per diversi minuti quando l'utilizzo della memoria è di circa il 90% e non è presente alcun file di scambio. Sorprendentemente, Ubuntu non ha alcun meccanismo incorporato per avvisare l'utente che il sistema operativo sta esaurendo la memoria .
Dan Dascalescu,

2

L'idea sul nostro lavoro è che dal momento che un file Swap può diventare frammentato e la frammentazione rallenta l'accesso allo scambio, una partizione è un approccio migliore. Naturalmente, definire un file di scambio di dimensioni statiche fa la stessa cosa, ma questo sembra soggettivamente più ordinato.

Questo approccio è l'unico vero modo? Probabilmente no, poiché la pratica è stata stabilita quasi 10 anni fa. L'unico grande cambiamento nella tecnologia di azionamento negli anni successivi è la complessità dei controller RAID che utilizziamo (non siamo ancora abbastanza ricchi per gli SSD). L'aumento delle dimensioni dell'unità significa che la partizione di swap che creiamo è più vicina all'inizio dell'unità di quanto non fosse quando le unità da 18 GB erano in dotazione standard, quindi le velocità di scambio sono persino più veloci di quanto non fossero in passato.

Ovviamente, sui nostri sistemi Windows basati su ESX, la posizione del file di scambio è completamente, completamente discutibile. Esistono così tanti livelli di virtualizzazione tra il file di scambio e i piatti del disco fisico che non importa. Ma lo manteniamo su una partizione separata perché è solo lo standard.


4
Un file di scambio non viene frammentato, poiché il kernel utilizza un approccio mmap diretto e non aumenterà o ridurrà mai il file. +1 però per il tuo commento sulla virtualizzazione: spesso non importa.
parasietje,

0

L'uso di un file di scambio potrebbe usare un po 'di memoria in più per la traduzione da file a memoria. Stiamo parlando di meno di 1 MB di memoria per 1 GB di swap. La cache del file system NON memorizza nella cache i dati scambiati, solo i dati dell'organizzazione, che dovrebbero essere la maggior parte dei requisiti di memoria extra.

Oltre a ciò, dubito che perderai qualsiasi prestazione ragionevole, tranne forse una volta ogni 1000 volte in una singola ricerca di testa aggiuntiva.

Fatto curioso, l'uso di zswap insieme a un file di scambio in modo dinamico si traduce in un'incredibile accelerazione delle operazioni di scambio a costi molto bassi mentre non viene utilizzato.


1
Potete fornire qualsiasi tipo di giustificazione per i vostri reclami? Questo sembra piuttosto aneddotico.
austinian,
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.