Los puntos de control son una técnica que proporciona tolerancia a fallas para los sistemas informáticos . Básicamente consiste en guardar una instantánea del estado de la aplicación , para que las aplicaciones puedan reiniciarse desde ese punto en caso de fallo . Esto es particularmente importante para aplicaciones de larga duración que se ejecutan en sistemas informáticos propensos a fallas.
En el entorno informático distribuido , los puntos de control son una técnica que ayuda a tolerar fallos que, de otro modo, obligarían a una aplicación de larga ejecución a reiniciarse desde el principio. La forma más básica de implementar 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 es necesario comenzar desde cero. Más bien, leerá el último estado ("el punto de control") del almacenamiento estable y lo ejecutará desde allí. Si bien existe un debate en curso sobre si los puntos de control son la carga de trabajo de E/S dominante en los sistemas informáticos distribuidos, existe un consenso general de que los puntos de control son una de las principales cargas de trabajo de E/S. [2] [3]
Hay dos enfoques principales para los puntos de control en los sistemas informáticos distribuidos: puntos de control coordinados y puntos de control no coordinados. En el enfoque de puntos de control coordinados, los procesos deben garantizar que sus puntos de control sean consistentes. Esto generalmente se logra mediante algún tipo de algoritmo de protocolo de confirmación de dos fases . En los puntos de control no coordinados, cada proceso marca su propio estado de forma independiente. Cabe destacar que simplemente obligar a los procesos a controlar su estado en 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 o que no 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 significa que el único estado consistente encontrado es el estado inicial (el llamado efecto dominó ). [4] [5]
Uno de los medios originales y ahora más comunes 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 en un medio de almacenamiento en el momento en que estaban usando y continúe trabajando, o salga de la aplicación y, más tarde, reiníciela y restaure el estado guardado. Esto se implementó mediante 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 no guardado al salir de la aplicación si quería guardar su trabajo antes de hacerlo.
Este tipo de funcionalidad se volvió extremadamente importante para la usabilidad en aplicaciones donde el trabajo particular no se podía completar de una sola vez (como jugar un videojuego que se espera que lleve docenas de horas, o escribir un libro o un documento extenso de cientos o miles de páginas). ) o cuando el trabajo se realizó durante un largo período de tiempo, como la entrada 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. Para los programas no interactivos, incluidas las cargas de trabajo automatizadas o procesadas por lotes, la capacidad de controlar dichas aplicaciones también tenía que automatizarse.
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 varios archivos diferentes, surgió la necesidad de que la aplicación se pudiera reiniciar en algún momento sin necesidad de volver a ejecutar todo el trabajo desde cero. se volvió imperativo. Así nació la capacidad de "punto de control/reinicio", en la que después de procesar una serie de 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 proporcionándole la información del punto de control y el último lugar en el archivo de transacciones donde la transacción se había completado con éxito. La aplicación podría entonces reiniciarse en ese punto.
Los puntos de control tienden a ser costosos, por lo que generalmente no se realizaban con todos los registros, sino con algún compromiso 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, el número de registros procesados para cada punto de control puede oscilar entre 25 y 200, dependiendo de los factores de costo, la complejidad relativa de la aplicación y los recursos necesarios para reiniciar con éxito la aplicación.
FTI es una biblioteca que tiene como objetivo proporcionar a los científicos computacionales una manera fácil de realizar puntos de control/reinicio de forma escalable. [6] FTI aprovecha el almacenamiento local además de 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 deben protegerse para 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 directorios. Todos los metadatos son gestionados por FTI de forma 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 forma asincrónica.
El Grupo de Tecnologías Futuras de los Laboratorios Nacionales Lawrence está desarrollando una implementación híbrida de kernel/usuario de punto de control/reinicio llamada BLCR. Su objetivo es proporcionar una implementación sólida y de calidad de producción que controle una amplia gama de aplicaciones, sin necesidad de realizar cambios en el código de la aplicación. [7] BLCR se centra en el control de aplicaciones paralelas que se comunican a través de MPI y en la compatibilidad con el paquete de software producido por SciDAC Scalable Systems Software ISIC. Su trabajo se divide en 4 áreas principales: Checkpoint/Restart para Linux (CR), Bibliotecas MPI Checkpointable, 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 verificar de forma transparente el estado de un grupo arbitrario de programas distribuidos en muchas máquinas y conectados mediante sockets. [8] No modifica el programa del usuario ni el sistema operativo. Entre las aplicaciones admitidas por DMTCP se encuentran Open MPI , Python , Perl y muchos lenguajes de programación y lenguajes de scripting de shell. Con el uso de TightVNC, también puede controlar y reiniciar aplicaciones X Window, siempre y cuando no utilicen extensiones (por ejemplo, sin OpenGL o vídeo). Entre las características de Linux admitidas por DMTCP se encuentran descriptores de archivos abiertos , tuberías, sockets, manejadores de señales, virtualización de ID de proceso e ID de subproceso (garantice que los pids y tids antiguos continúen funcionando al reiniciar), ptys, fifos, ID de grupo de procesos, ID de sesión, terminal. atributos 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 más cercano. [ cita necesaria ] Esto ha encontrado uso particularmente en grupos de supercomputación a gran escala. El desafío es garantizar que cuando se necesite el punto de control al recuperarse de una falla, los nodos cercanos con fragmentos de los puntos de control estén disponibles. [ cita necesaria ]
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.
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. Mementos frecuentemente detecta la energía disponible en el sistema y decide si verificar el programa debido a una pérdida de energía inminente o continuar con el cálculo. Si se realizan puntos de control, los datos se almacenarán en una memoria no volátil . Cuando la energía es 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 lleva el nombre de Memento de Christopher Nolan . [12]
Idetic es un conjunto de herramientas automáticas que ayuda a los desarrolladores de circuitos integrados de aplicaciones específicas (ASIC) a incorporar automáticamente puntos de control en sus diseños. Se dirige a herramientas de síntesis de alto nivel y agrega puntos de control en el nivel de transferencia de registro ( código Verilog ). Utiliza un enfoque de programación dinámica para localizar puntos generales bajos en la máquina de estado del diseño. Dado que los puntos de control a nivel de hardware implican enviar los datos de los registros dependientes a una memoria no volátil, se requiere que los puntos óptimos tengan un número mínimo de registros para almacenar. Idetic se implementa y evalúa en un dispositivo de etiqueta RFID de recolección de energía . [13]