Facebook publica Hermit, un conjunto de herramientas para la ejecución repetible de programas

Facebook (prohibido en la Federación Rusa) publicó el código del kit de herramientas Hermit, que crea un entorno para la ejecución determinista de programas, permitiendo diferentes ejecuciones para lograr el mismo resultado y repetir la ejecución utilizando los mismos datos de entrada. El código del proyecto está escrito en Rust y se distribuye bajo la licencia BSD.

Durante la ejecución normal, el resultado se ve influenciado por una variedad de factores extraños, como la hora actual, la programación de subprocesos, las direcciones de memoria virtual, los datos del generador de números pseudoaleatorios y varios identificadores únicos. Hermit le permite ejecutar un programa en un contenedor en el que estos factores permanecen constantes en ejecuciones posteriores. La ejecución repetible, que reproduce completamente los parámetros no persistentes del entorno, se puede utilizar para diagnóstico de errores, depuración de varios pasos con ejecuciones repetidas, creación de un entorno fijo para pruebas de regresión, pruebas de estrés, identificación de problemas con subprocesos múltiples y en sistemas de compilación repetibles. .

Facebook publica Hermit, un conjunto de herramientas para la ejecución repetible de programas

Se crea un entorno reproducible interceptando llamadas al sistema, algunas de las cuales se reemplazan con sus propios controladores que producen un resultado permanente, y otras se redirigen al kernel, después de lo cual el resultado se limpia de datos no persistentes. Para interceptar las llamadas al sistema se utiliza el marco reverie, cuyo código también es publicado por Facebook. Para evitar que los cambios en el sistema de archivos y las solicitudes de red afecten el progreso de la ejecución, la ejecución se realiza utilizando una imagen FS fija y con el acceso a redes externas deshabilitado. Al acceder al generador de números pseudoaleatorios, Hermit produce una secuencia predefinida que se repite cada vez que se inicia.

Una de las variables más complejas que influyen en el progreso de la ejecución es el programador de subprocesos, cuyo comportamiento depende de muchos factores externos, como el número de núcleos de CPU y la presencia de otros subprocesos en ejecución. Para garantizar un comportamiento repetible del programador, todos los subprocesos se ejecutan en serie en conexión con un solo núcleo de CPU y manteniendo el orden en el que se transfiere el control a los subprocesos. A cada subproceso se le permite ejecutar una cantidad fija de instrucciones, después de lo cual la ejecución se detiene y se transfiere a otro subproceso (para limitar la CPU PMU (Unidad de monitoreo de rendimiento), que detiene la ejecución después de un número específico de ramas condicionales).

Para diagnosticar problemas con subprocesos debido a condiciones de carrera, Hermit tiene un modo para identificar operaciones cuyo orden de ejecución estaba fuera de orden y provocó un cierre anormal. Para identificar tales problemas, se compara los estados en los que se registraron un funcionamiento correcto y una terminación anormal de la ejecución.

Fuente: opennet.ru

Añadir un comentario