Недорогие, производительные, отказоустойчивые дисковые подсистемы
Концепция RAID была впервые описана коллективом авторов в составе Дэвида Паттерсона, Гарта Гибсона и Рэнди Катца из Калифорнийского университета в Беркли в статье под названием «Об избыточных массивах недорогих дисков» (D. Patterson, G. Gibson, and R. Katz, «A Case for Redundant Arrays of Inexpensive Disks (RAID)»). Она предлагала использовать вместо одиночных больших, дорогих и нестандартных дисков (Single Large Expensive Disk, SLED) избыточные массивы недорогих стандартных дисков (Redundant Arrays of Inexpensive Disk, RAID). Основными целями предложения были снижение стоимости, увеличение надежности и повышение производительности дисковой подсистемы. Авторы определяли пять разных способов организации, или уровней, RAID. Каждый из них имел свои преимущества и недостатки с точки зрения цены, производительности и надежности.
За более чем десятилетнюю историю RAID различными производителями были предложены собственные варианты RAID, но все они по сути представляют собой те или иные вариации первоначально предложенных уровней RAID. Ниже мы рассмотрим основные имеющиеся уровни RAID, а также их сравнительные достоинства и недостатки, в особенности такой спорный вопрос, как производительность.
ОСНОВНЫЕ ПОНЯТИЯ
Прежде чем переходить к описанию каждого из уровней RAID в отдельности, мы должны определить основные используемые понятия.
Чередование (striping, иногда в том же значении spanning) — данные из одного файла записываются на несколько дисков поблочно, т. е. распределяются между несколькими дисками. Это позволяет ускорить запись/чтение файлов за счет параллельного проведения операций ввода/вывода.
Зеркалирование (mirroring) — данные с одного диска в точности копируются на другой диск. В случае отказа одного диска информация по-прежнему будет доступна с другого.
Дублирование (duplexing) различных аппаратных компонентов, например контроллеров и дисков, повышает общую отказоустойчивость системы.
Контроль четности (parity) позволяет восстановить информацию в случае отказа одного из дисков. Данные записываются на диски по полосам (stripe), каждая полоса состоит из блоков (block или chunk, иногда cluster), каждый блок помещается на отдельный диск в массиве. Число дисков в массиве называется шириной полосы (stripe width). Суммирование бло-ков с помощью операции «исключающего или» (xor) дает блок четности:
parity=block1 xor block2 xor ... xor blockN.
Эта операция обратима и позволяет восстановить данные при потере одного из блоков.
УРОВНИ RAID
Несмотря на то что он и не обеспечивает избыточности, т. е. не позволяет восстановить информацию в случае отказа одного из дисков, этот способ организации одного большого виртуального диска из нескольких физических дисков меньшего размера часто называют RAID 0. Данные распределяются (чередуются) между составляющими массив дисками. Из-за отсутствия необходимости выделять место для записи контрольной информации реальная емкость массива равна суммарной емкости составляющих его дисков. Однако при отказе одного из дисков вся информация окажется потеряна.
Уровень RAID 1 обеспечивает сохранность данных самым простым из возможных способов — посредством дублирования (зеркального копирования) информации с одного диска на другой на том же контроллере. Однако такое решение вдвое увеличивает число необходимых дисков и, таким образом, оказывается достаточно дорогим.
Один из недостатков RAID 1 в том, что по сути массив состоит из одного диска (и его копии). Емкости одного диска часто оказывается недостаточно. Поэтому в современных системах RAID зеркалирование часто сочетается с чередованием. Иными словами, данные из массива RAID 0 в точности дублируются на другой массив RAID 0. Данный уровень RAID называют RAID 0+1 или RAID 10.
В RAID 2 данные распределяются между несколькими дисками, а контрольная информация записывается на дополнительные диски. Применение кода Хамминга обеспечивает наивысшую надежность среди стандартных уровней RAID, но из-за своей высокой цены и сложности (в случае четырех дисков с данными требуется три дополнительных диска) RAID 2 не получил широкого распространения.
В случае RAID 3 данные записываются на диски массива байт за байтом: первый байт — на первый диск, второй байт — на второй диск и т. д., причем запись производится параллельно. Байт четности вычисляется на основании соответствующих байтов данных и записывается на отдельный диск — так называемый диск четности. RAID 4 принципиально ничем не отличается от RAID 3, только данные записываются не побайтно, а поблочно. Как и RAID 3, RAID 4 предусматривает отдельный диск для записи информации о четности.
Рис. 1. В RAID 5 информация о четности записывается поочередно на каждый из дисков массива. Такое решение позволяет повысить скорость записи при многочисленных обновлениях данных. |
В отличие от уровней 3 и 4, RAID 5 не предусматривает отдельного диска четности. Как и данные, информация о четности чередуется между дисками — в первой полосе блок четности записывается на диск под номером N, во второй полосе — на диск N-1 и т. д., по кругу (см. Рисунок 1). Чем вызван отказ от отдельного диска четности, мы увидим ниже при сравнении производительности уровней RAID на различных операциях.
RAID 6 обеспечивает повышенную отказоустойчивость за счет использования второй, независимой, схемы контроля четности. Как и в RAID 5, данные чередуются между дисками массива, но четность вычисляется не только для полосы, но и для диска (точнее, данных на диске). Для достижения той же емкости массив должен иметь на один диск больше, чем RAID 3, 4 или 5, и на два больше, чем RAID 0. Вместе с тем такое решение позволяет обеспечить доступ к данным даже при отказе более чем одного диска, но оно возлагает на контроллер чрезвычайно высокую нагрузку по вычислению адресов с информацией о четности и, кроме того, обусловливает очень медленную скорость записи.
Еще один уровень — RAID 7 — предлагается фактически только одной компанией, Storage Computer Corp., и его название является ее торговой маркой. Реализация массива предусматривает асинхронное выполнение операций ввода/вывода, использование встроенной операционной системы реального времени для ускорения этих операций и другие ухищрения для повышения производительности массива. Как утверждается, производительность на всех операциях в 1,5—6 раз выше, чем у других массивов.
И, наконец, последний из наиболее известных уровней — RAID 53. Это, так сказать, массив массивов. Если диски расположить схематически в виде прямоугольной матрицы, то столбцы будут составлять массивы RAID 3 (у некоторых производителей — RAID 5), а ряды — массивы RAID 0. Такой массив достаточно дорог в реализации, к тому же все шпиндели дисков должны быть синхронизованы, что ограничивает выбор дисков.
СПОСОБЫ РЕАЛИЗАЦИИ
Для распределения данных по дискам и вычисления четности любая система RAID использует контроллер RAID. Последний реализуется обычно одним из трех способов:
- программный;
- внутренний аппаратный;
- внешний аппаратный.
Каждый из них имеет свои преимущества и недостатки. Так, программные реализации обходятся дешевле всего, но вследствие интенсивного использования ресурсов компьютера они имеют наихудшую производительность. Внешние аппаратные реализации, наоборот, стоят дорого, но и производительность и надежность у них наивысшая.
Рис. 2. В случае выхода из строя какого-либо из дисков массива запасной диск автоматически включается в массив. Локальный запасной диск является резервным для одного конкретного массива, а глобальный — для нескольких. |
Наибольшее распространение получили программные реализации для RAID 0 и 1. В частности, Novell в течение многих лет предлагает соответствующее программное обеспечение. Оно позволяет объединить в один массив с чередованием записи данных диски на разных контроллерах и даже разных типов. Ввиду относительно невысоких требований серверов NetWare к мощности ЦПУ и объему оперативной памяти производительность довольно приличная. Однако, как правило, программные реализации имеют значительно худшую производительность, особенно на операциях записи. Кроме NetWare необходимые средства организации массивов RAID имеют, например, Windows NT и Linux.
Внутренний аппаратный контроллер RAID вставляется обычно в один из слотов шины компьютера, а внешний аппаратный контроллер RAID связывает компьютер с внешним дисковым массивом. Однако если первая реализация зависит, вообще говоря, от аппаратной платформы и операционной системы, то вторая полностью независима от типа используемого на компьютере оборудования и ОС. Аппаратные реализации позволяют освободить ЦПУ компьютера для выполнения более общих задач. Внешние подсистемы RAID имеют часто избыточные контроллеры RAID, источники питания, охлаждающие вентиляторы и могут обслуживать несколько хостов. В частности, в некоторых реализациях используются локальные и глобальные резервные диски для замены отказавшего диска из массива (см. Рисунок 2).
ПРОБЛЕМЫ ПРОИЗВОДИТЕЛЬНОСТИ
С увеличением быстродействия ЦПУ и удешевлением модулей памяти скорость ввода/вывода дисковой подсистемы становится основным препятствием к повышению общей производительности системы. Если операции с ЦПУ и памятью занимают несколько микро- или даже наносекунд, то дисковые операции — уже миллисекунды, т. е. на несколько порядков больше. Таким образом, чтение одного блока с диска может длиться несколько тысяч операций ЦПУ.
Объединение дисков в массив позволяет заметно увеличить скорость ввода/вывода за счет параллельного проведения операций чтения/записи. Например, при чередовании, как в RAID 0, если размер запрашиваемого файла больше, чем размер одного блока, то запрос обслуживается более чем одним диском. В этом случае запрос разбивается на несколько запросов, которые выполняются параллельно. После выполнения данные собираются в единое целое. Очевидно, что чем больше дисков в массиве, тем быстрее будет выполняться запрос.
В описываемом случае мы неявно подразумевали один объемный запрос — так называемый последовательный (sequential request). В принципе, чередование позволяет ускорить выполнение и независимых одновременных запросов — так называемых случайных запросов (random request). Когда несколько таких запросов поступает одновременно, один диск может обслуживать запрос на запись, второй — запрос на чтение, третий — другой запрос на запись и т. д. Чем меньше размер блока, тем быстрее обслуживается каждый отдельный запрос ввода/вывода, но и тем меньше разных запросов может быть обслужено одновременно.
Чередование само по себе не обеспечивает отказоустойчивости, а необходимость записи информации о четности порождает свои специфические проблемы в области производительности. В частности, производительность может заметно отличаться в случае преобладания операций чтения или, наоборот, операций записи. Если в случае чтения обращений к диску четности не происходит (за исключением случаев, когда произошла ошибка чтения), то запись даже небольшого обновления предполагает выполнение дополнительных операций чтения и записи. При записи данные должны быть считаны и с других блоков данных в полосе, и из блока четности. Только после вычисления новой четности измененные данные могут быть записаны на диск. Ускорить процесс записи позволяют такие методы, как кэширование данных, например для их накопления перед записью на диск.
К сожалению, популярное рассмотрение невозможно без значительных упрощений. Учет всех влияющих на производительность реального массива факторов предполагал бы написание научного исследования на эту тему, каковых, кстати, имеется немало.
СРАВНИТЕЛЬНЫЕ ХАРАКТЕРИСТИКИ
Как уже упоминалось, каждая разновидность RAID имеет свои преимущества и недостатки с точки зрения производительности, отказоустойчивости и стоимости. Наиболее неоднозначным является вопрос производительности, тем более что она зависит от конкретных параметров массива, например числа дисков и размера блока, а также от используемых приложений, в частности от соотношения и размеров операций чтения и записи.
Среди всех уровней RAID 0 обеспечивает наилучшую производительность при обслуживании объемных последовательных и множественных случайных запросов (как на чтение, так и на запись), однако это достигается за счет отсутствия поддержки отказоустойчивости. Таким образом, он не выполняет одной из главных задач RAID.
Зеркалирование в RAID 1 позволяет добиться отказоустойчивости посредством дублирования дисков при соответствующем увеличении цены. По сравнению с одиночным диском оно не дает никакого выигрыша при записи (при условии, что запись производится параллельно на оба диска), но увеличивает скорость чтения вдвое за счет распределения операций чтения между дисками.
Применение в RAID 2 кода Хамминга ограничивает разнообразие возможных конфигураций, поэтому из-за своей высокой цены и сложности он не получил распространения, несмотря на неплохую производительность.
Уровень RAID 3 оптимально подходит для записи/чтения очень больших файлов, например файлов изображений. Однако ввиду того, что информация о четности хранится на одном диске, каждая операция записи требует обращения к этому диску, поэтому при множественных операциях записи небольших объемов данных производительность ощутимо падает.
Ввиду того, что размер блока в RAID 4 намного больше, чем в случае RAID 3 (напомним, что в RAID 3 он равен одному байту), небольшие запросы ввода/вывода могут обслуживаться разными дисками независимо, и, таким образом, в точной синхронизации вращения шпинделей дисков нет необходимости. Однако из-за наличия выделенного диска четности, как и RAID 3, он не подходит для приложений с частым обновлением информации.
Благодаря распределению информации о четности по разным дискам RAID 5 более эффективен на небольших операциях записи, чем RAID 3 и 4. Однако реальная производительность RAID 5 сильно зависит от соотношения запросов на чтение/запись, типичного размера запроса, заданного размера блока, числа дисков в массиве.