Производительность процессоров за последнее десятилетие значительно возросла, увеличиваясь почти вдвое каждые 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. — Примеч. научн. ред.
Рис. 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 с: ил.