Глава 10: Надежность и отказоустойчивость в проектировании GPU
По мере того, как GPU становятся все более распространенными в приложениях, связанных с безопасностью, таких как автономные транспортные средства, робототехника и медицинские устройства, обеспечение их надежности и отказоустойчивости становится первостепенной задачей. GPU подвержены различным типам неисправностей и ошибок, которые могут привести к сбоям в системе, повреждению данных или неправильным результатам. В этой главе мы рассмотрим типы неисправностей и ошибок в GPU, схемы обнаружения и исправления ошибок, механизмы контрольных точек и восстановления, а также принципы проектирования для обеспечения надежности и устойчивости.
Типы неисправностей и ошибок в GPU
Неисправности и ошибки в GPU можно классифицировать по нескольким категориям в зависимости от их происхождения, продолжительности и влияния на систему. Понимание этих различных типов неисправностей и ошибок имеет решающее значение для разработки эффективных стратегий смягчения последствий.
Мягкие ошибки
Мягкие ошибки, также известные как временные неисправности, являются временными ошибками, вызванными внешними факторами, такими как космические лучи, альфа-частицы или электромагнитные помехи. Эти ошибки не вызывают постоянного повреждения оборудования и могут быть исправлены путем перезаписи затронутых данных или перезапуска затронутой операции.
Мягкие ошибки могут проявляться в различных частях GPU, таких как:
-
Триггеры и защелки: Одиночное событие сбоя (SEU) может вызвать изменение состояния триггера или защелки, что приводит к неправильным данным или потоку управления.
-
Ячейки SRAM: Мягкие ошибки в ячейках SRAM, таких как используемые в кэшах и регистровых файлах, могут повредить хранимые данные.
-
Ячейки DRAM: Хотя мягкие ошибки в ячейках DRAM встречаются реже, чем в SRAM, они также могут вызывать изменение битов из-за внешних факторов.
На рисунке 10.1 показано влияние мягкой ошибки на триггер.
Космический луч
|
|
v
+------------+
| |
D ----->| Триггер |----> Q
| |
+------------+
|
|
v
```Мягкая ошибка
Рисунок 10.1: Мягкая ошибка, вызванная космическим лучом, поражающим триггер.
Жесткие ошибки
Жесткие ошибки, также известные как постоянные неисправности, являются необратимыми физическими дефектами в оборудовании, которые сохраняются со временем. Эти ошибки могут быть вызваны производственными дефектами, износом или физическим повреждением устройства.
Примеры жестких ошибок в GPU включают:
-
Застрявшие ошибки: Сигнал или элемент памяти постоянно застрял на логическом значении '0' или '1', независимо от входа.
-
Ошибки замыкания: Две или более сигнальных линий случайно соединены, вызывая короткое замыкание.
-
Открытые ошибки: Сигнальная линия случайно отключена, вызывая плавающее или неопределенное значение.
-
Ошибки задержки: Сигнал занимает больше времени, чем ожидалось, для распространения по пути, что приводит к нарушениям синхронизации.
На рисунке 10.2 показан пример застрявшей на 0 ошибки в логическом элементе.
Застрявшая на 0 ошибка
|
|
v
+---+
-->| & |-->
| |
-->| |
+---+
Рисунок 10.2: Застрявшая на 0 ошибка в элементе И.
Периодические ошибки
Периодические ошибки - это неисправности, которые возникают спорадически и сложно воспроизводятся последовательно. Эти ошибки могут быть вызваны различными факторами, такими как:
-
Предельное оборудование: Компоненты, работающие близко к своим предельным значениям, делают их более восприимчивыми к воздействию окружающей среды или старению.
-
Факторы окружающей среды: Колебания температуры, изменения напряжения или электромагнитные помехи могут вызывать периодические ошибки.
-
Эффекты старения: По мере старения устройства некоторые компоненты могут становиться более склонными к периодическим сбоям из-за износа или деградации.
Периодические ошибки представляют значительную проблему для обнаружения и исправления ошибок, поскольку они могут не фиксироваться традиционными методами тестирования или мониторинга.
Скрытая порча данных
Скрытая порча данных (SDC) относится к ошибкам, которые повреждают данные безВот перевод на русский язык с сохранением оригинального кода:
Сбои обнаружения (SDC) возникают, когда ошибки не обнаруживаются аппаратным или программным обеспечением. SDC может привести к неправильным результатам или сбоям системы, которые могут оставаться незамеченными в течение длительного периода времени.
Примеры SDC в GPU включают:
-
Арифметические ошибки: Неисправности в арифметических блоках, таких как сумматоры или умножители, могут производить неправильные результаты без каких-либо сигналов об ошибках.
-
Ошибки памяти: Мягкие ошибки или жесткие неисправности в ячейках памяти могут повредить данные, не будучи обнаруженными механизмами проверки ошибок.
-
Ошибки потока управления: Неисправности в логике управления или декодерах инструкций могут заставить программу отклоняться от ее предполагаемого пути выполнения без вызова каких-либо исключений.
SDC особенно опасен, потому что он может распространяться по системе и влиять на конечный результат без каких-либо видимых симптомов. Обнаружение и смягчение SDC требует сочетания аппаратных и программных методов.
Схемы обнаружения и исправления ошибок
Для смягчения влияния неисправностей и ошибок в GPU были разработаны различные схемы обнаружения и исправления ошибок. Эти схемы направлены на выявление наличия ошибок и, в некоторых случаях, на их исправление для обеспечения правильной работы системы.
Проверка четности
Проверка четности - это простая техника обнаружения ошибок, которая добавляет дополнительный бит (бит четности) к каждому слову данных, чтобы общее количество битов '1' было либо четным (четная четность), либо нечетным (нечетная четность). Проверяя четность слова данных, можно обнаружить одиночные ошибки в битах.
На рисунке 10.3 показан пример проверки четной четности.
Слово данных: 1011010
Бит четности: 1
Передано: 10110101
Получено: 10110111
Бит четности: 0
Ошибка обнаружена!
Рисунок 10.3: Проверка четной четности для обнаружения ошибок.
Проверка четности может применяться к различным компонентам в GPU, таким как регистры, кэши и интерфейсы памяти. Однако проверка четности может обнаруживать только нечетное количество ошибок в битах и не может исправлять ошибки.
Коды исправления ошибок (ECC)
Коды исправления ошибок (ECC) являютсяВот перевод на русский язык:
Более продвинутые схемы обнаружения и исправления ошибок, которые могут не только обнаруживать ошибки, но и исправлять их. ECC работает путем добавления избыточных битов к слову данных, что позволяет получателю идентифицировать и исправлять ограниченное количество ошибок в битах.
Одна из распространенных схем ECC - это код Single Error Correction, Double Error Detection (SECDED), который может исправлять одиночные ошибки в битах и обнаруживать двойные ошибки в битах. Коды SECDED часто используются в системах памяти, таких как DRAM и кэши, для защиты от мягких ошибок.
На рисунке 10.4 показан пример кода SECDED.
Слово данных: 1011010
Биты ECC: 01101
Передано: 101101001101
Получено: 101101011101
^
|
Ошибка в бите
Исправлено: 101101001101
Рисунок 10.4: Код SECDED для исправления и обнаружения ошибок.
Другие схемы ECC, такие как коды Боуза-Чоудхури-Хоккенгема (BCH) и коды Рида-Соломона, могут исправлять множественные ошибки в битах за счет более высокой избыточности и сложности.
Избыточное выполнение
Избыточное выполнение - это техника, которая выполняет одно и то же вычисление несколько раз, либо на том же оборудовании, либо на разных аппаратных блоках, и сравнивает результаты, чтобы обнаружить ошибки. Если результаты не совпадают, обнаруживается ошибка, и система может предпринять соответствующие действия, такие как повторная попытка вычисления или инициирование процесса восстановления.
Избыточное выполнение может быть реализовано на различных уровнях в GPU:
-
Избыточность на уровне инструкций: Каждая инструкция выполняется несколько раз, и результаты сравниваются перед записью в регистровый файл или память.
-
Избыточность на уровне потоков: Несколько потоков выполняют одно и то же вычисление, и их результаты сравниваются, чтобы обнаружить ошибки.
-
Избыточность на уровне ядра: Все ядро выполняется несколько раз, и окончательные выходные данные сравниваются, чтобы обнаружить ошибки.
На рисунке 10.5 иллюстрируется избыточность на уровне потоков в GPU.
Поток 0 Поток 1 Поток 2 Поток 3
```Вот перевод на русский язык с сохранением оригинального кода:
| | | |
v v v v
+-------+ +-------+ +-------+ +-------+
| Комп. | | Комп. | | Комп. | | Комп. |
+-------+ +-------+ +-------+ +-------+
| | | |
v v v v
+------------+------------+------------+
| Компаратор |
+------------+------------+------------+
|
v
Обнаружение ошибок
Рисунок 10.5: Избыточность на уровне потоков для обнаружения ошибок.
Избыточное выполнение может обнаруживать широкий спектр ошибок, включая мягкие ошибки, жесткие неисправности и SDC. Однако это приводит к увеличению времени выполнения и потребления энергии.
Сторожевые таймеры
Сторожевые таймеры - это аппаратные или программные механизмы, которые контролируют выполнение GPU и обнаруживают, если система становится неотзывчивой или не может завершить задачу в течение указанного времени. Если сторожевой таймер истекает, это указывает на ошибку, и система может инициировать процесс восстановления, такой как сброс GPU или перезапуск затронутой операции.
Сторожевые таймеры могут быть реализованы на различных уровнях в GPU:
-
Сторожевой таймер на уровне ядра: Контролирует время выполнения каждого ядра и обнаруживает, если ядро не завершается в течение указанного времени.
-
Сторожевой таймер на уровне потока: Контролирует время выполнения каждого потока и обнаруживает, если поток не завершается в течение указанного времени.
Механизмы контрольных точек и восстановления
Механизмы контрольных точек и восстановления используются для сохранения состояния приложения GPU в регулярные интервалы времени и восстановления состояния в случае сбоя. Периодически сохраняя состояние приложения, система может восстановиться после сбоев, не перезапуская всё вычисление с самого начала.
Механизмы контрольных точек и восстановления могут быть реализованы на разных уровнях в GPU:
-
Контрольные точки на уровне приложения: Само приложение отвечает заВот перевод на русский язык:
-
Приложение-уровневое резервное копирование: Приложение само ответственно за сохранение своего состояния через регулярные интервалы времени. Это можно сделать явным сохранением содержимого памяти и регистров в файл контрольной точки.
-
Резервное копирование на уровне системы: Система выполнения GPU или драйвер отвечают за сохранение состояния приложения. Это можно сделать прозрачно для приложения, без необходимости вносить изменения в код приложения.
-
Резервное копирование на аппаратном уровне: Сам аппарат GPU предоставляет поддержку для сохранения и восстановления состояния приложения. Это можно сделать с использованием специализированных аппаратных механизмов, таких как энергонезависимая память или специальные регистры.
Рисунок 10.8 иллюстрирует типичный процесс контрольной точки и восстановления.
Нормальное выполнение
|
|
v
Контрольная точка
|
|
v
Нормальное выполнение
|
|
v
Сбой
|
|
v
Восстановление
|
|
v
Нормальное выполнение
Рисунок 10.8: Процесс контрольной точки и восстановления.
Во время нормального выполнения система периодически сохраняет состояние приложения в контрольную точку. Если происходит сбой, система восстанавливает состояние из последней контрольной точки и возобновляет выполнение с этого момента.
Механизмы контрольной точки и восстановления могут помочь повысить надежность и отказоустойчивость приложений GPU, особенно для длительных вычислений. Однако они также вводят накладные расходы в виде занимаемого места на диске и времени выполнения, так как сохранение и восстановление состояния требует дополнительных ресурсов.
Проектирование для надежности и отказоустойчивости
Проектирование GPU для надежности и отказоустойчивости включает в себя сочетание аппаратных и программных методов. Некоторые ключевые принципы и методы проектирования включают:
-
Обнаружение и исправление ошибок: Включение механизмов обнаружения и исправления ошибок, таких как ECC и проверка четности, на различных уровнях GPU, включая память, кэши и межсоединения.
-
Избыточность: Использование избыточностиВот перевод на русский язык с сохранением оригинального кода:
Компоненты аппаратного обеспечения муравья, такие как запасные ядра или модули памяти, для обеспечения отказоустойчивости и плавной деградации в случае сбоев.
-
Контрольная точка и восстановление: Реализация механизмов контрольной точки и восстановления для сохранения состояния приложения и обеспечения восстановления после сбоев.
-
Изоляция отказов: Проектирование архитектуры GPU для ограничения распространения ошибок и предотвращения распространения неисправностей по всей системе. Этого можно добиться с помощью таких методов, как разделение, изоляция и барьеры для сдерживания ошибок.
-
Устойчивость программного обеспечения: Разработка программных методов, таких как отказоустойчивость, основанная на алгоритмах (ABFT), которые позволяют приложениям обнаруживать и восстанавливаться от ошибок с помощью избыточности и проверок на уровне программного обеспечения.
-
Планирование с учетом надежности: Адаптация планирования задач и ресурсов в GPU с учетом характеристик надежности различных компонентов и оптимизация как производительности, так и надежности.
Пример: Планирование с учетом надежности в GPU
Рассмотрим GPU с несколькими ядрами, где некоторые ядра более подвержены ошибкам, чем другие. Планировщик, учитывающий надежность, может назначать критические задачи или задачи с высокими требованиями к надежности на более надежные ядра, в то время как менее критические задачи назначаются на менее надежные ядра.
На рисунке 10.9 иллюстрируется подход к планированию с учетом надежности.
Очередь задач
+-------+
| Задача1 |
| Задача2 |
| Задача3 |
| Задача4 |
+-------+
|
|
v
Планировщик с учетом надежности
|
|
v
+--------+--------+
| Ядро 1 | Ядро 2 |
| (ВН) | (НН) |
+--------+--------+
| Задача1 | Задача3 |
| Задача2 | Задача4 |
+--------+--------+
Рисунок 10.9: Планирование с учетом надежности в GPU (ВН: Высокая надежность, НН: Низкая надежность).
В этом примере планировщик назначает Задачу1 и Задачу2, которые имеют высокие требования к надежности, на Ядро 1, которое считается более надежным.Вот перевод на русский язык:
Заключение
Надежность и отказоустойчивость являются критически важными аспектами проектирования и эксплуатации GPU, особенно поскольку GPU все чаще используются в приложениях, связанных с обеспечением безопасности. Понимание типов неисправностей и ошибок, которые могут возникать в GPU, а также методов обнаружения, исправления и восстановления после этих неисправностей, имеет решающее значение для проектирования надежных и устойчивых систем на основе GPU.
Схемы обнаружения и исправления ошибок, такие как ECC и проверка четности, играют ключевую роль в выявлении и смягчении мягких ошибок и жестких неисправностей в различных компонентах GPU. Механизмы контрольных точек и восстановления позволяют системе сохранять состояние приложения и восстанавливаться после сбоев, повышая общую устойчивость системы.
Проектирование GPU для обеспечения надежности и устойчивости предполагает комплексный подход, сочетающий аппаратные и программные методы. Избыточность, изоляция неисправностей, устойчивость программного обеспечения и планирование с учетом надежности - это некоторые ключевые методы, которые могут быть использованы для повышения надежности и отказоустойчивости GPU.
По мере развития GPU и появления новых областей их применения, таких как автономные транспортные средства, робототехника и здравоохранение, обеспечение их надежности и устойчивости будет приобретать все большее значение. Новые методы обнаружения и исправления ошибок, создания контрольных точек и восстановления, а также управление ресурсами с учетом надежности будут иметь решающее значение для создания следующего поколения надежных и отказоустойчивых GPU.