ОБЗОРЫ

Новая технология позволяет противостоять многоразрядным ошибкам

Для обеспечения приемлемой производительности современным серверам требуются огромные объемы памяти. Однако использование быстродействующих и дорогих кристаллов не всегда эффективно с точки зрения баланса стоимости и быстродействия, поэтому обычно применяется недорогая память большого объема. Себестоимость памяти снижают, как правило, путем максимального повышения разрядности микросхем. Плотная упаковка (т. е. повышение разрядности) микросхем памяти позволила резко снизить соотношение “цена/емкость”. Такие микросхемы передают и получают четыре или восемь разрядов данных в каждой операции доступа.

Ошибки памяти можно подразделить на аппаратные и случайные. Аппаратные ошибки обусловлены главным образом дефектами кремниевого кристалла или монтажных соединений микросхем DRAM и со временем не исчезают. Случайные же (или “мягкие”) обычно вызываются заряженными частицами или излучением; они непостоянны и со временем пропадают. Ранее основной причиной случайных ошибок были альфа-частицы, но более строгий контроль качества материала, из которого делаются корпуса микросхем DRAM, позволил производителям практически ликвидировать эту причину сбоев. В настоящее время основной источник случайных ошибок в микросхемах DRAM - электрические возмущения, вызванные космическими лучами - потоками высокоэнергетичных элементарных частиц, приходящими из космоса.

Обнаружение ошибок

В начале 90-х годов на большинстве серверов, оборудованных микропроцессорами Intel, применялся метод проверки четности памяти, позволявший лишь обнаруживать ошибки, но не исправлять их. Широкое применение он нашел еще в первых моделях компьютеров для оценки достоверности хранимой в оперативной памяти информации.

Данный метод контроля имел определенный смысл, когда микросхемы памяти были еще недостаточно надежными. К тому же необходимость иметь на каждые восемь информационных разрядов один бит четности увеличивала стоимость модуля более чем на 10%.

Высокая частота ошибок четности памяти вынудила отрасль перейти на новый стандарт и обеспечить поддержку ECC (Error Checking and Correcting - “обнаружение и исправление ошибок”). Обычно эту особенность называют SEC/DED (Single Error Correction/Double Error Detection - “коррекция единичных и обнаружение двойных ошибок”). Механизм SEC/DED не позволяет обнаруживать ошибки более чем в двух разрядах. В этом случае целостность информации нарушается. В архитектуре этого типа ошибки в нескольких разрядах неустранимы и приводят к отказу системы, а сбои единичных разрядов исправляются автоматически, незаметно (“прозрачно”) для операционной системы и прикладных программ.

Идея, лежащая в основе метода ECC, довольно проста - каждый разряд памяти входит более чем в одну контрольную сумму. Это требует увеличения числа контрольных разрядов, но дает возможность восстанавливать значение сбойного бита по несовпадающим контрольным суммам. Итак, ECC предполагает использование одного разряда четности на байт информации для нахождения одиночных ошибок, а для их исправления требуется 7 бит для 32- и 8 бит для 64-разрядной памяти. При этом легко обнаруживаются двойные ошибки. Следовательно, для ECC подходят обычные модули с контролем четности, если это допускает контроллер памяти. Основным недостатком при этом является снижение общей производительности системы, на которую возлагаются дополнительные вычисления. Другой способ реализации ECC - размещение логики контроля не в контроллере памяти на системной плате, а на самом модуле. Это позволяет избежать снижения производительности, но стоимость таких модулей выше обычных. Поскольку ошибки в большем числе разрядов случались чрезвычайно редко, метод ECC дал возможность существенно повысить надежность систем. Сегодня технология ECC является стандартом и применяется практически на всех серверах.

