Reins orienta las planificaciones de hilos hacia errores de concurrencia
En palabras sencillas
Un error en un programa con varios hilos puede aparecer únicamente cuando estos se ejecutan en cierto orden y los datos compartidos tienen el valor adecuado. Reins usa las ideas de un agente sobre cómo podrían ocurrir esos errores para orientar la planificación de los hilos, y luego comprueba esas ideas ejecutando el programa.
En una colección de prueba con errores inyectados, Reins activó más errores distintos que el sistema de comparación con el mejor resultado, con las mismas entradas y un límite de cinco horas por objetivo. La prueba usó una entrada proporcionada para cada variante del programa, que no activó todos los errores inyectados.
La investigación
Un error de concurrencia puede depender de una combinación poco frecuente del orden de los hilos y del estado de los datos compartidos, lo que dificulta reproducirlo dentro de un tiempo de prueba limitado.
¿Puede el razonamiento sobre el comportamiento de un programa orientar el planificador hacia esas ejecuciones poco frecuentes, y pueden las ejecuciones reales comprobar si ese razonamiento es acertado?
Reins convierte las hipótesis de un agente sobre errores de concurrencia en restricciones de planificación que comprueba y refina mediante ejecuciones del programa.
En RaceBench, una colección de prueba con errores de concurrencia inyectados, los investigadores contaron los errores distintos que se activaron en 75 variantes de programas.
Reins activó 769 de los 1.500, frente a 731 de la línea base con el total más alto; todas las herramientas usaron la misma entrada proporcionada para cada variante y dispusieron de cinco horas por objetivo.
El total mayor respalda el rendimiento de Reins en esta configuración de prueba. Como la entrada inicial no expuso todos los errores inyectados, el resultado solo abarca los errores que podían activarse con esas entradas y dentro de ese límite de tiempo.
Estos resultados proceden de una ejecución por herramienta y configuración, con un único modelo. Actualmente, Reins cubre código C/C++ con memoria compartida al que se llega durante la ejecución, y fallos que provocan cierres inesperados, fallos de aserción o bloqueos.
Análisis
Detalles
- Autores
- Yu Zhang, Corina S. Pasareanu, Guowei Yang
- Licencia
- arXiv non-exclusive