dm-cache — это компонент (точнее, цель) устройства сопоставления устройств ядра Linux , который представляет собой платформу для сопоставления блочных устройств с виртуальными блочными устройствами более высокого уровня. Он позволяет одному или нескольким быстрым устройствам хранения, таким как твердотельные накопители на базе флэш-памяти (SSD), выступать в качестве кэша для одного или нескольких более медленных устройств хранения, таких как жесткие диски (HDD); это эффективно создает гибридные тома и обеспечивает повышение производительности вторичного хранилища .
Конструкция dm-cache требует трех физических устройств хранения для создания одного гибридного тома; dm-cache использует эти устройства хранения для отдельного хранения фактических данных, данных кэша и необходимых метаданных . Настраиваемые режимы работы и политики кэширования, причем последние в виде отдельных модулей, определяют способ фактического кэширования данных.
dm-cache лицензируется на условиях GNU General Public License (GPL), основными разработчиками которого являются Джо Торнбер, Хайнц Мауэльсхаген и Майк Снитцер.
dm-cache использует твердотельные накопители ( SSD ) в качестве дополнительного уровня косвенности при доступе к жестким дискам ( HDD ), улучшая общую производительность за счет использования быстрых твердотельных накопителей на основе флэш- памяти в качестве кэшей для более медленных механических жестких дисков на основе вращающихся магнитных носителей . В результате дорогая скорость твердотельных накопителей сочетается с емкостью более медленных, но менее дорогих жестких дисков. [1] Более того, в случае сетей хранения данных (SAN), используемых в облачных средах в качестве общих систем хранения данных для виртуальных машин , dm-cache также может улучшить общую производительность и снизить нагрузку на сети SAN, обеспечивая кэширование данных с использованием локальных систем хранения данных на стороне клиента. хранилище. [2] [3] [4]
dm-cache реализован как компонент устройства сопоставления устройств ядра Linux , который представляет собой структуру управления томами , позволяющую создавать различные сопоставления между физическими и виртуальными блочными устройствами. Способ создания сопоставления между устройствами определяет, как виртуальные блоки преобразуются в базовые физические блоки, при этом определенные типы преобразования называются целями . [5] Выступая в качестве цели сопоставления, dm-cache позволяет кэшированию на основе SSD быть частью созданного виртуального блочного устройства, в то время как настраиваемые режимы работы и политики кэширования определяют, как dm-cache работает внутри. Режим работы выбирает способ синхронизации данных между HDD и SSD, а политика кэширования, выбираемая из отдельных модулей, реализующих каждую из политик, обеспечивает алгоритм определения того, какие блоки продвигаются (перемещаются из HDD на SSD), понижена в должности (перенесена с SSD на HDD), очищена и т. д. [6]
При настройке на использование политики кэширования с несколькими очередями (mq) или стохастической многоочередной (smq), причем последняя используется по умолчанию, dm-cache использует твердотельные накопители для хранения данных, связанных с выполненными случайными операциями чтения и записи , используя почти нулевое время поиска . SSD и избегать таких операций ввода-вывода , которые являются типичными узкими местами производительности жестких дисков. Данные, связанные с последовательным чтением и записью, не кэшируются на твердотельных накопителях, что позволяет избежать нежелательной аннулирования кэша во время таких операций; с точки зрения производительности это выгодно, поскольку последовательные операции ввода-вывода подходят для жестких дисков из-за их механической природы. Отсутствие кэширования последовательного ввода-вывода также помогает продлить срок службы твердотельных накопителей , используемых в качестве кэшей. [7]
Еще один проект dm-cache с аналогичными целями был анонсирован Эриком Ван Хенсбергеном и Мин Чжао в 2006 году в результате стажировки в IBM . [8]
Позже Джо Торнбер, Хайнц Мауэльсхаген и Майк Снитцер представили собственную реализацию концепции, в результате которой dm-cache был включен в ядро Linux. dm-cache был объединен с основной веткой ядра Linux в версии ядра 3.9, выпущенной 28 апреля 2013 года. [6] [9]
В dm-cache для создания сопоставленного виртуального блочного устройства, действующего как гибридный том , требуется три физических устройства хранения: [6]
Внутри dm-cache ссылается на каждое из исходных устройств через ряд блоков фиксированного размера; размер этих блоков, равный размеру экстента кэширования , настраивается только при создании гибридного тома. Размер экстента кэширования должен находиться в диапазоне от 32 КБ до 1 ГБ и быть кратным 32 КБ; обычно размер экстента кэширования составляет от 256 до 1024 КБ. Выбор экстентов кэширования, превышающих размеры секторов диска, представляет собой компромисс между размером метаданных и возможностью бесполезной траты места в кэше. Слишком маленькие экстенты кэширования увеличивают размер метаданных как на устройстве метаданных, так и в памяти ядра, тогда как слишком большие экстенты кэширования увеличивают объем неиспользуемого кэш-пространства из-за кэширования целых экстентов даже в случае высоких показателей попадания только для некоторых из своих частей. [6] [10]
Режимы работы, поддерживаемые dm-cache, — это обратная запись , которая используется по умолчанию, сквозная запись и сквозная запись . В режиме обратной записи запись в кэшированные блоки осуществляется только на устройство кэширования, тогда как блоки на исходном устройстве помечаются как «грязные» в метаданных. В режиме сквозной записи запросы на запись не возвращаются как выполненные до тех пор, пока данные не достигнут как источника, так и устройства кэша, при этом чистые блоки не помечаются как грязные. В режиме сквозной работы все чтения выполняются непосредственно с исходного устройства, минуя кэш, а все записи идут непосредственно на исходное устройство; любые попадания в кэш также приводят к аннулированию кэшированных блоков. Режим сквозной передачи позволяет активировать гибридный том, когда состояние кэш-устройства не соответствует состоянию исходного устройства. [6] [11]
Скорость миграции данных, которую dm-cache выполняет в обоих направлениях (т. е. повышение и понижение уровня данных), может быть ограничена до настроенной скорости, чтобы можно было сохранить регулярный ввод-вывод на исходные и кэш-устройства. Вывод из эксплуатации гибридного тома или уменьшение размера кэш-устройства требует использования политики очистки , которая эффективно сбрасывает все блоки, помеченные в метаданных как «грязные», с кэш-устройства на исходное устройство. [6] [7]
По состоянию на август 2015 года [обновлять]и версии 4.2 ядра Linux [12] следующие три политики кэширования распространяются вместе с основной линией ядра Linux, из которых dm-cache по умолчанию использует политику стохастической многоочередности : [6] [7]
В состав диспетчера логических томов входит lvmcache
, который предоставляет оболочку для dm-cache
интеграции с LVM. [13]
Кэш горячей точки для чтения и записи с использованием модуля ядра dm-cache.