Miglioramento dell'IO con FlashCache


14

Ho un server con 2 HDD (2x 1 TB), in esecuzione in RAID 1 (SW-RAID). Voglio migliorare le prestazioni di IO usando flashcache. Ci sono macchine virtuali KVM in esecuzione su di esso, usando LVM.

A tal proposito, ho le seguenti domande:

  • Funzionerà anche questo? flashcachefunziona per i dispositivi a blocchi, tuttavia queste sono tutte macchine virtuali con la propria configurazione.
  • Quanto mi aspetto di aumentare le prestazioni? La maggior parte delle macchine virtuali esegue siti Web e alcuni giochi host.
  • Quanto deve essere grande l'SSD? Avere un SSD più grande aumenterebbe le prestazioni poiché è in grado di memorizzare nella cache più file?
  • Cosa succede se l'SSD muore? Recupererei i flashcachefile dal tradizionale HDD e potrei semplicemente sostituire l'SSD?
  • Quanto più veloce sarebbe writebackrispetto a writethroughe writearound?

Purtroppo non ho accesso a un sistema di test, quindi potrei installarlo flashcachesu un server live senza smontare i dischi? Ho trovato un ottimo tutorial qui che avrei usato.


Penso che apprezzeresti prestazioni più costanti se potessi usare SSD come unità principali.
ewwhite,

Nessun accesso a un sistema di test? Tutto ciò che serve è una workstation con un HDD, un SSD e una macchina virtuale con due dischi virtuali (uno residente su ciascun dispositivo). I sistemi di produzione non sono pensati per essere utilizzati come laboratori di apprendimento.
Skyhawk,

Link è morto su quel tutorial che hai citato. Qualche altro posto in cui ho potuto trovare quelle informazioni?
Thaeli

Risposte:


18

Flashcache, per coloro che non l'hanno mai visto prima, è un metodo per estendere la block-cache di Linux con un'unità SSD. È più economico che eseguire un server con mezza TB di RAM solo per la memorizzazione nella cache.

Funzionerà anche questo?

Dovrebbe. La block-cache di Linux funziona memorizzando nella cache i blocchi accessibili , non i file . Finché non stai dando alle macchine KVM l'accesso diretto ai dispositivi a blocchi (non lo sei), la Block Block Cache di Linux sarà in gioco. Tuttavia, se si sta dando macchine KVM accesso diretto del blocco-device la risposta non è meno chiaro.

Se stai usando dischi virtuali supportati da file, funzionerà sicuramente.

Se stai usando dischi virtuali con supporto LV, non lo so.

Quanto mi aspetto di aumentare le prestazioni?

Questo è qualcosa a cui non possiamo rispondere. Dipende da una varietà di cose. In astratto, otterrai le migliori prestazioni per ridimensionare il tuo SSD in modo che sia più grande del set attivo di blocchi. Se si ottiene una cache perfetta, le prestazioni saranno simili all'esecuzione dell'intero sistema su SSD. Cosa che effettivamente farai.

Quanto deve essere grande l'SSD?

Scoprire le dimensioni esatte di cui hai bisogno è qualcosa con cui non possiamo fare a meno. Più è meglio, ovviamente, ma trovare il rapporto esatto tra cache-SSD e archiviazione primaria non è una questione semplice.

A complicare ciò sono le scritture impostate per svuotare immediatamente, come alcune operazioni del file system e alcune configurazioni del database. Tali scritture verranno memorizzate nella cache solo brevemente e le loro prestazioni non saranno influenzate in alcun modo dalla presenza o dall'assenza di flashcache.

Cosa succede se l'SSD muore?

La stessa cosa accade quando dici a Linux di lasciare la cache, ma con una svolta. Con drop-cache, tutte le scritture non svuotate che si trovano nella block-cache verranno scaricate sul disco. Cosa succede quando l'SSD scompare dipende dalla modalità di memorizzazione nella cache :

Writethrough : tutte le scritture vengono scritte nella cache e nella memoria primaria in parallelo, quindi le possibilità di una perdita improvvisa dell'SSD che causa errori sulle macchine virtuali sono molto ridotte.

Writearound : tutte le scritture vengono scritte nella memoria principale e memorizzate nella cache solo quando vengono lette. Nessuna possibilità di errori nelle macchine virtuali.

Writeback : tutte le scritture vanno prima nella cache e vengono scritte nella memoria principale in background. La maggior parte delle probabilità di causare errori nelle macchine virtuali in caso di errore dell'SSD e non utilizzerei questa modalità in produzione.

Quanto più veloce sarebbe il writeback rispetto a writethrough e writearound?

Dipende da quanto stai scrivendo. Se le tue scritture saturano periodicamente lo spazio di archiviazione principale, l'aumento delle prestazioni potrebbe essere piuttosto significativo. Se per lo più sei letto con qualche scrittura, probabilmente non noterai miglioramenti.

Inoltre, il writeback è una cattiva politica per quello che stai facendo, quindi non usarlo.


1
Ciao amministratore di sistema, grazie per la risposta esaustiva. Non userò writebackpoiché potrebbe corrompere tutto senza un po 'di BBU. Dopotutto non userò affatto la cache SSD, ma solo un normale SSD. Grazie ancora!
Devator,

4

Sì, funzionerà bene finché utilizzerai i dispositivi a blocchi giusti. E c'è un trucco.

Quando LVM ricerca i PV, dovrebbe vedere la partizione attraverso il disco rigido stesso e anche attraverso il dispositivo "virtuale" di flashcache.

Un sintomo ovvio dovrebbe essere che gli strumenti LVM lamentano duplicati di PV.

La correzione, per evitare quegli avvisi e, cosa più importante, assicurarsi che il dispositivo flashcache sia utilizzato da LVM2, è quello di adattare il filtro /etc/lvm/lvm.conf.

La LVM.CONF(5)manpage lo spiegherà meglio di me, ma ti lascerò con un esempio, se tutti i volumi fisici sono supportati da flashcache:

filter = [ "a/.*dm.*/" ]


1

Alcune applicazioni aprono i file in modo non bufferizzato.

http://man7.org/linux/man-pages/man2/open.2.html

O_DIRECT (da Linux 2.4.10) Prova a minimizzare gli effetti cache dell'I / O verso e da questo file. In generale, ciò peggiorerà le prestazioni, ma è utile in situazioni speciali, ad esempio quando le applicazioni eseguono la propria memorizzazione nella cache. L'I / O dei file viene eseguito direttamente da / verso i buffer dello spazio utente. Il flag O_DIRECT da solo fa uno sforzo per trasferire i dati in modo sincrono, ma non fornisce le garanzie del flag O_SYNC che i dati e i metadati necessari vengono trasferiti. Per garantire l'I / O sincrono, è necessario utilizzare O_SYNC oltre a O_DIRECT. Vedi le NOTE di seguito per ulteriori discussioni.

Ad esempio, questo è molto comune per i database. Quindi ricontrolla se flashcache funziona con questo set di applicazioni.

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.