La creación de puntos de control es una técnica que proporciona tolerancia a fallos a los sistemas informáticos . Implica guardar una instantánea del estado de una aplicación , de modo que pueda reiniciarse desde ese punto en caso de fallo . Esto es especialmente importante para aplicaciones de larga duración que se ejecutan en sistemas informáticos propensos a fallos.
En el entorno de computación distribuida , la creación de puntos de control es una técnica que ayuda a tolerar fallas que, de otra manera, obligarían a una aplicación de larga ejecución a reiniciarse desde el principio. La forma más básica de implementar la creación de puntos de control es detener la aplicación, copiar todos los datos necesarios de la memoria a un almacenamiento confiable (por ejemplo, un sistema de archivos paralelo ) y luego continuar con la ejecución. [1] En caso de falla, cuando la aplicación se reinicia, no necesita comenzar desde cero. En cambio, leerá el último estado ("el punto de control") del almacenamiento estable y se ejecutará desde ese punto. Si bien existe un debate en curso sobre si la creación de puntos de control es la carga de trabajo de E/S dominante en los sistemas de computación distribuida, el consenso general es que la creación de puntos de control es una de las principales cargas de trabajo de E/S. [2] [3]
Existen dos enfoques principales para la creación de puntos de control en los sistemas informáticos distribuidos: la creación de puntos de control coordinada y la creación de puntos de control no coordinada. En el enfoque de creación de puntos de control coordinada, los procesos deben garantizar que sus puntos de control sean coherentes. Esto se consigue normalmente mediante algún tipo de algoritmo de protocolo de confirmación de dos fases . En el enfoque de creación de puntos de control no coordinado, cada proceso crea puntos de control de su propio estado de forma independiente. Cabe destacar que simplemente obligar a los procesos a crear puntos de control de su estado a intervalos de tiempo fijos no es suficiente para garantizar la coherencia global. La necesidad de establecer un estado coherente (es decir, que no falten mensajes ni haya mensajes duplicados) puede obligar a otros procesos a retroceder a sus puntos de control, lo que a su vez puede hacer que otros procesos retrocedan a puntos de control incluso anteriores, lo que en el caso más extremo puede significar que el único estado coherente encontrado sea el estado inicial (el llamado efecto dominó ). [4] [5]
Uno de los métodos originales y ahora más comunes de creación de puntos de control de aplicaciones era una función de "guardar estado" en aplicaciones interactivas, en la que el usuario de la aplicación podía guardar el estado de todas las variables y otros datos y continuar trabajando o salir de la aplicación y reiniciarla y restaurar el estado guardado en un momento posterior. Esto se implementaba a través de un comando "guardar" o una opción de menú en la aplicación. En muchos casos, se convirtió en una práctica estándar preguntar al usuario, si tenía trabajo sin guardar al salir de una aplicación, si quería guardar su trabajo antes de hacerlo.
Esta funcionalidad se volvió extremadamente importante para la usabilidad en aplicaciones en las que una tarea particular no podía completarse en una sola sesión (como jugar un videojuego que se esperaba que tomara docenas de horas) o en las que el trabajo se realizaba durante un largo período de tiempo (como el ingreso de datos en un documento como filas en una hoja de cálculo).
El problema con el estado de guardado es que requiere que el operador de un programa solicite el guardado. En el caso de los programas no interactivos, incluidas las cargas de trabajo automatizadas o procesadas por lotes, también era necesario automatizar la capacidad de establecer puntos de control en dichas aplicaciones.
A medida que las aplicaciones por lotes comenzaron a manejar decenas a cientos de miles de transacciones, donde cada transacción podía procesar un registro de un archivo en comparación con varios archivos diferentes, la necesidad de que la aplicación pudiera reiniciarse en algún momento sin la necesidad de volver a ejecutar todo el trabajo desde cero se volvió imperativa. Así nació la capacidad de "punto de control/reinicio", en la que después de que se hubieran procesado varias transacciones, se podía tomar una "instantánea" o "punto de control" del estado de la aplicación. Si la aplicación fallaba antes del siguiente punto de control, se podía reiniciar dándole la información del punto de control y el último lugar en el archivo de transacciones donde se había completado con éxito una transacción. La aplicación podía entonces reiniciarse en ese punto.
Los puntos de control suelen ser costosos, por lo que generalmente no se realizan con todos los registros, sino que se busca un equilibrio razonable entre el costo de un punto de control y el valor del tiempo de computadora necesario para reprocesar un lote de registros. Por lo tanto, la cantidad de registros procesados para cada punto de control puede variar entre 25 y 200, según los factores de costo, la complejidad relativa de la aplicación y los recursos necesarios para reiniciar la aplicación con éxito.
FTI es una biblioteca que tiene como objetivo proporcionar a los científicos computacionales una forma sencilla de realizar puntos de control/reinicios de manera escalable. [6] FTI aprovecha el almacenamiento local más múltiples técnicas de replicación y borrado para proporcionar varios niveles de confiabilidad y rendimiento. FTI proporciona puntos de control a nivel de aplicación que permiten a los usuarios seleccionar qué datos necesitan ser protegidos, con el fin de mejorar la eficiencia y evitar el desperdicio de espacio, tiempo y energía. Ofrece una interfaz de datos directa para que los usuarios no tengan que lidiar con archivos y/o nombres de directorio. Todos los metadatos son administrados por FTI de manera transparente para el usuario. Si lo desean, los usuarios pueden dedicar un proceso por nodo para superponer la carga de trabajo de tolerancia a fallas y el cálculo científico, de modo que las tareas posteriores al punto de control se ejecuten de manera asincrónica.
El Future Technologies Group de los Laboratorios Nacionales Lawrence está desarrollando una implementación híbrida de usuario/núcleo de punto de control/reinicio llamada BLCR. Su objetivo es proporcionar una implementación robusta y de calidad de producción que realice puntos de control en una amplia gama de aplicaciones, sin necesidad de realizar cambios en el código de la aplicación. [7] BLCR se centra en la realización de puntos de control en aplicaciones paralelas que se comunican a través de MPI y en la compatibilidad con la suite de software producida por SciDAC Scalable Systems Software ISIC. Su trabajo se divide en cuatro áreas principales: Checkpoint/Restart para Linux (CR), bibliotecas MPI que permiten realizar puntos de control, interfaz de gestión de recursos para Checkpoint/Restart y desarrollo de interfaces de gestión de procesos.
DMTCP (Distributed MultiThreaded Checkpointing) es una herramienta para realizar puntos de control transparentes del estado de un grupo arbitrario de programas distribuidos en muchas máquinas y conectados por sockets. [8] No modifica el programa del usuario ni el sistema operativo. Entre las aplicaciones compatibles con DMTCP se encuentran Open MPI , Python , Perl y muchos lenguajes de programación y lenguajes de scripts de shell. Con el uso de TightVNC, también puede realizar puntos de control y reiniciar aplicaciones X Window, siempre que no utilicen extensiones (por ejemplo, no OpenGL o video). Entre las características de Linux compatibles con DMTCP se encuentran los descriptores de archivos abiertos , las tuberías, los sockets, los controladores de señales, la virtualización de identificadores de procesos e identificadores de subprocesos (para garantizar que los pid y tid antiguos sigan funcionando al reiniciar), ptys, fifos, identificadores de grupos de procesos, identificadores de sesiones, atributos de terminal y mmap /mprotect (incluida la memoria compartida basada en mmap). DMTCP admite la API OFED para InfiniBand de forma experimental. [9]
Algunos protocolos recientes realizan puntos de control colaborativos almacenando fragmentos del punto de control en nodos cercanos. [10] Esto es útil porque evita el costo de almacenamiento en un sistema de archivos paralelo (que a menudo se convierte en un cuello de botella para sistemas de gran escala) y utiliza un almacenamiento que está más cerca. [ cita requerida ] Esto ha encontrado uso particularmente en clústeres de supercomputación a gran escala. El desafío es garantizar que cuando se necesite el punto de control para recuperarse de una falla, los nodos cercanos con fragmentos de los puntos de control estén disponibles. [ cita requerida ]
Docker y la tecnología subyacente contienen un punto de control y un mecanismo de restauración. [11]
CRIU es una biblioteca de puntos de control del espacio de usuario. [12]
Mementos es un sistema de software que transforma tareas de propósito general en programas interrumpibles para plataformas con interrupciones frecuentes, como cortes de energía. Fue diseñado para dispositivos integrados sin batería, como etiquetas RFID y tarjetas inteligentes que dependen de la recolección de energía de fuentes ambientales de fondo. Mementos detecta con frecuencia la energía disponible en el sistema y decide si se debe establecer un punto de control del programa debido a una pérdida de energía inminente o si se debe continuar con el cálculo. Si se establece un punto de control, los datos se almacenarán en una memoria no volátil . Cuando la energía se vuelve suficiente para reiniciar , los datos se recuperan de la memoria no volátil y el programa continúa desde el estado almacenado. Mementos se ha implementado en la familia de microcontroladores MSP430 . Mementos recibe su nombre de Memento de Christopher Nolan . [13]
Idetic es un conjunto de herramientas automáticas que ayuda a los desarrolladores de circuitos integrados específicos de la aplicación (ASIC) a incorporar automáticamente puntos de control en sus diseños. Está dirigido a herramientas de síntesis de alto nivel y agrega los puntos de control en el nivel de transferencia de registros ( código Verilog ). Utiliza un enfoque de programación dinámica para localizar puntos de baja sobrecarga en la máquina de estados del diseño. Dado que la creación de puntos de control en el nivel de hardware implica enviar los datos de los registros dependientes a una memoria no volátil, se requiere que los puntos óptimos tengan una cantidad mínima de registros para almacenar. Idetic se implementa y evalúa en un dispositivo de etiqueta RFID de recolección de energía . [14]