По мере уплотнения DRAM-устройств число многоразрядных ошибок увеличивается. Кроме того, современные серверы оснащаются все более объемной памятью (за счет увеличения количества модулей или установки модулей с большим объемом памяти), в связи с чем вероятность неустранимых ошибок DRAM-памяти - и случайных, и постоянных - возрастает. Таким образом, память стандарта SEC/DED, которая только недавно обеспечивала вполне удовлетворительные характеристики, теперь не отвечает требованиям высокой надежности, доступности и удобства в эксплуатации (RAS, Reliability, Availability and Serviceability), предъявляемым современными серверами. Это, в частности, касается серверов масштаба предприятия, стандартные объемы памяти которых сегодня превышают несколько гигабайт. Кроме того, следует отметить, что требования к объемам памяти существенно возросли после выпуска 64-разрядных компьютерных систем семейства Itanium.

Механизм исправления

Одной из составных частей инициативы X-Architecture корпорации IBM стала технология исправления ошибок Chipkill, обеспечивающая защиту серверов от отказов отдельных микросхем и многоразрядных ошибок в модулях памяти. Chipkill - это механизм, позволяющий памяти противостоять многоразрядным ошибкам на отдельных микросхемах DRAM, в том числе сбою всех разрядов данных. В механизме Chipkill существуют два основных метода исправления ошибок, причем они могут применяться совместно. Эти методы базируются на определенном наборе микросхем и особой аппаратной архитектуре системы - их поддержку невозможно обеспечить простым обновлением программного обеспечения.

В первом методе каждый бит данных модуля памяти размещается в отдельном “слове ECC”. (Слово ECC - это набор разрядов данных и контрольных разрядов, в котором обнаружение и исправление ошибок обеспечивается алгоритмом ECC.) Допустим, что разрядность системы памяти составляет 32 байта (или 256 разрядов). Биты ECC добавляются так, чтобы общая ширина блока (и контрольные, и биты данных) составляла 288 разрядов. Четыре слова ECC, каждое из которых состоит из 64 разрядов данных и восьми контрольных разрядов ECC, поддерживают механизм SEC/DED и распределяются по DRAM-модулям. Например, если DIMM содержит модули х4 DRAM, четыре бита каждого устройства распределяются по разным словам ECC. Сбой всех четырех битов - это всего лишь четыре единичные ошибки в четырех словах ECC, и они устраняются автоматически. В этом примере механизм Chipkill поддерживается только на DIMM-модулях, состоящих из микросхем х4 DRAM.

Второй метод заключается в предоставлении механизму ECC большего числа разрядов для хранения контрольных кодов, чтобы обеспечить исправление не одного, а нескольких разрядов. При этом используются соответствующие математические алгоритмы устранения многоразрядных ошибок при определенном количестве контрольных битов ECC и битов данных. Например, 144-разрядное слово ECC, состоящее из 128 разрядов данных и 16 битов ECC, позволяет исправлять ошибки, охватывающие до четырех разрядов данных. (Для исправления сбоя четырех бит необходимо, чтобы они располагались смежно, а не случайно.) Соотношение разрядов ECC и разрядов данных такое же, как и в предыдущем примере (16/128 и 8/64), однако более длинное слово ECC дает возможность применить более эффективный алгоритм обнаружения и исправления ошибок.

Совместное использование этих двух методов обеспечивает коррекцию по механизму Chipkill на DIMM-модулях с микросхемами х8 DRAM. Два 144-разрядных слова ECC распределяются так, чтобы на каждом DRAM в первом и втором словах ECC исправлялись по четыре разряда. При этом обеспечивается поддержка механизма Chipkill при использовании DIMM-модулей, состоящих как из микросхем х4 DRAM, так из х8 DRAM.

На серверах Netfinity (на смену которым пришли машины eServer xSeries) инженеры IBM решили эту проблему, разместив избыточный массив недорогих микросхем DRAM (Redundant Array of Inexpensive DRAM, RAID) непосредственно на DIMM-модулях. При каждом доступе к памяти RAID-микросхема вычисляет контрольный код ECC для всего набора микросхем и сохраняет результат в резервной памяти на защищаемом DIMM-модуле. В случае отказа одной микросхемы DIMM-модуля сохраненная на RAID-массиве информация применяется для восстановления потерянных данных, обеспечивая бесперебойную работу всего сервера Netfinity. Такая RAID-технология напоминает RAID-механизмы, применяемые для защиты данных на дисковых массивах, и называется Chipkill DRAM.

