пятница, 6 марта 2015 г.

IBM FlashSystem - что за RAID внутри?






Раз я упомянул анонс новых систем  IBM FlashSystem 900 и V9000, то наверное стоит немного уделить внимания уникальной “фишке” этих систем - реализации отказоустойчивости.

В  FlashSystem используется RAID5 для защиты от сбоя всего модуля MicroLatency, но это далеко не единственная технология, обеспечивающая отказоустойчивость:
  • RAID5 защищает систему от сбоя модуля. В зависимости от числа модулей, конфигурация массива вальируется от 2D+1P+1HS, до 10D+1P+1HS. В системе всегда только один RAID массив для модулей, поэтому объем всех модулей должен быть одинаковым
  • RAID5 внутри каждого модуля защищает от сбоя отдельного чипа
  • Variable Stripe RAID внутри каждого модуля защищает от частичного сбоя чипов NAND
  • ECC на уровне чипа защищают от битовых и блочных ошибок
Кроме того, как и в любых системах на базе flash, присутствует зарезервированное пространство, которое используется когда очередная ячейка выходит из строя.

Совместное использование двух уровней RAID ("внутри” отдельных модулей и между всеми модулями) и носит фирменное название 2D RAID (two-dimensional RAID).

Благодаря такой многоуровневой защите можно минимизировать возникновение ошибок, приводящих к необходимости менять целый модуль MicroLatency. Кроме того, сохраняется возможность использовать RAID5 (а не RAID6) и не сталкиваться с повышенными рисками множественных ошибок (хотя объем самих модулей может достигать 5.7ТБ).   

Технология RAID “внутри” модуля MicroLatency была запатентована еще компанией TMS (где и родились предшественники нынешних FlashSystem -  тогда они назывались RamSAN) и носит название Variable Stripe RAID (VSR). Она позволяет не просто обеспечить отказоустойчивость при большинстве частичных сбоев внутри модуля, но и позволяет  большой срок службы модуля, а это, в свою очередь, снижает  стоимость, так как  не нужно закладывать дополнительные расходы на “лишние" замены в гарантийный срок.

Каждый MicroLatency модуль имеет внутри несколько чипов Flash и 4 FPGA контроллера, которые и реализуют VSR. Каждый из этих контроллеров, в свою очередь, “отвечает” не более чем за 20 чипов. Но RAID внутри модуля построен не на уровне чипов, а на уровне слоя (plane) в отдельных чипах (по 16 слоев в каждом чипе). Все это позволяет спокойно пережить сбой до 256 блоков перед тем как весь слой будет считаться сбойным. Чтобы модуль все-таки вышел из строя необходимо, как минимум:
  • признать сбойными  64 слоя
  • сбой 4 чипов в модуле целиком
Таким образом, разработчики FlashSystem постарались сделать все возможное, чтобы продлить жизнь отдельного модуля MicroLatency и обеспечить отказоустойчивость.

Отличительной особенностью VSR является:
  • RAID защищает не отдельный чип, а только слой чипа. Это позволяет гораздо эффективнее использовать модули, не производя лишних замен и перестроений массивов;
  • страйп не фиксирован в размере - в зависимости от состояния слоев, он может быть не в стандартной конфигурации 9D+1P, а 8D+1P, 7D+1P или 6D+1P.
Именно вариативный размер страйпа позволяет максимизировать объем полезного пространства в модуле, не “отбраковывая” рабочие части остальных чипов. Давайте посмотрим как это работает. В случае, когда мы используем обычный RAID-массив (пусть даже и на уровне слоя микросхемы), сбой в любом из слоев приведет к тому, что нам будет нужно исключить все такие же (еще рабочие!) слои остальных чипов, чтобы сохранить архитектуру массива:
Сбой на обычном RAID массиве

При использовании Variable Stripe RAID, нам достаточно перестроить страйп на меньшем количестве элементов:

Сбой в массиве Variabe Stripe RAID
Т.е. мы потеряем только малую часть одного чипа и не потеряем в скорости для имеющихся данных. Так как сбои чаще всего происходят не на уровне всей микросхемы, а на уровне отдельных блоков, мы получаем прекрасную возможность избежать лишних перестроений массивов, “отбрасывания” целых чипов из-за сбоя в одном слое и, разумеется, гораздо быстрее можем исправить проблему, так как в перестроении участвует лишь очень малая часть данных.

Кроме того, VSR работает “внутри” каждого модуля, не требуя для восстановления "перекачки" данных к центральному процессору или  FPGA, отвечающему за RAID на уровне системы. А это, в свою очередь, позволяет избежать деградации производительности при перестроении массивов, что для All Flash систем, где мы ожидаем получить гарантированный уровень производительности, очень важно.

И вот только в том случае, когда исчерпаны все “внутренние” ресурсы MicroLatency модуля по обеспечению отказоустойчивости, система использует RAID5 между модулями и задействует spare модуль для перестроения массива.

Что почитать:
IBM Redbooks про FlashSystem

Патент TMS на технологию VSR - здесь все очень подробно про VSR
Понравился пост? Подпишись через RSSRSS, EmailEmail или twitter!

2 комментария:

Анонимный комментирует...

diz:

Андрей, а что тут подразумевается под "слоем"? там же не 3d-nand?

Andrew Ivanov комментирует...

О, спасибо, это очень хороший вопрос! Я очень долго думал, как правильно перевести это на русский язык. И у меня до сих пор большие сомнения в корректности. Речь идет про организацию NAND чипа - в англоязычном варианте это "plane". В качестве примера (для понимания) можно взять даташит на любой микроновский чип. Для MT29F16G08FAA (чип взял первый попавшийся, на который гугл первым выдал описание) указан вот такой способ организации:

– Page size x8: 2,112 bytes (2,048 + 64 bytes)
– Block size: 64 pages (128K + 4K bytes)
– Plane size: 2,048 blocks
– Device size: 4Gb: 4,096 blocks; 8Gb: 8,192 blocks; 16Gb: 16,384 blocks

Вот "Plane" в организации чипа это и есть тот самый "слой", про который идет речь.
Исходя из того, как "внутри" устроен кристалл, использовать именно plane вполне логично - сбой скорее всего будет локализован в нем и, при этом, plane это только небольшая часть общего объема.