bcache vs dm-cache: Cache SSD di Linux a confronto
11 min di lettura - 28 maggio 2026

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 cacheLa 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:
- Creare volumi fisici (PV) sia sull'HDD che sull'SSD.
- Aggiungere entrambi i PV a un unico gruppo di volumi (VG).
- Creare tre volumi logici: uno per i dati di backup (HDD), uno per la cache (SSD) e uno per i metadati (SSD).
- Unire i LV della cache e dei metadati in un pool di cache:
lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv> - 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 funziona | Velocità | Rischio |
|---|---|---|---|
| Scrittura diretta | Le scritture vengono eseguite contemporaneamente sia su SSD che su HDD | Solo potenziamento della lettura | Basso. L'HDD contiene sempre i dati attuali. |
| Writeback | Le scritture vengono prima inviate all'SSD, poi trasferite all'HDD | Aumento della velocità di lettura e scrittura | Più alto. Un guasto dell'SSD prima del trasferimento comporta la perdita dei dati. |
| Bypass / Passaggio | Le scritture bypassano completamente la cache | Solo potenziamento della lettura, usura ridotta dell'SSD | Basso. 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
| Fattore | bcache | dm-cache |
|---|---|---|
| Configurazione su dati esistenti | Distruttiva (richiede la cancellazione) | Non distruttivo (conversione online) |
| Ridimensionamento | Non supportato | Supportato tramite LVM |
| Ottimizzazione della scrittura casuale | Forte (consolidamento delle scritture sequenziali) | Standard |
| Bypass I/O sequenziale | Automatico (>4 MB) | Gestito dalla politica smq |
| Overhead di memoria | Basso (albero B+) | Più elevato (dipende dalla dimensione del blocco) |
| Metadati | Sul dispositivo di cache | Dispositivo 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.
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

Avete domande o avete bisogno di una soluzione personalizzata?
Opzioni flessibili
Portata globale
Distribuzione immediata
Opzioni flessibili
Portata globale
Distribuzione immediata