Контрольно-пропускные пункты — это метод, обеспечивающий отказоустойчивость вычислительных систем . По сути, он заключается в сохранении моментального снимка состояния приложения , чтобы приложения могли перезапуститься с этого момента в случае сбоя . Это особенно важно для длительно работающих приложений, которые выполняются в подверженных сбоям вычислительных системах.
В распределенной вычислительной среде контрольные точки — это метод, который помогает выдерживать сбои, которые в противном случае заставили бы долго работающее приложение перезапускаться с самого начала. Самый простой способ реализовать контрольные точки — остановить приложение, скопировать все необходимые данные из памяти в надежное хранилище (например, параллельную файловую систему ), а затем продолжить выполнение. [1] В случае сбоя при перезапуске приложения его не нужно начинать с нуля. Скорее, он будет читать последнее состояние («контрольную точку») из стабильного хранилища и выполнять его. Хотя продолжаются споры о том, является ли создание контрольных точек доминирующей рабочей нагрузкой ввода-вывода в распределенных вычислительных системах, существует общее мнение, что контрольные точки являются одной из основных рабочих нагрузок ввода-вывода. [2] [3]
Существует два основных подхода к созданию контрольных точек в распределенных вычислительных системах: скоординированное создание контрольных точек и нескоординированное создание контрольных точек. При использовании скоординированного подхода к контрольным точкам процессы должны обеспечивать согласованность своих контрольных точек. Обычно это достигается с помощью какого-то алгоритма протокола двухфазной фиксации . При нескоординированной установке контрольных точек каждый процесс независимо проверяет свое состояние. Следует подчеркнуть, что простого принуждения процессов к проверке своего состояния через фиксированные интервалы времени недостаточно для обеспечения глобальной согласованности. Необходимость установления согласованного состояния (т. е. отсутствия пропущенных или дублированных сообщений) может заставить другие процессы вернуться к своим контрольным точкам, что, в свою очередь, может привести к тому, что другие процессы откатятся к еще более ранним контрольным точкам, что в самом крайнем случае может привести к откату других процессов к более ранним контрольным точкам. означают, что единственным найденным непротиворечивым состоянием является начальное состояние (так называемый эффект домино ). [4] [5]
Одним из первоначальных и в настоящее время наиболее распространенных средств проверки приложений была функция «сохранения состояния» в интерактивных приложениях, с помощью которой пользователь приложения мог сохранять состояние всех переменных и других данных на носителе данных в момент их использования. его и либо продолжить работу, либо выйти из приложения и позднее перезапустить приложение и восстановить сохраненное состояние. Это было реализовано с помощью команды «Сохранить» или пункта меню в приложении. Во многих случаях стало стандартной практикой спрашивать пользователя, есть ли у него несохраненная работа, при выходе из приложения, хотят ли они сохранить свою работу перед этим.
Функциональность такого рода стала чрезвычайно важной для удобства использования в приложениях, где конкретную работу невозможно выполнить за один присест (например, игра в видеоигру, которая, как ожидается, займет десятки часов, или написание книги или длинного документа, состоящего из сотен или тысяч страниц). ) или когда работа выполнялась в течение длительного периода времени, например ввод данных в документ, например строки в электронной таблице.
Проблема с состоянием сохранения заключается в том, что оператор программы требует запроса на сохранение. Для неинтерактивных программ, в том числе автоматизированных или пакетно обрабатываемых рабочих нагрузок, возможность проверки таких приложений также должна была быть автоматизирована.
Поскольку пакетные приложения начали обрабатывать десятки и сотни тысяч транзакций, где каждая транзакция могла обрабатывать одну запись из одного файла в нескольких разных файлах, возникла необходимость в перезапуске приложения в какой-то момент без необходимости повторного запуска всего задания с нуля. стал обязательным. Таким образом родилась возможность «контрольной точки/перезапуска», при которой после обработки ряда транзакций можно было сделать «моментальный снимок» или «контрольную точку» состояния приложения. Если приложение потерпело неудачу до следующей контрольной точки, его можно было перезапустить, предоставив ему информацию о контрольной точке и последнее место в файле транзакции, где транзакция была успешно завершена. Приложение может затем перезапуститься в этот момент.
Создание контрольных точек обычно обходится дорого, поэтому обычно оно выполняется не для каждой записи, а с некоторым разумным компромиссом между стоимостью контрольной точки и стоимостью компьютерного времени, необходимого для повторной обработки пакета записей. Таким образом, количество записей, обрабатываемых для каждой контрольной точки, может варьироваться от 25 до 200, в зависимости от факторов стоимости, относительной сложности приложения и ресурсов, необходимых для успешного перезапуска приложения.
FTI — это библиотека, цель которой — предоставить ученым-компьютерщикам простой способ масштабируемого выполнения контрольной точки/перезапуска. [6] FTI использует локальное хранилище, а также методы многократной репликации и стирания для обеспечения нескольких уровней надежности и производительности. FTI обеспечивает контрольные точки на уровне приложений, которые позволяют пользователям выбирать, какие данные необходимо защитить, чтобы повысить эффективность и избежать потерь пространства, времени и энергии. Он предлагает прямой интерфейс данных, поэтому пользователям не нужно иметь дело с именами файлов и/или каталогов. Все метаданные управляются FTI прозрачным для пользователя способом. При желании пользователи могут выделить один процесс на каждый узел для перекрытия рабочей нагрузки отказоустойчивости и научных вычислений, чтобы задачи после контрольной точки выполнялись асинхронно.
Группа Future Technologies в Национальной лаборатории Лоуренса разрабатывает гибридную реализацию контрольной точки/перезапуска ядра/пользователя под названием BLCR. Их цель — предоставить надежную, качественную реализацию, которая проверяет широкий спектр приложений, не требуя внесения изменений в код приложения. [7] BLCR фокусируется на проверке контрольных точек параллельных приложений, которые взаимодействуют через MPI, а также на совместимости с пакетом программного обеспечения, созданным SciDAC Scalable Systems Software ISIC. Его работа разбита на 4 основных направления: контрольная точка/перезапуск для Linux (CR), контрольные библиотеки MPI, интерфейс управления ресурсами для контрольной точки/перезапуска и разработка интерфейсов управления процессами.
DMTCP (Distributed MultiThreaded Checkpointing) — это инструмент для прозрачной проверки состояния произвольной группы программ, распределенных по множеству машин и соединенных сокетами. [8] Он не изменяет программу пользователя или операционную систему. Среди приложений, поддерживаемых DMTCP, — Open MPI , Python , Perl , а также многие языки программирования и языки сценариев оболочки. С помощью TightVNC он также может проверять и перезапускать приложения X Window, если они не используют расширения (например, OpenGL или видео). Среди функций Linux, поддерживаемых DMTCP, — дескрипторы открытых файлов , каналы, сокеты, обработчики сигналов, виртуализация идентификаторов процессов и потоков (гарантируйте, что старые идентификаторы pid и tids продолжают работать после перезапуска), ptys, fifos, идентификаторы групп процессов, идентификаторы сеансов, терминалы. атрибуты и mmap /mprotect (включая общую память на основе mmap). DMTCP поддерживает API OFED для InfiniBand на экспериментальной основе. [9]
Некоторые недавние протоколы выполняют совместную проверку контрольных точек, сохраняя фрагменты контрольной точки в соседних узлах. [10] Это полезно, поскольку позволяет избежать затрат на хранение в параллельной файловой системе (которая часто становится узким местом для крупномасштабных систем) и использует более близкое хранилище. [ нужна цитата ] Это нашло применение, в частности, в крупномасштабных суперкомпьютерных кластерах. Задача состоит в том, чтобы обеспечить, чтобы при необходимости чекпоинта при восстановлении после сбоя были доступны близлежащие узлы с фрагментами чекпоинтов. [ нужна цитата ]
Docker и лежащая в его основе технология содержат контрольную точку и механизм восстановления. [11]
CRIU — это библиотека контрольных точек пользовательского пространства.
Mementos — это программная система, которая преобразует задачи общего назначения в прерываемые программы для платформ с частыми перебоями, такими как перебои в подаче электроэнергии. Он был разработан для встраиваемых устройств без батарей, таких как RFID-метки и смарт-карты, которые используют энергию из фоновых источников окружающей среды. Mementos часто определяет доступную энергию в системе и решает, следует ли поставить программу на контрольную точку из-за надвигающейся потери мощности или продолжения вычислений. При контрольной точке данные будут храниться в энергонезависимой памяти . Когда энергии становится достаточно для перезагрузки , данные извлекаются из энергонезависимой памяти и программа продолжает работу из сохраненного состояния. Mementos реализован на микроконтроллерах семейства MSP430 . Mementos назван в честь книги Кристофера Нолана « Memento » . [12]
Idetic — это набор автоматических инструментов, который помогает разработчикам специализированных интегральных схем (ASIC) автоматически встраивать контрольные точки в свои проекты. Он ориентирован на инструменты синтеза высокого уровня и добавляет контрольные точки на уровне передачи регистров ( код Verilog ). Он использует подход динамического программирования для определения точек с минимальными издержками в конечном автомате проекта. Поскольку контрольная точка на аппаратном уровне предполагает отправку данных зависимых регистров в энергонезависимую память, оптимальные точки должны иметь минимальное количество регистров для хранения. Idetic развертывается и оценивается на устройстве RFID-меток, аккумулирующем энергию . [13]