[en] Computer chips are evolving to obtain more performance, using more transistors and becoming denser and more complex. One side effect of such a scenario is that processors are becoming less robust than ever against transient faults. As on-chip solutions are expensive or tend to degrade processor performance, the efforts to deal with these transient faults in higher levels, such as the operating system or even by the programs, are increasing. Software based fault tolerance approaches to deal with transient faults often use fault injection experiments to evaluate the behavior of programs with and without their fault detection proposals. Using fault injection experiments to evaluate programs behavior in presence of transient faults require running the program under evaluation and injecting a fault (usually by flipping a single bit in a processor register) for a sufficient amount of times, always observing the program behavior and if it ended presenting the expected result. One problem with this strategy is that the fault injection space is proportional to the amount of instructions executed multiplied by the amount of bits in the processor architecture register file. Instead of being exhaustive (it would be unfeasible), this approach consumes lots of CPU time by running or simulating the program being evaluated as many times as necessary to obtain a reasonable valid statistical approximation (usually just a few thousand times). So, the time required to evaluate how a single program would behave in presence of transient faults might be proportional to the time needed to run the program for five thousand times. In this work we present the concept of a program's robustness against transient faults and also present a methodology named ARTFUL (from Assessing the Robustness against Transient Faults) designed to, instead of using executions with fault injections, deterministically calculate this robustness based on program's execution trace over an given processor architecture and on information about the used architecture. Our approach was able to calculate the precise robustness of some benchmarks using just the time need to run the evaluated program for tents of times in the best cases.

[es] Los procesadores están evolucionando para obtener más rendimiento, utilizando más transistores y siendo cada vez más densos y más complejos. Un efecto secundario de este escenario es que los procesadores son cada vez menos robustos frente a fallos transitorios. Como las soluciones integradas en los propios procesadores son caras o tienden a degradar el rendimiento del procesador, estas soluciones para hacer frente a estos fallos transitorios se complementan con propuestas en las capas superiores, como en el sistema operativo, o incluso en los programas. Las propuestas de tolerancia a fallos para tratar fallos transitorios integrados en la capa de aplicación, para su validación y evaluación usan frecuentemente experimentos de inyección de fallos, de este modo pueden evaluar el comportamiento de los programas con y sin sus propuestas de detección de fallas. Utilizar experimentos de inyección de fallos para evaluar el comportamiento de los programas en presencia de fallos transitorios, requiere ejecutar el programa evaluado, haciendo la inyección de un fallo (por lo general cambiando un solo bit en un registro del procesador) una cantidad significativa de veces, siempre observando el comportamiento del programa y si este ha finalizado presentando el resultado esperado. Un problema con esta estrategia es que el espacio de inyección de fallos es proporcional a la cantidad de instrucciones ejecutadas multiplicado por la cantidad de bits en el archivo de registros de la arquitectura del procesador. En lugar de ser exhaustivos (que sería inviable), este método consume mucho tiempo de CPU ejecutando o simulando el programa que se está evaluando tantas veces como sea necesario para obtener una aproximación estadística válida razonable (por lo general sólo unos pocos miles de veces). Así, el tiempo requerido para evaluar cómo se comportaría un solo programa en presencia de fallos transitorios podría ser proporcional al tiempo necesario para ejecutar el programa cerca de cinco mil veces. En este trabajo se presenta el concepto de robustez de un programa frente a fallos transitorios y también presenta una metodología llamada ARTFUL diseñada para, en lugar de utilizar las ejecuciones con inyecciones de fallos, hacer el cálculo de la robustez de forma determinística, basada en una traza de ejecución del programa y en la información sobre la arquitectura utilizada. Nuestro método fue evaluado calculando la robustez precisa de conocidos benchmarks reduciendo significativamente el tiempo necesario para realizar la evaluación.