flashcache

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

flashcache — модуль для ядра Linux, работающий в стеке Device Mapper, и позволяющий использовать одни блочные устройства для кэширования доступа к другим блочным устройствам. Разработан Facebook и опубликован весной 2010 года на условиях лицензии GPL. Изначально предназначался для использования SSD-накопителей для кэширования обращения к медленным (но значительно более ёмким и дешёвым) дисковым накопителям.

Эффективность применения flashcache зависит от многих факторов, в общем случае, технология помогает в задачах, производительность которых ограничена вводом-выводом, с преобладанием операций чтения, а объём рабочего набора данных слишком велик для кэширования в оперативной памяти. Как у любой технологии кэширования при большом количестве «холодного» (некэшированного) чтения производительность может быть ниже, чем у кэшируемого устройства; для «разогрева» кэша может требоваться значительное время[1].

В отличие от включённых в ядро bcache[англ.] и dm-cache[англ.], flashcache требует сборки как отдельный модуль. Форк flashcache — проприетарный EnhanceIO, не использует Device mapper.

Принцип работы

[править | править код]

Flashcache использует модуль отображения устройств Device mapper для создания блочного устройства. При его создании ему передаются два других устройства (как использующих Device Mapper, так и нет). Одно из них является «медленным и большим», второе «маленьким и быстрым» (обычно SSD- или блочным электронным диском). При включённом режиме кэширования каждое обращение к устройству flashcache проверяется на наличие в кэше, и при его наличии в кэше отдаётся оттуда, а не читается с медленного диска. Если же в кэше данные не найдены, то они читаются с медленного диска и записываются в кэш.

Для записи существуют различные политики — в режиме отложенной записи (writeback) данные сначала пишутся в кэширующее устройство, а потом уже в фоновом режиме переносятся оттуда на медленное устройство (обычно значительно бо́льшими блоками и последовательно, что на порядки поднимает производительность жёстких дисков с медленными операциями произвольного доступа, но относительно высокими скоростями последовательного доступа). Помимо этого, «горячие данные» (часто использующиеся данные) часто перезаписываются, что приводит к ситуации, когда данные несколько раз перезаписываются в кэше, а в реальности, на медленное устройство сохраняются только один раз. Ряд параметров отложенной записи доступны для пользовательской настройки.

В режиме сквозной записи (writethrough) данные сначала записываются на медленное устройство, а потом в кэш в расчёте на то, что их в ближайшее время прочтут). Существует также промежуточный режим writearound, когда данные записываются на медленное устройство, а в кэш попадают только после первого чтения.

Кэш поддерживает FILO- и FIFO-алгоритмы вытеснения данных, кроме того, существует возможность ручного сброса кэша. Кэш в режиме отложенный записи является персистентным (сохраняется между перезагрузками) и может быть загружен. Режимы сквозной записи и режим writearound являются неперсистентными, то есть при каждой загрузке кэш нужно создавать заново.

Примечания

[править | править код]

Литература

[править | править код]
  • Baron Schwartz, Peter Zaitsev, Vadim Tkachenko. High Performance MySQL. — O'Reilly Media, 2012. — 826 с. — ISBN 978-1-4493-1428-6., раздел Solid-State Storage — Using Flashcache