Специалисты IBM разработали заказную специализированную микросхему для Chipkill, которая называется ECC ASIC (Application-Specific Integrated Circuit) и выполняет исправление ошибок без замедления доступа к высокопроизводительной EDO-памяти с временем доступа 50 нс. Таким образом, установка DIMM-модулей Chipkill на серверы Netfinity, оборудованные процессором Intel Xeon, не требует модификации плат памяти, а новые модули не вызывают никакого снижения производительности.

Обнаружение и оповещение

Поскольку основная задача Chipkill - исправление ошибок памяти, в нем применяются такие же механизмы обнаружения и оповещения, как и в ECC. Выполнение двух этих операций - обнаружения и оповещения - никак не сказывается на производительности оборудования или программного обеспечения - издержки те же, что и для стандартных механизмов ECC.

Теперь вкратце остановимся на том, как может выполняться обнаружение и оповещение о постоянных и случайных ошибках в серверных архитектурах с применением обоих механизмов - ECC и Chipkill.

Обнаружение и исправление ошибок памяти осуществляются в системном наборе микросхем. Код исправления ошибок (ECC) генерируется при записи и проверяется при чтении во всех системных операциях с памятью “прозрачно” для прикладных программ. Обнаруженная ошибка автоматически исправляется до передачи данных получателю.

При этом событие ошибки регистрируется оборудованием, а системная BIOS уведомляется об исправлении ошибки и месте, где она произошла. Набор микросхем также учитывает исправленные ошибки, что позволяет BIOS выявлять DIMM-модули, в которых ошибки возникают и исправляются постоянно. Получив уведомление, система BIOS опрашивает регистры набора микросхем, чтобы определить, где произошла ошибка памяти. Порядок такого опроса в значительной степени зависит от конструкции конкретной системы, поэтому он и выполняется на уровне BIOS. Обнаружив DIMM, вызвавший ошибку, BIOS регистрирует эту информацию в системном журнале, который является, например, частью встроенной системы управления сервером (Embedded Server Management). DIMM-модули легко заменяются в процессе эксплуатации и могут нуждаться лишь в предсказательном оповещении об ошибках и замене, поэтому нет необходимости локализовать ошибки с точностью до отдельной микросхемы на плате DIMM-модуля. Получая за сравнительно короткое время повторяющиеся сообщения об исправленных ошибках от одного DIMM-модуля, BIOS отключает соответствующий механизм оповещения и регистрирует этот факт в журнале системы управления сервером. Это избавляет систему от дополнительной нагрузки, обусловленной обработкой всех ошибок памяти; постоянная ошибка DRAM иногда генерирует миллионы сообщений об исправлениях в минуту. Постоянная ошибка регистрируется, и механизм уведомления отключается, чтобы предотвратить снижение общей производительности системы.

Программное обеспечение управления системой, поставляемое в составе многих серверов, анализирует системный журнал при каждом внесении записи системой BIOS. Ошибки единичных разрядов инициируют уведомление одного из трех возможных уровней: warning (“предупреждение”), critical (“критическая”), nonrecoverable (“неустранимая”). По-настоящему случайная ошибка вряд ли инициирует уведомление в стеке программы управления системой. Однако постоянные неполадки в работе DIMM-модуля приводят к инициации уведомления программы управления системой, после чего она назначает службе технической поддержки задание на замену неисправного DIMM-модуля. Постоянная ошибка, вызвавшая отключение механизма регистрации исправлений, в любом случае инициирует уведомление. Постоянные ошибки в одном разряде или устраняемые средствами Chipkill не вызывают отказа системы, тем не менее они увеличивают вероятность того, что очередная случайная ошибка приведет к критическому, неустранимому сбою. Поэтому администраторы системы должны внимательно следить за уведомлениями о дефектных DIMM-модулях и своевременно назначать службе технической поддержки задания на их замену.