Мы часто пишем о продукте StarWind Virtual SAN, который позволяет организовать кластеры отказоустойчивых хранилищ на базе серверов для виртуальных машин VMware vSphere и Microsoft Hyper-V. В связи с большим интересом к тому, как именно работает это решение с технической точки зрения, постараемся писать об этом побольше. Сегодня мы расскажем об опциональной файловой системе LSFS (Log-Structured File System), которая повышает производительность операций записи и срок службы накопителей.
Если вкратце, то файловая система LSFS преобразовывает небольшие операции записи от виртуальных машин хост-сервера, которые смешиваются и идут в случайном порядке (small random writes) в большие последовательные операции записи, что также существенно увеличивает производительность. Это так называемая ликвидация эффекта I/O Blender.
LSFS изначально работает с большими блоками данных, что положительно сказывается на сроке службы флеш-накопителей (SSD), на которых размещаются виртуальные машины, так число операций записи существенно уменьшается.
Помимо этого, LSFS имеет следующие полезные функции:
Встроенная поддержка снапшотов и точек восстановления хранилищ (автоматически они делаются каждые 5 минут).
Поддержка непрерывной дефрагментации (она идет в фоне).
Дедупликация данных "на лету" (то есть, перед записью на диск).
Улучшения производительности за счет комбинирования операций записи.
Поддержка overprovisioning.
Использование технологии снапшотов и техник отслеживания изменений при синхронизации HA-узлов.
LSFS - это журналируемая файловая система, которая отслеживает изменения в журнале, при этом сами данные в LSFS не хранятся, хранятся только изменения. Журнал разделен на файловые сегменты. Минимальный размер сегмента - это 128 МБ, максимальный - 512 МБ. LSFS всегда держит один пустой файловый сегмент.
Начальный размер LSFS-устройства равен одному файловому сегменту, вне зависимости от размера самого устройства. Когда данные записываются на устройство, файловая система растет автоматически, по мере внесения изменений в данные.
Старые данные сохраняются в файловой системе до момента, пока дефрагментация не вычистит их.
Как работает дефрагментация
Многие пользователи задаются вопросом - как ведет себя файловая система LSFS с точки зрения дефрагментации? Ответ прост - она упорядоченно сохраняет логические блоки с близкими адресами в рамках страниц (размером 4-8-16 МБ), при этом процесс организации блоков происходит непрерывно. То есть, LSFS - это файловая система с "автоматической" дефрагментацией. Данные фрагментированных сегментов помещаются в пустой файловый сегмент, а старый сегмент удаляется. Также можно производить дефрагментацию и в ручном режиме.
Автоматическая дефрагментация срабатывает, когда процент junk-сегментов достигает значения 60% (кстати, это значение можно поменять в контекстном меню устройства). При этом, когда на устройстве остается совсем мало места, LSFS включает агрессивную дефрагментацию, что замедляет работу дискового устройства в целом и негативно сказывается на качестве обслуживания пользователей. Если же места на диске физически совсем не остается - LSFS переходит в режим "read-only".
Как работают снапшоты
LSFS - это файловая система с изначальной поддержкой снапшотов. Каждый снапшот увеличивает занимаемое место на объем изменений, сделанных с момента последнего базового состояния. Снапшоты по умолчанию делаются автоматически каждые 5 минут и затем удаляются. Также можно сделать снапшот и вручную.
Во время нормального функционирования LSFS создает контрольные точки восстановления. Это последние консистентные части журнала, которые будут использованы при восстановлении в случае сбоя. Снапшоты можно посмотреть в Snapshot Manager в разделе Device Recovery Mode.
Как работает дедупликация
Уникальные блоки данных складываются на хранение и постоянно анализируются. Если среди новых блоков находится уже существующий блок, он заменяется на ссылку на уже сохраненный блок. У похожих виртуальных машин таких блоков может быть сотни и тысячи, а значит коэффициент дедупликации будет большим.
С другой стороны, файлы подкачки этих ВМ сильно уменьшат этот коэффициент, так как сбрасываемые в них страницы памяти достаточно уникальны. Таким образом, для 10 одинаковых виртуальных машин по 12 ГБ каждая и файлом подкачки 2 ГБ объем хранения будет составлять, например: (12-2)+2*10=30 ГБ
Как работает механизм ускорения производительности подсистемы хранения
При операциях записи, создания снапшотов и других используется технология Redirect-on-Write. Она позволяет записывать каждый новый блок последовательно на следующее доступное место на диске, организуя последовательную цепочку. Вне зависимости от того, какой механизм доступа используется, нижний уровень хранилища всегда получает унифицированные блоки размером 4 МБ.
LSFS собирает маленькие операции записи, которые идут в случайном порядке от нескольких виртуальных машин, в большую операцию ввода-вывода. Это иногда увеличивает производительность до 90% на запись по сравнению с использованием традиционных файловых систем, таких NTFS и ZFS.
Конечно, у этого позитивного процесса есть и обратная сторона - оверхэд на использование дискового пространства за счет высокого коэффициента фрагментации. Именно поэтому, как было сказано выше, дефрагментация работает постоянно, начиная с какого-то момента.
LSFS растет постоянно и может вырасти до коэффициента фрагментации 60%, что означает, что она будет занимать на диске 2,5X от начального объема (overprovisioning). Если прибавить сюда еще 20% затрат на метаданные LSFS (это максимальное значение), то вам понадобится до 3x начальной емкости хранилища (это только в моменте - как предельное максимальное значение). Это будет плата за высокую производительность и меньший износ накопителей, особенно SSD (вследствие меньшего числа операций записи). Подробную информацию о занимаемом LSFS пространстве можно получить в StarWind Management Console.
Синхронизация HA-устройств с поддержкой LSFS
Устройства HA на базе LSFS используют снапшоты в процессе синхронизации и синхронизируют только последние изменения.
Соответственно, в случае сбоя вам не потребуется полной синхронизации, а нужно будет только передать на резервный узел данные с момента последнего снапшота. Полная синхронизация идет только во время создания первоначальной реплики (при этом нулевые блоки не копируются, чтобы не передавать мусорный трафик).
Требования LSFS
Основными требованиями LSFS являются:
4.6 ГБ оперативной памяти сервера на 1 ТБ хранилища LSFS начального объема (при отключенной дедупликации).
7.6 ГБ оперативной памяти сервера на 1 ТБ хранилища LSFS начального объема (дедупликация включена).
Возможность обеспечить до 3X первоначального хранилища на overprovisioning, описанный выше.
Совместимость физических дисков и ОС на работу с 4K блоками. Hyper-V выравнивает корректно блоки VHDX (но VHD могут быть не выровнены), тома VMFS также могут быть выровнены на 4K блоки. Вы можете также использовать и универсальные 512-байтные блоки.
В итоге, тома LSFS выгодно использовать, когда вам требуется повышенная производительность операций записи, а также меньшая изнашиваемость дисковых накопителей. LSFS дает хороший эффект, когда она используется в средах с большим коэффициентом дедупликации, так как файловая система сама по себе также потребляет дисковое пространство за счет фрагментации и метаданных.