bcache vs dm-cache: Cache SSD di Linux a confronto

11 min di lettura - 28 maggio 2026

hero section cover
Indice
  • bcache vs dm-cache: caching SSD su Linux
  • Come funziona bcache
  • Come funziona dm-cache
  • Modalità di caching
  • bcache vs dm-cache: quale utilizzare
  • Conclusione
Condividi

Confronto tra bcache e dm-cache per la cache SSD su Linux. Configurazione, prestazioni, modalità di caching e quando usarli.

bcache vs dm-cache: caching SSD su Linux

Gli SSD sono veloci ma costosi per gigabyte. Gli HDD sono economici ma lenti. Linux offre due strumenti a livello di kernel per combinarli: bcache e dm-cache. Entrambi utilizzano un SSD come cache trasparente davanti a un HDD più capiente, ma differiscono per architettura, requisiti di configurazione e prestazioni ottimali.


 

Come funziona bcache

Bcache è presente nel kernel Linux dalla versione 3.10 (giugno 2013). Opera a livello di blocco, quindi funziona con qualsiasi filesystem che supporti gli UUID.

Internamente, bcache utilizza una struttura ibrida B+ tree/log. Suddivide lo spazio di archiviazione SSD in bucket di dimensioni fisse (da 128K a 2MB), allineati ai confini dei blocchi di cancellazione. Questo converte le scritture casuali in sequenziali, riducendo l'amplificazione di scrittura e prolungando la durata dell'SSD. Le operazioni di I/O sequenziali superiori a 4MB bypassano automaticamente la cache, mantenendo l'SSD concentrato sui modelli di accesso casuale dove aggiunge più valore.

Bcache monitora inoltre la latenza dell'SSD in tempo reale. Se la latenza di lettura supera i 2 ms o quella di scrittura supera i 20 ms, limita il traffico per impedire che il dispositivo di cache diventi un collo di bottiglia.

Configurazione

Installare bcache-tools, quindi formattare il dispositivo di backup e il dispositivo cache:

make-bcache -B /dev/sdb          # format HDD as backing device
make-bcache -C /dev/sdc          # format SSD as cache device
echo <UUID> > /sys/block/bcache0/bcache/attach   # attach cache

La regolazione in fase di esecuzione avviene tramite l' /sys/block/bcache<N>/bcache/ interfaccia sysfs, dove è possibile regolare le modalità di caching, le soglie di I/O sequenziale e gli obiettivi di latenza. Per gli array RAID, utilizzare --data-offset per allinearsi alla larghezza dello stripe.

Il problema: la configurazione è distruttiva. Entrambi i dispositivi devono essere formattati come destinazioni bcache, quindi non è possibile aggiungere bcache a un filesystem esistente senza prima cancellarlo. Inoltre, i dispositivi bcache non possono essere ridimensionati dopo la creazione.

Prestazioni

Il consolidamento delle scritture di Bcache garantisce ottimi numeri di scrittura casuale. Nei benchmark, ha raggiunto circa 18.500 IOPS di scrittura casuale a 4K rispetto alle 12.200 IOPS del solo SSD grezzo. Il throughput di lettura casuale può raggiungere circa 1.000.000 di IOPS con hardware adeguato.

Per i carichi di lavoro crittografati, sovrapporre dm-crypt al /dev/bcache<N> dispositivo anziché crittografare singolarmente le unità sottostanti. In genere le prestazioni sono migliori perché bcache può comunque consolidare le scritture prima della crittografia.

Come funziona dm-cache

dm-cache è un target Device Mapper che si trova sopra un volume logico esistente. Utilizza tre sottodispositivi: un dispositivo di origine (HDD), un dispositivo di cache (SSD o NVMe) e un dispositivo di metadati che tiene traccia delle posizioni dei blocchi e degli stati di modifica. La politica di cache predefinita è smq (Stochastic Multi-Queue), che identifica i dati più utilizzati in carichi di lavoro misti.

Il vantaggio principale: dm-cache può essere sovrapposto a un volume LVM attivo senza distruggere i dati esistenti. È inoltre possibile ridimensionarlo utilizzando i comandi LVM standard.

Configurazione con LVM

Il modo pratico per configurare dm-cache è tramite lvmcache. La dmsetup è possibile, ma è soggetta a errori e non sopravvive ai riavvii. L'approccio LVM:

  1. Creare volumi fisici (PV) sia sull'HDD che sull'SSD.
  2. Aggiungere entrambi i PV a un unico gruppo di volumi (VG).
  3. Creare tre volumi logici: uno per i dati di backup (HDD), uno per la cache (SSD) e uno per i metadati (SSD).
  4. Unire i LV della cache e dei metadati in un pool di cache:
    lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv>
  5. Collegare il pool all'origine:
    lvconvert --type cache --cachepool <pool_lv> <data_lv>

Un aspetto da tenere presente: montare il filesystem tramite il suo /dev/mapper/ percorso, non tramite UUID. Il montaggio tramite UUID può bypassare il livello di cache e accedere direttamente al dispositivo di origine.

Prestazioni e memoria

In modalità writeback con un carico di lavoro Zipf di lettura/scrittura 90/10, dm-cache ha raggiunto velocità di lettura di circa 193 MB/s e velocità di scrittura di circa 21 MB/s. In un altro benchmark, la memorizzazione nella cache di un HDD da 100 GB con una partizione NVMe da 10 GB ha aumentato gli IOPS di scrittura casuale da 118 a 798.

Il compromesso è la memoria. L'overhead dei metadati di dm-cache dipende dalla dimensione del blocco. Una dimensione del blocco di 512 byte può consumare oltre 16 GB di RAM per 100 GB di cache. Aumentandola a 4.096 byte, l'utilizzo di memoria scende a circa 2 GB per 100 GB. Scegli una dimensione del blocco vicina alla tua dimensione media di I/O (64 KB è un punto di partenza ragionevole) e assicurati che sia un multiplo di 64 settori (32 KB), nell'intervallo compreso tra 32 KB e 1 GB.

I metadati vengono svuotati ad ogni scrittura FLUSH o FUA, o almeno una volta al secondo. Per garantire un'elevata disponibilità, esegua il mirroring del dispositivo dei metadati per evitare un singolo punto di errore.

Modalità di caching

Sia bcache che dm-cache supportano le stesse modalità di caching di base. La scelta influisce sia sulle prestazioni che sulla sicurezza dei dati.

ModalitàCome funzionaVelocitàRischio
Scrittura direttaLe scritture vengono eseguite contemporaneamente sia su SSD che su HDDSolo potenziamento della letturaBasso. L'HDD contiene sempre i dati attuali.
WritebackLe scritture vengono prima inviate all'SSD, poi trasferite all'HDDAumento della velocità di lettura e scritturaPiù alto. Un guasto dell'SSD prima del trasferimento comporta la perdita dei dati.
Bypass / PassaggioLe scritture bypassano completamente la cacheSolo potenziamento della lettura, usura ridotta dell'SSDBasso. L'HDD ha sempre i dati aggiornati.

Il writethrough è l'impostazione predefinita sicura per entrambi gli strumenti. Il writeback è più veloce ma comporta un rischio reale: se l'SSD si guasta mentre contiene dati non scaricati, tali dati andranno persi e il filesystem potrebbe essere danneggiato. Utilizza il writeback solo se disponi di SSD ridondanti o se puoi tollerare una perdita occasionale di dati.

bcache vs dm-cache: quale utilizzare

Fattorebcachedm-cache
Configurazione su dati esistentiDistruttiva (richiede la cancellazione)Non distruttivo (conversione online)
RidimensionamentoNon supportatoSupportato tramite LVM
Ottimizzazione della scrittura casualeForte (consolidamento delle scritture sequenziali)Standard
Bypass I/O sequenzialeAutomatico (>4 MB)Gestito dalla politica smq
Overhead di memoriaBasso (albero B+)Più elevato (dipende dalla dimensione del blocco)
MetadatiSul dispositivo di cacheDispositivo separato, può essere replicato

Utilizza bcache quando stai costruendo un nuovo sistema da zero e desideri le migliori prestazioni possibili per l'I/O casuale. È la scelta migliore per carichi di lavoro con un'elevata intensità di scrittura, come database e archiviazione VM, e per array RAID 6 in cui le penalità di scrittura casuale sono severe.

Utilizza dm-cache quando devi aggiungere la cache a un server già in produzione. La sua integrazione con LVM ti consente di collegare una cache senza tempi di inattività o migrazione dei dati. È più adatto a carichi di lavoro con un'elevata attività di lettura e ad ambienti in cui è necessaria la flessibilità di ridimensionare o riconfigurare lo storage al volo.

Conclusione

Entrambi gli strumenti risolvono lo stesso problema, ma sono adatti a situazioni diverse. Bcache è la scelta migliore in termini di prestazioni per le nuove installazioni. dm-cache è la scelta più pratica per i sistemi LVM esistenti. Qualunque sia la vostra scelta, iniziate con la modalità writethrough finché non siete sicuri dell'affidabilità del vostro SSD, poi passate alla modalità writeback se avete bisogno di prestazioni di scrittura.

Se avete bisogno di server dedicati con configurazioni di caching SSD, esplorate le opzioni di server dedicati di FDC.

Blog

In primo piano questa settimana

Altri articoli
XDP e eBPF per l'elaborazione dei pacchetti Linux

XDP e eBPF per l'elaborazione dei pacchetti Linux

Come XDP e eBPF elaborano milioni di pacchetti al secondo a livello di driver NIC. Benchmark, casi d'uso DDoS, configurazione della catena di strumenti e requisiti hardware.

14 min di lettura - 27 maggio 2026

Perché è importante avere un VPS potente e senza contatore

3 min di lettura - 9 maggio 2025

Altri articoli
background image

Avete domande o avete bisogno di una soluzione personalizzata?

icon

Opzioni flessibili

icon

Portata globale

icon

Distribuzione immediata

icon

Opzioni flessibili

icon

Portata globale

icon

Distribuzione immediata