bcache vs dm-cache: Linux SSD Caching Compared
11 min citire - 28 mai 2026

Comparați bcache și dm-cache pentru cache SSD pe Linux. Configurare, performanță, moduri de caching și când să utilizați fiecare.
bcache vs dm-cache: Caching SSD pe Linux
SSD-urile sunt rapide, dar scumpe pe gigabyte. HDD-urile sunt ieftine, dar lente. Linux vă oferă două instrumente la nivel de kernel pentru a le combina: bcache și dm-cache. Ambele utilizează un SSD ca cache transparent în fața unui HDD mai mare, dar diferă în ceea ce privește arhitectura, cerințele de configurare și locul în care funcționează cel mai bine.
Cum funcționează bcache
Bcache este prezent în kernelul Linux încă de la versiunea 3.10 (iunie 2013). Acesta funcționează la nivel de bloc, astfel încât este compatibil cu orice sistem de fișiere care acceptă UUID-uri.
La nivel intern, bcache utilizează o structură hibridă de tip arbore B+/jurnal. Acesta împarte spațiul de stocare SSD în segmente de dimensiuni fixe (de la 128K la 2MB), aliniate la limitele blocurilor de ștergere. Acest lucru transformă operațiunile de scriere aleatorie în operațiuni secvențiale, ceea ce reduce amplificarea scrierii și prelungește durata de viață a SSD-ului. Operațiunile secvențiale de I/O de peste 4MB ocolesc automat cache-ul, menținând SSD-ul concentrat pe tiparele de acces aleatoriu, unde adaugă cea mai mare valoare.
Bcache monitorizează, de asemenea, latența SSD în timp real. Dacă latența de citire depășește 2 ms sau latența de scriere depășește 20 ms, acesta limitează traficul pentru a împiedica dispozitivul cache să devină un gât de sticlă.
Configurare
Instalați bcache-tools, apoi formatați dispozitivul de rezervă și dispozitivul 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 cacheReglarea în timpul rulării se face prin /sys/block/bcache<N>/bcache/ interfața sysfs, unde puteți regla modurile de cache, pragurile de I/O secvențial și țintele de latență. Pentru matrice RAID, utilizați --data-offset pentru a vă alinia cu lățimea benzii.
Problema: configurarea este distructivă. Ambele dispozitive trebuie formatate ca ținte bcache, așa că nu puteți adăuga bcache la un sistem de fișiere existent fără a-l șterge mai întâi. De asemenea, dispozitivele bcache nu pot fi redimensionate după creare.
Performanță
Consolidarea scrierii oferită de Bcache îi conferă valori puternice de scriere aleatorie. În testele de performanță, a atins aproximativ 18.500 IOPS de scriere aleatorie de 4K, comparativ cu 12.200 IOPS doar pe SSD-ul brut. Debitul de citire aleatorie poate ajunge la aproximativ 1.000.000 IOPS cu hardware adecvat.
Pentru sarcini de lucru criptate, aplicați dm-crypt peste /dev/bcache<N> dispozitiv, în loc să criptați unitățile de bază individual. De obicei, acest lucru oferă performanțe mai bune deoarece bcache poate consolida în continuare operațiunile de scriere înainte de criptare.
Cum funcționează dm-cache
dm-cache este o țintă Device Mapper care se află deasupra unui volum logic existent. Utilizează trei subdispozitive: un dispozitiv de origine (HDD), un dispozitiv cache (SSD sau NVMe) și un dispozitiv de metadate care urmărește locațiile blocurilor și stările murdare. Politica implicită de cache este smq (Stochastic Multi-Queue), care identifică datele active în sarcini de lucru mixte.
Avantajul principal: dm-cache poate fi stratificat pe un volum LVM activ fără a distruge datele existente. De asemenea, îl puteți redimensiona folosind comenzi LVM standard.
Configurare cu LVM
Modul practic de a configura dm-cache este prin lvmcache. dmsetup este posibilă, dar este predispusă la erori și nu supraviețuiește repornirilor. Abordarea LVM:
- Creați volume fizice (PV) atât pe HDD, cât și pe SSD.
- Adăugați ambele PV-uri într-un singur grup de volume (VG).
- Creați trei volume logice: unul pentru datele de rezervă (HDD), unul pentru cache (SSD) și unul pentru metadate (SSD).
- Combinați volumele logice de cache și metadate într-un pool de cache:
lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv> - Atașați grupul la origine:
lvconvert --type cache --cachepool <pool_lv> <data_lv>
Un aspect de reținut: montați sistemul de fișiere prin intermediul /dev/mapper/ , nu prin UUID. Montarea prin UUID poate ocoli stratul de cache și poate accesa direct dispozitivul de origine.
Performanță și memorie
În modul writeback, sub o sarcină de lucru Zipf de citire/scriere 90/10, dm-cache a atins viteze de citire de aproximativ 193 MB/s și viteze de scriere de aproximativ 21 MB/s. Într-un alt test de performanță, stocarea în cache a unui HDD de 100 GB cu o partiție NVMe de 10 GB a crescut IOPS-ul de scriere aleatorie de la 118 la 798.
Compromisul este memoria. Supraîncărcarea cu metadate a dm-cache depinde de dimensiunea blocului. O dimensiune a blocului de 512 octeți poate consuma peste 16 GB de RAM la fiecare 100 GB de cache. Mărirea acesteia la 4.096 octeți reduce utilizarea memoriei la aproximativ 2 GB la fiecare 100 GB. Alegeți o dimensiune a blocului apropiată de dimensiunea medie a I/O (64 KB este un punct de plecare rezonabil) și asigurați-vă că este un multiplu de 64 de sectoare (32 KB), în intervalul de la 32 KB la 1 GB.
Metadatele sunt golite la fiecare scriere FLUSH sau FUA, sau cel puțin o dată pe secundă. Pentru o disponibilitate ridicată, oglindiți dispozitivul de metadate pentru a evita un singur punct de eșec.
Moduri de cache
Atât bcache, cât și dm-cache acceptă aceleași moduri de cache de bază. Alegerea afectează atât performanța, cât și siguranța datelor.
| Mod | Cum funcționează | Viteză | Risc |
|---|---|---|---|
| Scriere directă | Scrierea se face simultan atât pe SSD, cât și pe HDD | Doar accelerare citire | Scăzut. HDD-ul are întotdeauna datele actuale. |
| Scriere ulterioară | Scrierile se fac mai întâi pe SSD, apoi se transferă pe HDD | Îmbunătățire citire și scriere | Mai mare. O defecțiune a SSD-ului înainte de transferul către HDD înseamnă pierderea datelor. |
| Ocolire scriere / Pasare | Scrierile ocolesc complet cache-ul | Doar îmbunătățire a citirii, uzură redusă a SSD-ului | Scăzut. HDD-ul are întotdeauna datele actuale. |
Writethrough este setarea implicită sigură pentru ambele instrumente. Writeback este mai rapid, dar prezintă un risc real: dacă SSD-ul se defectează în timp ce deține date neflushate, acele date se pierd și sistemul de fișiere poate fi corupt. Utilizați writeback numai când aveți SSD-uri redundante sau puteți tolera pierderea ocazională a datelor.
bcache vs dm-cache: Care să folosești
| Factor | bcache | dm-cache |
|---|---|---|
| Configurare pe date existente | Distructiv (necesită ștergere) | Nedistructiv (conversie online) |
| Redimensionare | Nu este acceptat | Suportat prin LVM |
| Optimizare scriere aleatorie | Puternică (consolidare a scrierii secvențiale) | Standard |
| Ocolire I/O secvențială | Automat (>4 MB) | Gestionat de politica smq |
| Sarcina de memorie | Redus (arbore B+) | Mai mare (depinde de dimensiunea blocului) |
| Metadate | Pe dispozitivul cache | Dispozitiv separat, poate fi oglindit |
Utilizați bcache atunci când construiți un sistem nou de la zero și doriți cea mai bună performanță posibilă pentru I/O aleatoriu. Este cea mai bună alegere pentru sarcini de lucru cu scriere intensă, cum ar fi bazele de date și stocarea VM, precum și pentru matrice RAID 6, unde penalizările pentru scrierea aleatorie sunt severe.
Utilizați dm-cache atunci când trebuie să adăugați cache la un server care este deja în producție. Integrarea sa LVM înseamnă că puteți atașa un cache fără timp de nefuncționare sau migrare de date. Este mai potrivit pentru sarcini de lucru cu citire intensă și medii în care aveți nevoie de flexibilitate pentru a redimensiona sau reconfigura stocarea din mers.
Concluzie
Ambele instrumente rezolvă aceeași problemă, dar se potrivesc unor situații diferite. Bcache este alegerea optimă din punct de vedere al performanței pentru sistemele nou construite. dm-cache este alegerea practică pentru sistemele LVM existente. Indiferent de alegerea dvs., începeți cu modul writethrough până când aveți încredere în fiabilitatea SSD-ului, apoi treceți la writeback dacă aveți nevoie de performanță la scriere.
Dacă aveți nevoie de servere dedicate cu configurații de cache SSD, explorați opțiunile de servere dedicate ale FDC.
XDP și eBPF pentru procesarea pachetelor Linux
Cum procesează XDP și eBPF milioane de pachete pe secundă la nivelul driverului NIC. Benchmark-uri, cazuri de utilizare DDoS, configurarea lanțului de instrumente și cerințe hardware.
14 min citire - 27 mai 2026
De ce este important să aveți un VPS puternic și nemeditat
3 min citire - 9 mai 2025

Aveți întrebări sau aveți nevoie de o soluție personalizată?
Opțiuni flexibile
Acoperire globală
Implementare instantanee
Opțiuni flexibile
Acoperire globală
Implementare instantanee