Facebook publica Hermit, un conxunto de ferramentas para a execución de programas repetibles

Facebook (prohibido na Federación Rusa) publicou o código para o kit de ferramentas Hermit, que crea un ambiente para a execución determinista de programas, permitindo diferentes execucións para acadar o mesmo resultado e repetir a execución usando os mesmos datos de entrada. O código do proxecto está escrito en Rust e distribúese baixo a licenza BSD.

Durante a execución normal, o resultado está influenciado por unha variedade de factores alleos, como a hora actual, a programación de fíos, os enderezos de memoria virtual, os datos do xerador de números pseudoaleatorios e varios identificadores únicos. Hermit permítelle executar un programa nun contedor no que estes factores permanecen constantes en execucións posteriores. A execución repetible, que reproduce completamente os parámetros non persistentes do ambiente, pódese utilizar para o diagnóstico de erros, a depuración de varios pasos con execucións repetidas, a creación dun ambiente fixo para probas de regresión, probas de tensión, identificación de problemas con multi-threading e en repetición. construír sistemas.

Facebook publica Hermit, un conxunto de ferramentas para a execución de programas repetibles

Un ambiente reproducible créase interceptando chamadas ao sistema, algunhas das cales son substituídas polos seus propios controladores que producen un resultado permanente, e outras son redirixidas ao núcleo, despois do cal o resultado é borrado de datos non persistentes. Para interceptar as chamadas do sistema, utilízase o marco de ensueño, cuxo código tamén é publicado por Facebook. Para evitar que os cambios no sistema de ficheiros e as solicitudes de rede afecten o progreso da execución, a execución realízase mediante unha imaxe FS fixa e co acceso a redes externas desactivado. Ao acceder ao xerador de números pseudoaleatorios, Hermit produce unha secuencia predefinida que se repite cada vez que se inicia.

Unha das variables máis complexas que inflúen no progreso da execución é o planificador de fíos, cuxo comportamento depende de moitos factores externos, como o número de núcleos de CPU e a presenza doutros fíos de execución. Para garantir un comportamento repetible do planificador, todos os fíos execútanse en serie en conexión cun só núcleo da CPU e mantendo a orde na que se transfire o control aos fíos. Cada fío pode executar un número fixo de instrucións, despois de que a execución detense e transfírese a outro fío (para limitar a CPU PMU (Performance Monitoring Unit), que detén a execución despois dun número especificado de ramas condicionais).

Para diagnosticar problemas con fíos debido ás condicións de carreira, Hermit ten un modo para identificar as operacións cuxa orde de execución estaba fóra de orde e levou a unha parada anormal. Para identificar tales problemas, faise unha comparación dos estados nos que se rexistrou o funcionamento correcto e a terminación anormal da execución.

Fonte: opennet.ru

Engadir un comentario