Differenza di prestazioni tra ramfs e tmpfs


23

Devo installare un sistema di archiviazione in memoria per circa 10 GB di dati, costituito da molti file singoli (immagini) da 100 kb. Ci saranno molte letture e scritture abbastanza periodiche (aggiunta di nuovi file, eliminazione di quelli vecchi).
Ora, so che tmpfs si comporta come un normale file system per il quale puoi, ad esempio, controllare lo spazio libero / usato con df , che è una bella caratteristica da avere. Tuttavia sono interessato se ramfs offrirebbe alcuni vantaggi in termini di velocità delle operazioni di I / O. So che non posso controllare la dimensione della memoria consumata quando utilizzo ramfs e che il mio sistema può bloccarsi se consuma completamente la RAM libera, ma questo non sarà un problema in questo scenario.

Per riassumere, sono interessato:
- Prestazioni sagge, che è più veloce: ramfs o tmpfs (e forse perché)?
- Quando tmpfs usa lo spazio di swap? Sposta i dati già salvati per lo scambio (nella RAM libera per altri programmi attualmente in esecuzione) o solo i nuovi dati se in quel momento non è rimasta RAM libera?


Uhm, quanta RAM c'è nel server?
ewwhite,

1
Il server ha un totale di 16 GB di RAM. Vale anche la pena notare che non ho uno storage SSD ma un singolo HDD a 7200 rpm. Questo è il motivo per cui sto pensando di utilizzare un qualche tipo di memoria RAM.
Ivan Kovacevic,

Risposte:


21

La mia raccomandazione:

Misura e osserva l'attività della vita reale in condizioni normali.

È improbabile che questi file siano TUTTI necessari e serviti sempre dalla cache. Ma c'è un simpatico strumento chiamato vmtouch che può dirti cosa c'è nella cache in un dato momento. Puoi anche usarlo per bloccare alcune directory o file nella cache. Quindi vedi come appaiono le cose dopo un uso regolare. L'uso di tmpfs e ramfs non è necessario per questa situazione.

Vedi: http://hoytech.com/vmtouch/

Penso che rimarrai sorpreso nel vedere che probabilmente i file più attivi risiederanno già nella cache.


Per quanto riguarda i tmpfs rispetto ai ramfs, non vi è alcuna differenza di prestazioni apprezzabile. Ci sono differenze operative. Un caso d'uso reale è Oracle, in cui è stato utilizzato ramfs per consentire a Oracle di gestire i dati nella RAM senza il rischio che vengano scambiati. I dati di tmpfs possono essere scambiati sotto pressione della memoria. Ci sono anche differenze nel ridimensionamento e nella modifica delle impostazioni al volo.


1
Piccola utility fantastica! +1
Janne Pikkarainen,

1
@ewwhite Ottima risposta. In uno dei nostri casi, qualche anno fa, abbiamo effettivamente scoperto che i file maggiormente utilizzati risiedono già nella cache. Suggerimento: i file system oggigiorno sono molto più intelligenti di quanto si pensi.
giannisapi,

13

Non pensarci troppo. Inserisci abbastanza RAM nel tuo sistema e lascia che la cache del disco del kernel si occupi delle cose per te. In questo modo si ottiene il vantaggio delle letture provenienti direttamente dalla memoria, pur essendo in grado di conservare i dati sul disco.


1
Il mio sistema attualmente ha 16 GB di RAM. È una semplice installazione Debian che esegue Nginx per servire quelle immagini. Ho una connessione di rete da 1 Gbit che sarà sempre sotto carico al 100%, servendo quelle immagini senza un ordine particolare. Pensi che il kernel caricherà comunque tutti quei 10 concerti di immagini nella cache in questo scenario?
Ivan Kovacevic,

3
Sì, se nel sistema è presente RAM sufficiente e altre applicazioni sul server non competono per le risorse RAM, tali file rimarranno nella cache.
EEAA

