Введение

Техника повышения устойчивости к сбоям в вычислительных системах

Контрольные точки – это техника, обеспечивающая устойчивость к сбоям вычислительных систем. Она заключается в сохранении снимка состояния приложения, чтобы приложение могло быть перезапущено с этой точки в случае возникновения сбоя. Это особенно важно для длительно работающих приложений, выполняемых в вычислительных системах, подверженных сбоям.

Контрольные пункты в распределенных системах

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

Сохранить государство

Одним из первых и сейчас наиболее распространенных способов реализации контрольных точек (checkpointing) была функция "сохранения состояния" в интерактивных приложениях, позволяющая пользователю сохранять состояние всех переменных и других данных на носитель информации в момент использования приложения, чтобы либо продолжить работу, либо выйти из приложения с возможностью последующего перезапуска и восстановления сохраненного состояния. Реализация осуществлялась через команду "сохранить" или пункт меню в приложении. Во многих случаях стало стандартной практикой запрашивать у пользователя наличие несохраненных данных при выходе из приложения, предлагая сохранить их перед завершением работы. Подобная функциональность оказалась крайне важной для удобства использования приложений, в которых выполнение задачи не может быть завершено за один сеанс (например, прохождение видеоигры, рассчитанной на десятки часов, или написание книги или объемного документа, состоящего из сотен или тысяч страниц), или когда работа ведется в течение длительного времени, например, ввод данных в документ, такой как строки в таблице. Недостатком функции сохранения состояния является необходимость инициировать сохранение оператором программы. Для неинтерактивных программ, включая автоматизированные или пакетные процессы, возможность создания контрольных точек для таких приложений также должна быть автоматизирована.

Контрольная точка/перезапуск

По мере того как пакетные приложения начали обрабатывать десятки, сотни тысяч и даже больше транзакций, где каждая транзакция могла обрабатывать одну запись из одного файла, сопоставляя её с несколькими другими файлами, возникла острая необходимость в возможности перезапуска приложения в любой момент, без повторного выполнения всей задачи с самого начала. Так появилась функция "checkpoint/restart", позволяющая после обработки определенного количества транзакций создавать "снимок" или "checkpoint" состояния приложения. В случае сбоя приложения до следующего checkpoint, его можно было перезапустить, предоставив информацию о checkpoint и позицию в файле транзакций, где последняя транзакция была успешно завершена. Приложение могло затем возобновить работу с этой точки. Создание checkpoint обычно требует значительных ресурсов, поэтому оно редко выполнялось для каждой записи, а скорее представляло собой разумный компромисс между стоимостью создания checkpoint и временем, необходимым для повторной обработки партии записей. Таким образом, количество записей, обрабатываемых между checkpoint, могло варьироваться от 25 до 200, в зависимости от стоимости, сложности приложения и ресурсов, необходимых для успешного перезапуска.

Интерфейс допуска ошибок (FTI)

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

Контрольный пункт лаборатории Беркли/перезапуск (BLCR)

Группа перспективных технологий в Национальной лаборатории Лоуренса разрабатывает гибридную реализацию механизма контрольных точек и перезапуска, называемую BLCR. Их цель – предоставить надежную, промышленного качества реализацию, способную создавать контрольные точки для широкого спектра приложений без необходимости внесения изменений в код этих приложений. BLCR ориентирован на создание контрольных точек для параллельных приложений, взаимодействующих посредством MPI, и на совместимость с программным обеспечением, разработанным SciDAC Scalable Systems Software ISIC. Работа ведется по четырем основным направлениям: контрольные точки и перезапуск для Linux (CR), библиотеки MPI с поддержкой контрольных точек, интерфейс управления ресурсами для контрольных точек и перезапуска, а также разработка интерфейсов управления процессами.

DMTCP

DMTCP (Distributed MultiThreaded Checkpointing) – это инструмент для прозрачного сохранения состояния произвольной группы программ, распределенных по множеству машин и связанных через сокеты. Он не модифицирует программу пользователя или операционную систему. DMTCP поддерживает такие приложения, как Open MPI, Python, Perl, а также многие языки программирования и языки скриптов командной оболочки. С использованием TightVNC он также может сохранять состояние и перезапускать X Window приложения, при условии, что они не используют расширения (например, OpenGL или видео). Среди поддерживаемых DMTCP функций Linux – открытые файловые дескрипторы, каналы, сокеты, обработчики сигналов, виртуализация идентификаторов процессов и потоков (обеспечение корректной работы старых PID и TID после перезапуска), псевдотерминалы (ptys), именованные каналы (fifos), идентификаторы групп процессов, идентификаторы сеансов, атрибуты терминала и mmap/mprotect (включая совместно используемую память, реализованную на основе mmap). DMTCP экспериментально поддерживает API OFED для InfiniBand.

Совместное установление контрольных пунктов

Некоторые современные протоколы реализуют совместное сохранение контрольных точек, распределяя фрагменты контрольной точки по соседним узлам. Это выгодно, поскольку позволяет избежать затрат на хранение данных в параллельной файловой системе (которая часто становится узким местом в системах большого масштаба) и использовать более близкое хранилище. Такой подход особенно востребован в крупномасштабных суперкомпьютерных кластерах. Основная задача заключается в обеспечении доступности соседних узлов, содержащих фрагменты контрольной точки, в момент необходимости восстановления после сбоя.

Докер

Docker и лежащая в его основе технология включают в себя механизм создания контрольных точек и восстановления из них.

CRIU

CRIU — это библиотека для создания снимков состояния пользовательского пространства.

Памятки

Mementos — это программная система, которая преобразует задачи общего назначения в прерываемые программы для платформ с частыми перебоями, таких как отключения электроэнергии. Она была разработана для встроенных устройств без батарей, таких как RFID-метки и смарт-карты, которые полагаются на сбор энергии из окружающих источников. Mementos постоянно отслеживает доступную энергию в системе и решает, следует ли сохранить состояние программы из-за неминуемой потери питания или продолжать вычисления. В случае сохранения состояния, данные хранятся в энергонезависимой памяти. Когда энергии становится достаточно для перезагрузки, данные извлекаются из энергонезависимой памяти, и программа продолжает работу с сохраненного состояния. Mementos был реализован на микроконтроллерах семейства MSP430. Название Mementos отсылает к фильму Кристофера Нолана «Помни».

Идетик

Idetic – это набор автоматизированных инструментов, помогающих разработчикам специализированных интегральных схем (ASIC) автоматически внедрять контрольные точки в их проекты. Он предназначен для использования с инструментами высокоуровневого синтеза и добавляет контрольные точки на уровне передачи регистров (код Verilog). В нем используется подход динамического программирования для поиска точек с минимальными накладными расходами в конечном автомате схемы. Поскольку внедрение контрольных точек на аппаратном уровне предполагает передачу данных зависимых регистров в энергонезависимую память, оптимальные точки должны требовать хранения минимального количества регистров. Idetic был протестирован и оценен на примере RFID-метки с питанием от энергии окружающей среды.