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

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.