2
Sono stato in amministrazione di Unix per ~ 15 anni e non ho mai incontrato una situazione in cui tmpfs / ramfs avrebbe fornito alcun vantaggio rispetto alla cache fs del kernel nativo. Questo non vuol dire che non esistono situazioni là fuori dove sarebbero giustificate, ma sono piuttosto rare. In genere se hai bisogno di cache RAM per cose, si utilizza un livello di cache appositamente costruito (Redis / Memcache / ecc.).
EEAA

4
La memorizzazione nella cache del disco funzionerà sicuramente nel caso in cui le immagini debbano essere lette, ma tmpfs o ramfs potrebbero ancora essere utili se si desidera accelerare molte scritture casuali / piccole ma sono legate a un disco lento con I / casuale O. Tieni presente che se la macchina si arresta in modo anomalo o subisce un'interruzione di corrente, il contenuto di tmpfs andrà via poiché erano (solo) in memoria.
Martijn,

1
@Martijn ha ragione. tmpfs e ramfs sono davvero utili. Ad esempio, sto facendo una riscrittura intensiva (filtro-ramo) di un repository git. Farlo in memoria è più veloce che farlo sul mio SSD. La memorizzazione nella cache aiuta con letture e non scritture, poiché (normalmente) Linux deve soddisfare alcune garanzie sulla permanenza delle operazioni del disco.
Paul Draper,

7

1) benchmark delle prestazioni.

Usando questa pagina come riferimento, ho fatto un confronto I / O tra tmpfs e ramfs, e i risultati sono che è praticamente identico in termini di prestazioni:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Secondo questa pagina , tmpfs usa swap e ramfs non usa swap.


2
La tua risposta è sulla buona strada. Tuttavia, non sarei d'accordo con la tua conclusione riguardo alle prestazioni, i tuoi test mostrano che ci sono differenze di 0,2 GB / se 0,1 GB / s a ​​favore di ramfs. Credo che questo dovrebbe essere testato ulteriormente per fornire un campione statistico valido. Riguardo a 2) Sì, questo è noto, tuttavia avrei desiderato avere una visione migliore di esattamente quando viene utilizzato lo swap.
Ivan Kovacevic,

se abbiamo fatto questo benchmark un sacco di volte con file di dimensioni diverse, non credo che vedremo una differenza. noterai che quando ho aumentato le dimensioni di quattro volte, la differenza si è effettivamente ridotta anziché allargarsi.
Michael Martinez,

1
Che dire del caso in cui hai un sacco di piccoli file. Ad esempio, scrivendo milioni di file da 100-200 kb. Inoltre ricevi ripetutamente 0,2 GB / s di differenza per le stesse dimensioni del file? Il che indicherebbe sicuramente la differenza di prestazioni. Probabilmente lo proverò io stesso quando è nel mio programma. Ma è per questo che l'ho chiesto qui, quindi potrei forse cancellarlo dall'elenco delle cose da fare se qualcun altro lo avesse già fatto.
Ivan Kovacevic,

Sì, l'unico modo per saperlo con certezza è fare i test.
Michael Martinez,

1

Se hai una quantità sufficiente di RAM installata per ospitare i vari buffer del kernel, le applicazioni si accumulano e accumulano, la normale cache del file system e tutti i file che intendi inserire, ramfsnon dovrebbero mai essere più lenti di tmpfsquanto non ci sia il rischio di I / O fisico in base alla progettazione. Gli I / O fisici sono senza dubbio la causa principale del degrado delle prestazioni in quell'area.

Tuttavia, se non hai installato quella quantità di RAM installata, l'utilizzo ramfspotrebbe e probabilmente sarà più lento rispetto a tmpfsquando quest'ultimo utilizza l'euristica della memoria virtuale per decidere cosa dovrebbe essere meglio sul disco (cioè nell'area di scambio) rispetto a cosa dovrebbe essere su RAM mentre con tmpfs, i dati del tuo file system sono bloccati sulla RAM che potrebbe essere uno spreco di risorse.

Per rispondere alla seconda domanda, sì, per prima cosa tmpfsverranno spostati i vecchi dati nell'area di scambio, non l'ultima "calda".

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.