bcache vs dm-cache: Porównanie Linux SSD Caching
11 min czytania - 28 maja 2026

Porównanie bcache i dm-cache do buforowania SSD w systemie Linux. Konfiguracja, wydajność, tryby buforowania i kiedy używać każdego z nich.
bcache vs dm-cache: buforowanie SSD w systemie Linux
Dyski SSD są szybkie, ale drogie w przeliczeniu na gigabajt. Dyski HDD są tanie, ale wolne. System Linux oferuje dwa narzędzia na poziomie jądra, które pozwalają je połączyć: bcache i dm-cache. Oba wykorzystują dysk SSD jako przezroczystą pamięć podręczną przed większym dyskiem HDD, ale różnią się architekturą, wymaganiami konfiguracyjnymi oraz tym, w jakich warunkach działają najlepiej.
Jak działa bcache
Bcache jest obecny w jądrze systemu Linux od wersji 3.10 (czerwiec 2013 r.). Działa na poziomie bloków, więc współpracuje z każdym systemem plików obsługującym identyfikatory UUID.
Wewnętrznie bcache wykorzystuje hybrydową strukturę drzewa B+ i dziennika. Dzieli pamięć SSD na segmenty o stałym rozmiarze (od 128 KB do 2 MB), wyrównane do granic bloków kasowania. Przekształca to operacje zapisu losowego w sekwencyjne, co zmniejsza amplifikację zapisu i wydłuża żywotność dysku SSD. Sekwencyjne operacje wejścia/wyjścia powyżej 4 MB automatycznie omijają pamięć podręczną, dzięki czemu dysk SSD skupia się na wzorcach dostępu losowego, gdzie wnosi największą wartość.
Bcache monitoruje również opóźnienia dysku SSD w czasie rzeczywistym. Jeśli opóźnienie odczytu przekroczy 2 ms lub opóźnienie zapisu przekroczy 20 ms, ogranicza ruch, aby zapobiec sytuacji, w której urządzenie pamięci podręcznej stanie się wąskim gardłem.
Konfiguracja
Zainstaluj bcache-tools, a następnie sformatuj urządzenie zapasowe i urządzenie pamięci podręcznej:
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 cacheDostrajanie w czasie pracy odbywa się za pośrednictwem /sys/block/bcache<N>/bcache/ interfejs sysfs, gdzie można dostosować tryby buforowania, progi sekwencyjnych operacji wejścia/wyjścia oraz docelowe wartości opóźnień. W przypadku macierzy RAID należy użyć --data-offset , aby dopasować do szerokości pasma.
Haczyk: konfiguracja jest destrukcyjna. Oba urządzenia muszą zostać sformatowane jako cele bcache, więc nie można dodać bcache do istniejącego systemu plików bez uprzedniego jego wyczyszczenia. Rozmiar urządzeń bcache nie może również zostać zmieniony po utworzeniu.
Wydajność
Konsolidacja zapisu w bcache zapewnia mu wysokie wyniki w zakresie losowego zapisu. W testach porównawczych osiągnął on około 18 500 losowych operacji IOPS zapisu 4K w porównaniu z 12 200 IOPS na samym surowym dysku SSD. Przepustowość losowego odczytu może osiągnąć około 1 000 000 IOPS przy odpowiednim sprzęcie.
W przypadku obciążeń szyfrowanych należy nałożyć warstwę dm-crypt na /dev/bcache<N> urządzenie, zamiast szyfrować poszczególne dyski bazowe. Zazwyczaj zapewnia to lepszą wydajność, ponieważ bcache może nadal konsolidować zapisy przed szyfrowaniem.
Jak działa dm-cache
dm-cache to cel Device Mapper, który znajduje się nad istniejącym woluminem logicznym. Wykorzystuje trzy podurządzenia: urządzenie źródłowe (HDD), urządzenie pamięci podręcznej (SSD lub NVMe) oraz urządzenie metadanych, które śledzi lokalizacje bloków i stany brudne. Domyślną polityką pamięci podręcznej jest smq (Stochastic Multi-Queue), która identyfikuje często używane dane w mieszanych obciążeniach.
Główna zaleta: dm-cache można nałożyć na aktywny wolumin LVM bez niszczenia istniejących danych. Można również zmienić jego rozmiar za pomocą standardowych poleceń LVM.
Konfiguracja z LVM
Praktycznym sposobem konfiguracji dm-cache jest użycie lvmcache. Ręczna dmsetup konfiguracja jest możliwa, ale podatna na błędy i nie przetrwa ponownego uruchomienia. Podejście LVM:
- Utwórz woluminy fizyczne (PV) zarówno na dysku HDD, jak i SSD.
- Dodaj oba woluminy fizyczne do jednej grupy woluminów (VG).
- Utwórz trzy woluminy logiczne: jeden na dane podstawowe (HDD), jeden na pamięć podręczną (SSD) i jeden na metadane (SSD).
- Połącz woluminy logiczne pamięci podręcznej i metadanych w pulę pamięci podręcznej:
lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv> - Podłącz pulę do źródła:
lvconvert --type cache --cachepool <pool_lv> <data_lv>
Jedna rzecz, na którą należy zwrócić uwagę: zamontuj system plików poprzez jego /dev/mapper/ ścieżki, a nie za pomocą identyfikatora UUID. Zamontowanie za pomocą identyfikatora UUID może ominąć warstwę pamięci podręcznej i spowodować bezpośrednie odwołanie się do urządzenia źródłowego.
Wydajność i pamięć
W trybie zapisu zwrotnego przy obciążeniu Zipf 90/10 (odczyt/zapis) dm-cache osiągnął prędkość odczytu około 193 MB/s i prędkość zapisu około 21 MB/s. W innym teście porównawczym buforowanie dysku twardego o pojemności 100 GB z partycją NVMe o pojemności 10 GB zwiększyło liczbę operacji IOPS przy losowym zapisie ze 118 do 798.
Kompromisem jest pamięć. Obciążenie metadanymi dm-cache zależy od rozmiaru bloku. Blok o rozmiarze 512 bajtów może zużywać ponad 16 GB pamięci RAM na 100 GB pamięci podręcznej. Zwiększenie tego do 4096 bajtów zmniejsza zużycie pamięci do około 2 GB na 100 GB. Wybierz rozmiar bloku zbliżony do średniego rozmiaru operacji wejścia/wyjścia (64 KB to rozsądny punkt wyjścia) i upewnij się, że jest on wielokrotnością 64 sektorów (32 KB), w zakresie od 32 KB do 1 GB.
Metadane są opróżniane przy każdym zapisie FLUSH lub FUA, lub co najmniej raz na sekundę. Aby zapewnić wysoką dostępność, należy wykonać kopię lustrzaną urządzenia metadanych, aby uniknąć pojedynczego punktu awarii.
Tryby buforowania
Zarówno bcache, jak i dm-cache obsługują te same podstawowe tryby buforowania. Wybór ma wpływ zarówno na wydajność, jak i bezpieczeństwo danych.
| Tryb | Jak to działa | Szybkość | Ryzyko |
|---|---|---|---|
| Zapis bezpośredni | Zapisy trafiają jednocześnie zarówno na dysk SSD, jak i HDD | Tylko przyspieszenie odczytu | Niski. Dysk HDD zawsze zawiera aktualne dane. |
| Zapis z opóźnieniem | Zapisy trafiają najpierw na dysk SSD, a później są zrzucane na dysk HDD | Zwiększenie szybkości odczytu i zapisu | Wyższy. Awaria dysku SSD przed zrzutem oznacza utratę danych. |
| Ominięcie pamięci podręcznej / Przekierowanie | Zapisy całkowicie omijają pamięć podręczną | Tylko przyspieszenie odczytu, mniejsze zużycie dysku SSD | Niski. Dysk HDD zawsze zawiera aktualne dane. |
Writethrough to bezpieczne ustawienie domyślne dla obu narzędzi. Writeback jest szybszy, ale wiąże się z realnym ryzykiem: jeśli dysk SSD ulegnie awarii podczas przechowywania danych, które nie zostały jeszcze zapisane, dane te zostaną utracone, a system plików może ulec uszkodzeniu. Z writeback należy korzystać tylko wtedy, gdy dysponuje się redundantnymi dyskami SSD lub można tolerować sporadyczną utratę danych.
bcache a dm-cache: które wybrać
| Czynnik | bcache | dm-cache |
|---|---|---|
| Konfiguracja na istniejących danych | Destrukcyjna (wymaga wyczyszczenia) | Nieniszczące (konwersja online) |
| Zmiana rozmiaru | Nieobsługiwane | Obsługiwane przez LVM |
| Optymalizacja zapisu losowego | Silna (konsolidacja zapisu sekwencyjnego) | Standard |
| Pominięcie sekwencyjnych operacji we/wy | Automatyczne (>4 MB) | Zarządzane przez politykę smq |
| Obciążenie pamięci | Niskie (drzewo B+) | Wyższe (zależy od rozmiaru bloku) |
| Metadane | Na urządzeniu pamięci podręcznej | Oddzielne urządzenie, może być dublowane |
Użyj bcache, gdy budujesz nowy system od podstaw i chcesz uzyskać najlepszą możliwą wydajność losowych operacji wejścia/wyjścia. Jest to lepszy wybór dla obciążeń wymagających intensywnego zapisu, takich jak bazy danych i pamięć masowa maszyn wirtualnych, a także dla macierzy RAID 6, w których straty związane z losowym zapisem są znaczne.
Użyj dm-cache, gdy chcesz dodać buforowanie do serwera, który już działa. Dzięki integracji z LVM możesz podłączyć pamięć podręczną bez przestojów i migracji danych. To lepsze rozwiązanie dla obciążeń z dużą ilością odczytów oraz środowisk, w których potrzebujesz elastyczności, by zmieniać rozmiar lub rekonfigurować pamięć masową w locie.
Wniosek
Oba narzędzia rozwiązują ten sam problem, ale nadają się do różnych sytuacji. Bcache to najlepszy wybór pod względem wydajności dla nowych instalacji. dm-cache to praktyczny wybór dla istniejących systemów LVM. Niezależnie od tego, co wybierzesz, zacznij od trybu writethrough, dopóki nie upewnisz się co do niezawodności dysku SSD, a następnie przełącz się na tryb writeback, jeśli potrzebujesz wydajności zapisu.
Jeśli potrzebujesz serwerów dedykowanych z konfiguracjami buforowania SSD, zapoznaj się z opcjami serwerów dedykowanych FDC.
XDP i eBPF dla przetwarzania pakietów w systemie Linux
Jak XDP i eBPF przetwarzają miliony pakietów na sekundę na poziomie sterownika NIC. Testy porównawcze, przypadki użycia DDoS, konfiguracja łańcucha narzędzi i wymagania sprzętowe.
14 min czytania - 27 maja 2026
Dlaczego ważne jest posiadanie wydajnego i niezmierzonego serwera VPS?
3 min czytania - 9 maja 2025

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie