RAID-массивы

Производительность процессоров за последнее десятилетие значительно возрос­ла, увеличиваясь почти вдвое каждые 1,5 года. Однако с производительностью дисков дело обстоит иначе. В 70-х годах среднее время поиска в мини-компьюте­рах составляло от 50 до 100 мс. Сейчас время поиска составляет около 10 мс. Во многих технических отраслях (например, в автомобильной или авиационной промышленности) повышение производительности в 5 или 10 раз за два десяти­летия считалось бы грандиозным, но в компьютерной индустрии эти цифры вы­зывают недоумение. Таким образом, разрыв между производительностью про­цессоров и дисков все это время продолжал расти.

Как мы уже видели, для того чтобы увеличить быстродействие процессора, используются технологии параллельной обработки данных. Уже на протяжении многих лет разным людям приходит в голову мысль, что было бы неплохо сде­лать так, чтобы устройства ввода-вывода также могли работать параллельно. В 1988 году в статье [162] было предложено 6 разных вариантов организации дисковой памяти, которые могли использоваться для повышения производи­тельности, надежности или того и другого. Эти идеи были сразу заимствованы производителями компьютеров, что привело к появлению нового класса уст­ройств ввода-вывода под названием RAID. Изначально аббревиатура RAID рас­шифровывалась как Redundant Array of Inexpensive Disks (избыточный массив недорогих дисков), но позже буква I в аббревиатуре вместо изначального Inexpensive (недорогой) стала означать Independent (независимый). Может быть, это дало производителям законное право делать диски неоправданно доро­гими? RAID-массиву противопоставлялся диск SLED (Single Large Expensive Disk — один большой дорогостоящий диск).

Основная идея RAID состоит в следующем. Рядом с компьютером (обычно большим сервером) устанавливается бокс с дисками, контроллер диска замеща­ется RAID-контроллером, данные копируются в RAID-массив, а затем произво­дятся обычные действия. Иными словами, операционная система воспринимает RAID как SLED, при этом у RAID-массива выше производительность и надеж­ность. Поскольку SCSI-диски обладают высокой производительностью при до­вольно низкой цене и при этом один контроллер может управлять несколькими дисками (до семи дисков на 8-разрядных моделях SCSI и до 15 на 16-разряд­ных), большинство RAID-устройств состоит из SCSI-контроллера, предназна­ченного для управления RAID-массивом, и бокса SCSI-дисков, которые опера­ционная система воспринимает как один большой диск. Таким образом, чтобы использовать RAID-массив, не требуется никаких изменений в программном обеспечении, что очень выгодно для многих системных администраторов.

RAID-системы имеют несколько достоинств. Во-первых, как уже отмечалось, программное обеспечение воспринимает RAID-массив как один большой диск. Во-вторых, данные на всех дисках RAID-массива распределены по дискам таким образом, чтобы можно было осуществлять параллельные операции. Несколько различных вариантов распределения данных, предложенных в [162], сейчас из­вестны как RAID-массив уровня 0, RAID-массив уровня 1 и т. д., вплоть до RAID-массива уровня 5. Кроме того, существует еще несколько уровней, кото­рые мы не будем обсуждать. Термин «уровень» несколько неудачный, поскольку здесь нет никакой иерархической структуры. Просто существуют 6 разных вари­антов организации дисков.

RAID-массив уровня 0 показан на рис. 2.19, а. Он представляет собой вирту­альный диск, разделенный на полосы (strips) по k секторов каждая, при этом сек­торы с 0 по k - 1 занимают полосу 0, секторы с k по 2k - 1 — полосу 1 и т. д. Для k = 1 каждая полоса — это сектор, для k = 2 каждая полоса — это два сектора и т. д. В RAID-массиве уровня 0 полосы последовательно записываются по кругу, как показано на рис. 2.19, а. Это называется распределением данных (striping) по дискам. На рисунке изображен RAID-массив с четырьмя дисками. Например, если программное обеспечение вызывает команду для считывания блока дан­ных, состоящего из четырех последовательных полос и начинающегося на грани­це между полосами, то RAID-контроллер разбивает эту команду на 4 отдельные команды, каждую для одного из четырех дисков, и выполняет их параллельно. Таким образом, мы получаем устройство параллельного ввода-вывода без изме­нения программного обеспечения.

RAID-массив уровня 0 лучше всего работает с большими запросами — чем больше запрос, тем лучше. Если в запросе требуется задействовать полос боль­ше, чем дисков в RAID-массиве, то некоторые диски получают по несколько за­просов, и как только такой диск завершает выполнение первого запроса, он при­ступает к следующему. Задача контроллера состоит в том, чтобы разделить запрос должным образом, послать нужные команды соответствующим дискам в правильной последовательности, а затем правильно записать результаты в па­мять. Производительность при таком подходе очень высокая, и реализовать его несложно.

RAID-массив уровня 0 хуже всего работает с операционными системами, которые время от времени запрашивают небольшие порции данных (по одному сектору за обращение). В этом случае результаты окажутся, конечно, правиль­ными, но не будет никакого параллелизма и, следовательно, никакого выигры­ша в производительности. Другой недостаток такой структуры состоит в том, что надежность у нее потенциально ниже, чем у SLED-диска. Например, рас­смотрим RAID-массив, состоящий из четырех дисков, на каждом из которых могут происходить сбои в среднем каждые 20 ООО часов. То есть сбои в таком RAID-массиве будут случаться примерно через каждые 5000 часов, при этом все данные могут быть утеряны. У SLED-диска сбои происходят также в сред­нем каждые 20 000 часов, но, так как это всего один диск, его надежность в 4 раза выше. Поскольку в описанной разработке нет никакой избыточности, это «ненастоящий»1 RAID-массив.

Следующая разновидность — RAID-массив уровня 1. Он показан на рис. 2.19, б и, в отличие от RAID-массива уровня 0, является настоящим RAID-массивом2. В этой структуре дублируют все диски, таким образом получается 4 исходных диска и 4 резервные копии.

1 На самом деле настоящий, но нулевого уровня. — Примеч. научн. ред.

2 На рис. 2.19, б изображен RAID уровня 0 + 1, а не уровня 1. — Примеч. научн. ред.

clip_image002

clip_image004

Рис. 2.19. RAID-массивы с нулевого по пятый уровень. Резервные копии и диски четности

закрашены серым цветом

При записи информации каждая полоса записывается дважды. При считывании может использоваться любая из двух копий, при этом одновременно может про­исходить загрузка информации с большего количества дисков, чем в RAID-мас­сиве уровня 0. Следовательно, производительность при записи будет такая же, как у обычного диска, а при считывании — гораздо выше (максимум в два раза). Отказоустойчивость отличная: если происходит сбой на диске, вместо него ис­пользуется копия. Восстановление состоит просто в установке нового диска и копировании всей информации с резервной копии на него.

В отличие от уровней 0 и 1, которые работают с полосами секторов, RAID-массив уровня 2 оперирует словами, а иногда даже байтами. Представим, что каждый байт виртуального диска разбивается на два фрагмента по 4 бита, за­тем к каждому из них добавляется код Хэмминга, и таким образом получается слово из 7 бит, у которого 1, 2 и 4 — биты четности. Затем представим, что 7 дис­ков, изображенные на рис. 2.19, в, синхронизированы по позиции кронштейна и позиции вращения. Тогда за одну операцию можно записать слово из 7 бит с кодом Хэмминга на 7 дисков, по одному биту на диск.

Подобная схема использовалась в так называемых думающих машинах СМ-2. К 32-разрядному слову с данными добавлялось 6 бит четности (код Хэмминга). В результате получалось 38-разрядное кодовое слово, к которому добавлялся до­полнительный бит четности, и это слово записывалось на 39 дисков. Общая про­изводительность была огромной, так как одновременно могло записываться 32 сектора данных. При утрате одного из дисков проблем также не возникало, поскольку потеря одного диска означала потерю одного бита в каждом 39-раз­рядном слове, а с этим код Хэмминга справлялся моментально.

Однако подобная схема требует, чтобы все диски были синхронизированы по вращению. Кроме того, ее имеет смысл использовать, только если имеется доста­точно большое количество дисков (даже при наличии 32 дисков для данных и 6 дисков для битов четности накладные расходы составляют 19 %). К тому же имеет место большая нагрузка на контроллер, поскольку он должен вычислять контрольную сумму кода Хэмминга при передаче каждого бита.

RAID-массив уровня 3 представляет собой упрощенную версию RAID-масси­ва уровня 2. Он изображен на рис. 2.19, г. Здесь для каждого слова данных вы­числяется 1 бит четности и записывается на диск четности. Как и в RAID-масси­ве уровня 2, диски должны быть точно синхронизированы, поскольку каждое слово данных распределено по нескольким дискам.

На первый взгляд может показаться, что один бит четности позволяет только обнаруживать, но не исправлять ошибки. Если речь идет о произвольных ошиб­ках, это наблюдение верно. Однако если речь идет о сбое диска, бит четности обеспечивает исправление ошибки в одном бите, поскольку позиция неправиль­ного бита известна. Если происходит сбой, контроллер выдает информацию, что все биты равны 0. Если в слове возникает ошибка четности, бит с диска, на кото­ром произошел сбой, должен быть равен 1, и, следовательно, он исправляется. Хотя RAID-массивы уровней 2 и 3 обеспечивают очень высокую скорость пере­дачи данных, число запросов от устройств ввода-вывода в секунду не больше, чем при наличии одного диска.

RAID-массивы уровней 4 и 5, как и RAID-массивы начальных уровней, рабо­тают с полосами, а не со словами, имеющими биты четности, и не требуют син­хронизации дисков. RAID-массив уровня 4 (см. рис. 2.19, д) устроен так же, как RAID-массив уровня 0, с тем различием, что у RAID-массива уровня 4 есть до­полнительный диск, на который записываются полосы четности. Например, пусть каждая полоса состоит из k байт. Все полосы должны находиться в отношении ИСКЛЮЧАЮЩЕГО ИЛИ, и полоса четности для проверки этого отношения также должна состоять из k байт. Если происходит сбой на диске, утраченные байты могут быть вычислены заново при помощи информации с диска четности.

Такое решение предохраняет от потерь на диске, но значительно снижает производительность в случае небольших исправлений. Если изменяется один сектор, необходимо считать информацию со всех дисков, чтобы опять вычислить биты четности и записать их заново. Вместо этого можно считать с диска преж­ние данные и прежние биты четности и из них вычислить новые биты четности. Но даже с такой оптимизацией процесса при наличии небольших исправлений требуется произвести два считывания и две записи.

Такие трудности при загрузке данных на диск четности могут быть препятст­вием для достижения высокой производительности. Эта проблема устраняется в RAID-массиве уровня 5, в котором биты четности распределяются равномерно по всем дискам и записываются по кругу, как показано на рис. 2.19, е. Однако в случае сбоя диска восстановить содержание утраченного диска достаточно слож­но, хотя и можно.

Источник: Таненбаум Э. Архитектура компьютера. 5-е изд. (+CD). — СПб.: Питер, 2007. — 844 с: ил.

Предлагаю ознакомиться с аналогичными статьями: