Страницы

Сохранить статью у себя в соцсети:

пятница, 3 мая 2013 г.

§ EnhanceIO: Need for speed? No problem!

EnhanceIO - больше кэшей хороших и разных

Я уже неоднократно писал про инструменты кэширования данных с помощью SSD накопителей и вот пришел черед EnhanceIO, на мой взгляд, это самый лучший представитель из семейства программных SSD кэшей.

Итак что же такое EnhanceIO? Ответ прост, EnhanceIO как и его собратья Flashcache и Bcache, является программным (да да, есть еще и аппаратные представители) инструментом обеспечивающим кэширование блочного ввода-вывода посредством SSD дисков. Следует отметить что EnhanceIO является ответвлением от проекта Flashcache. 
EnhanceIO является достаточно гибким и способен работать с любым блочным устройством, будь-то целый диск или раздел, локальный RAID массив или SAN том, device-mapper LVM том или программный RAID. Как и в аналогичных решениях поддерживается несколько режимов кэширования (read-only, write-through, write-back) и три политики замещения объектов в кэше: случайная, FIFO и LRU.
  • Режим read-only подразумевает прямую запись данных на жесткий диск исключая кэширование запросов на запись. На SSD кэшируются лишь данные по запросам на чтение, т.е. данные прочитанные с жесткого диска. Последующие запросы на чтение ранее прочитанных блоков будут направляться уже на SSD, тем самым, уменьшая задержки доступа.
  • В режиме write-through запросы на чтение обрабатываются аналогичным образом как и в read-only режиме. Однако запросы на запись, направляются одновременно и на жесткий диск и на SSD. Последующее чтение этих данных уже будет выполняться с SSD диска.
  • Режим write-back существенно уменьшает задержи при запросах на запись, выполняя их только на SSD диск. Эти данные помеченные как "грязные" позже сбрасываются на жесткий диск в асинхронном режиме. Запросы на чтение обрабатываются точно так же как и в предыдущих двух режимах.
Если углубиться в детали устройства EnhanceIO, то можно сказать что основное блочное устройство, жесткий диск, отображается в SSD томе через специальные наборы-сопоставления (кэш-сеты) основанные на количестве секторов жесткого диска с размером по-умолчанию 512 байт и размером блока по умолчанию 4Kb. Значение по умолчанию в 4Kb выбрано в силу того, что такой размер блока, является стандартным для многих систем хранения. С такими значениями по умолчанию, каждый кэш-сет имеет размер 2Mb (512 * 4Kb). Таким образом SSD диск объемом 400Gb представляется набором в чуть меньше чем 200 000 кэш-сетов (чуть меньше, потому что часть данных отдана под метаданные).

Учитывая что EnhanceIO является ответвлением от Flashcache, стоит выделить отличия между ними:
  • переработанный механизм write-back режима;
  • прозрачный кэш;
  • поддержка толстого ввода-вывода;
  • экономное расходование оперативной памяти;
  • динамически определяемые политики кэширования;
  • выравнивание блоков с данными на SSD;
  • улучшенная обработка ошибок на устройстве;
  • оптимизация кода.
Переработанный механизм write-back режима. Механизм режима write-back был полностью переписан и содержит большое количество оптимизации в работе движка. Предоставлены гарантии выполнения запросов ввода-вывода, введены лимиты позволяющие пользователю контролировать объем "грязных" данных в кэше. В случае высокой нагрузки сброс кэша приостанавливается и это поведение также может быть настроено. Пользователь может контролировать степень заполненности кэша "грязными" данными. Фоновый процесс сброса данных работает с регулярными интервалами.

Прозрачный кэш. EnhanceIO НЕ использует в своей работе device-mapper. Это позволяет создавать и удалять кэши в то время, как основной диск уже используется. Кэши можно подключать к уже смонтированным томам и устройствам. EnhanceIO поддерживает создание кэшей для устройств с несколькими разделами. Таким образом кэши можно создавать без дополнительного разбиения SSD диска для создания отдельных кэшей. Во Flashcache же, необходимо сначала создать кэш устройство (из SSD диска и уже имеющегося раздела) и только потом можно смонтировать его и начать пользоваться.

Поддержка толстого ввода-вывода. В отличие от Flashcache, EnhanceIO не вызывает дробления запросов ввода вывода основываясь на размере блока низлежащего тома. К примеру, для обычного блока размером 4Kb, запрос ввода вывода на 64Kb не будет разбиваться на 16 отдельных запросов по 4Kb (как это делается во Flashcache). Это существенное улучшение производительности.

Экономное расходование оперативной памяти. Алгоритм сжатия используемый для хранения метаданных в памяти, позволяет для каждого блока SSD, уместить метаданные в блоки размером 4 байта (16 байт у Flashcache). Таким образом для стандартного блока размером 4Kb будет использоваться 0,1% памяти (1/1000) от емкости SSD. Например для SSD диска объемом 400Gb, потребуется 400Mb оперативной памяти для хранения всех метаданных. Для блока размером 8Kb, использование оперативной памяти сводится к 0,05% от емкости SSD (1/2000). 
Для работы алгоритма сжатия требуется как минимум 32768 кэш-сета (что такое кэш-сет смотрите в начале статьи). Если SSD диск небольшой емкости и не обеспечивает такое количество кэш-сетов, EnhanceIO будет использовать 8 байт памяти для каждого блока на SSD. В таком случае, использование оперативной памяти сводится к 0,2% (2/1000) от емкости SSD диска с блоком 4Kb.

Динамически определяемые политики кэширования. Поскольку объем SSD диска, как правило, занимает 10-20% от объема жесткого диска, природа всех таких инструментов требует наличия процедуры замещения блоков в кэше.
Основной модуль EnhanceIO включает в себя механизм кэширования который используется политику замещения блоков на случайной основе (более известный как round-robin), который не требует дополнительной памяти и характеризуется наименьшим потреблением процессорных ресурсов. Тем не менее, есть еще два дополнительных модуля, которые реализуют такие политики замещения как FIFO и LRU. Модули реализующие FIFO и LRU являются независимыми от основного модуля и если соответствующие им политики не используются, они могут быть выгружены. Учитывая что модули политик замещения не расходуют память, по-умолчанию они находятся в загруженном состоянии. Память начинает расходоваться только после инициализации кэша с определенной политикой (LRU или FIFO). Стоит отметить, что использовании политик предполагает использование дополнительной памяти для метаданных, в случае FIFO это 4 байта на каждый кэш-сет, для LRU - 4 байта на кэш-сет + 4 байта на каждый блок. 

Выравнивание блоков с данными на SSD. EnhanceIO пишет данные и метаданные на SSD диск с выравниванием в 4Kb. Такой подход минимизирует избыточность записи на соседние блоки, таким образом снижая износ SSD накопителя и увеличивая производительность. 

Улучшенная обработка ошибок на устройстве. Обработка сбоев возникших на SSD диске в режиме read-only или write-through выполняется без прерывания работы, запросы ввода-вывода прозрачно перенаправляются на жесткий диск. Приложение работающее с устройством испытает падение производительности, но работа будет продолжена без появления ошибок связанных с вводом-выводом. Сбой SSD диска в режиме write-back очевидно приведет к потере "грязных" данных, для которых не был сделан сброс на диск. Мерой защиты от потери данных может служить объединение двух SSD дисков в RAID1. Также EnhanceIO определяет сбои на устройствах по специальным кодам ошибок. В зависимости от характера сбоя, который может быть как одиночным так и постоянным, принимается наиболее подходящий способ обработки.

Оптимизация в коде. Большая часть кода взятая от Flashcache была переписана. Так, например, было сделано множество, как крупных так и небольших оптимизаций внутри кода, которые позволяют снизить расход процессорных ресурсов и ускорить общий процесс выполнения операций. Оптимизации включают в себя удаление очередей неиспользуемых при read-only и write-through режимах, расщепление больших блокировок на мелкие и другие небольшие оптимизации. 

В следующей статье будет описан процесс установки EnhanceIO и примеры администрирования томов с подключенным EIO-кэшем.

UPD: есть информация что EnhanceIO собираются включить в staging-ветку ядра 3.10, несмотря на то что в 3.9 появился dm-cache.

На главную "Virtualiaing Linux"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика