bcache vs dm-cache: Сравнение кэширования SSD в Linux
11 мин чтения - 28 мая 2026 г.

Сравнение bcache и dm-cache для SSD-кэширования в Linux. Настройка, производительность, режимы кэширования и когда следует использовать каждый из них.
bcache vs dm-cache: кэширование SSD в Linux
SSD-накопители быстры, но дорогие в пересчете на гигабайт. HDD-накопители дешевые, но медленные. Linux предоставляет два инструмента на уровне ядра для их объединения: bcache и dm-cache. Оба используют SSD-накопитель в качестве прозрачного кэша перед более объёмным HDD-накопителем, но они различаются по архитектуре, требованиям к настройке и тому, в каких условиях они работают наиболее эффективно.
Как работает bcache
Bcache присутствует в ядре Linux с версии 3.10 (июнь 2013 г.). Он работает на уровне блоков, поэтому совместим с любой файловой системой, поддерживающей UUID.
Внутри bcache использует гибридную структуру B+ дерева/журнала. Он разбивает хранилище SSD на блоки фиксированного размера (от 128 КБ до 2 МБ), выровненные по границам блоков стирания. Это преобразует произвольные записи в последовательные, что снижает коэффициент усиления записи и продлевает срок службы SSD. Последовательные операции ввода-вывода объемом более 4 МБ автоматически обходят кэш, позволяя SSD сосредоточиться на моделях произвольного доступа, где он приносит наибольшую пользу.
Bcache также отслеживает задержку SSD в режиме реального времени. Если задержка чтения превышает 2 мс или задержка записи превышает 20 мс, он ограничивает трафик, чтобы устройство кэша не стало узким местом.
Настройка
Установите bcache-tools, затем отформатируйте устройство хранения и устройство кэша:
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Настройка во время работы осуществляется через /sys/block/bcache<N>/bcache/ интерфейса sysfs, где можно настроить режимы кэширования, пороговые значения последовательного ввода-вывода и целевые значения задержки. Для массивов RAID используйте --data-offset для выравнивания по ширине полосы.
Но есть один нюанс: настройка носит разрушительный характер. Оба устройства должны быть отформатированы как целевые устройства bcache, поэтому вы не сможете добавить bcache в существующую файловую систему, не стерев её сначала. Размер устройств bcache также нельзя изменить после их создания.
Производительность
Консолидация записи в bcache обеспечивает высокие показатели произвольной записи. В тестах производительность достигала примерно 18 500 IOPS при произвольной записи блоков размером 4 КБ по сравнению с 12 200 IOPS на обычном SSD. Пропускная способность при произвольном чтении может достигать примерно 1 000 000 IOPS на мощном оборудовании.
Для зашифрованных рабочих нагрузок следует наложить слой dm-crypt на /dev/bcache<N> устройства, а не шифровать базовые диски по отдельности. Обычно это дает лучшую производительность, поскольку bcache может консолидировать записи еще до шифрования.
Как работает dm-cache
dm-cache — это цель Device Mapper, которая находится над существующим логическим томом. Она использует три подустройства: исходное устройство (HDD), устройство кэша (SSD или NVMe) и устройство метаданных, которое отслеживает расположение блоков и состояние изменений. Политика кэширования по умолчанию — smq (Stochastic Multi-Queue), которая определяет «горячие» данные в смешанных рабочих нагрузках.
Ключевое преимущество: dm-cache можно наложить на действующий том LVM без уничтожения существующих данных. Вы также можете изменить его размер с помощью стандартных команд LVM.
Настройка с LVM
Практичный способ настройки dm-cache — через lvmcache. Ручная dmsetup настройка возможна, но она подвержена ошибкам и не сохраняется после перезагрузки. Подход LVM:
- Создайте физические тома (PV) как на HDD, так и на SSD.
- Добавьте оба PV в одну группу томов (VG).
- Создайте три логических тома: один для резервных данных (HDD), один для кэша (SSD) и один для метаданных (SSD).
- Объедините LV кэша и метаданных в пул кэша:
lvconvert --type cache-pool --poolmetadata <meta_lv> <cache_lv> - Подключите пул к источнику:
lvconvert --type cache --cachepool <pool_lv> <data_lv>
Один момент, на который следует обратить внимание: монтируйте файловую систему по ее /dev/mapper/ путь, а не по UUID. Монтирование по UUID может обойти уровень кэша и обратиться непосредственно к исходному устройству.
Производительность и память
В режиме записи с отложенной обработкой при нагрузке Zipf с соотношением чтения и записи 90/10 dm-cache достиг скорости чтения около 193 МБ/с и скорости записи примерно 21 МБ/с. В другом тесте кэширование жесткого диска объемом 100 ГБ с разделом NVMe объемом 10 ГБ увеличило количество операций случайной записи (IOPS) со 118 до 798.
Компромисс заключается в памяти. Накладные расходы dm-cache на метаданные зависят от размера блока. Размер блока 512 байт может потреблять более 16 ГБ ОЗУ на 100 ГБ кэша. Увеличение этого значения до 4096 байт снижает использование памяти примерно до 2 ГБ на 100 ГБ. Выберите размер блока, близкий к среднему размеру операций ввода-вывода (64 КБ — разумная отправная точка), и убедитесь, что он кратен 64 секторам (32 КБ) и находится в диапазоне от 32 КБ до 1 ГБ.
Метаданные сбрасываются при каждой записи с помощью FLUSH или FUA или, по крайней мере, один раз в секунду. Для обеспечения высокой доступности создайте зеркало устройства метаданных, чтобы избежать единичной точки отказа.
Режимы кэширования
Как bcache, так и dm-cache поддерживают одни и те же основные режимы кэширования. Выбор режима влияет как на производительность, так и на безопасность данных.
| Режим | Как это работает | Скорость | Риск |
|---|---|---|---|
| Прописывание | Записи отправляются одновременно на SSD и HDD | Только ускорение чтения | Низкий. На HDD всегда находятся актуальные данные. |
| Запись с отложенной фиксацией | Записи сначала поступают на SSD, а затем сбрасываются на HDD | Ускорение чтения и записи | Выше. Сбой SSD до сброса означает потерю данных. |
| Обходная запись / Пропуск | Записи полностью обходят кэш | Только ускорение чтения, снижение износа SSD | Низкий. На HDD всегда находятся актуальные данные. |
Writethrough — это безопасный вариант по умолчанию для обоих инструментов. Writeback быстрее, но сопряжен с реальным риском: если SSD выйдет из строя, удерживая несброшенные данные, эти данные будут утеряны, а файловая система может быть повреждена. Используйте writeback только в том случае, если у вас есть резервные SSD или вы готовы мириться с периодической потерей данных.
bcache vs dm-cache: что выбрать
| Фактор | bcache | dm-cache |
|---|---|---|
| Настройка на существующих данных | С уничтожением данных (требуется очистка) | Без потери данных (онлайн-преобразование) |
| Изменение размера | Не поддерживается | Поддерживается через LVM |
| Оптимизация произвольной записи | Сильная (консолидация последовательной записи) | Стандартная |
| Обход последовательных операций ввода-вывода | Автоматический (>4 МБ) | Управление по политике smq |
| Нагрузка на память | Низкая (дерево B+) | Выше (зависит от размера блока) |
| Метаданные | На кэш-устройстве | Отдельное устройство, может быть зеркалировано |
Используйте bcache, если вы создаете новую систему с нуля и хотите добиться максимально возможной производительности при произвольном вводе-выводе. Это лучший выбор для рабочих нагрузок с интенсивной записью, таких как базы данных и хранилища виртуальных машин, а также для массивов RAID 6, где потери при произвольной записи являются значительными.
Используйте dm-cache, если вам нужно добавить кэширование на сервер, который уже находится в эксплуатации. Благодаря интеграции с LVM вы можете подключить кэш без простоев и миграции данных. Это лучше подходит для рабочих нагрузок с интенсивным чтением и сред, где требуется гибкость для изменения размера или перенастройки хранилища на лету.
Заключение
Оба инструмента решают одну и ту же проблему, но подходят для разных ситуаций. Bcache — лучший выбор с точки зрения производительности для новых систем. dm-cache — практичный выбор для существующих систем LVM. Что бы вы ни выбрали, начните с режима writethrough, пока не убедитесь в надежности вашего SSD, а затем переключитесь на writeback, если вам нужна высокая производительность записи.
Если вам нужны выделенные серверы с конфигурациями SSD-кеширования, ознакомьтесь с вариантами выделенных серверов FDC.
XDP и eBPF для обработки пакетов в Linux
Как XDP и eBPF обрабатывают миллионы пакетов в секунду на уровне драйверов сетевых карт. Бенчмарки, примеры использования DDoS, настройка цепочки инструментов и требования к оборудованию.
14 мин чтения - 27 мая 2026 г.
Почему важно иметь мощный и не тарифицируемый VPS
3 мин чтения - 9 мая 2025 г.

У вас есть вопросы или вам нужно индивидуальное решение?
Гибкие варианты
Глобальный охват
Мгновенное развертывание
Гибкие варианты
Глобальный охват
Мгновенное развертывание