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 являются неперсистентными, то есть при каждой загрузке кэш нужно создавать заново.
См. также
[править | править код]Примечания
[править | править код]- ↑ Schwartz, Zaitsev, Tkachenko, 2012, pp. 409—410.
Литература
[править | править код]- 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
Ссылки
[править | править код]- Проект Flashcache на сайте GitHub (англ.)
- Анонс релиза (англ.)
- Презентация на (недоступная ссылка) OSCON (англ.)
- Jeffrey B. Layton. Hard Drive Caching with SSDs (англ.) // Linux Magazine. — August 18th, 2010.
В статье есть список источников, но не хватает сносок. |