Fault Injection Techniques and Tools_201612
by Mei-Chen Hsueh, Timothy K. Tsai, and Ravishankar K. Iyer.
A method for evaluating fault coverage using simulated fault injection for digitalized systems in nuclear power plant 라는 논문을 읽었다. 위 논문은 fault coverage*를 평가하는 논문이다. 먼저 Stuck-at-fault**를 8051 processor에 발생시키고 Heartbeat watchdog timer, Rom check sum을 통해 얼만큼의 fault가 cover되는지에 대한 실험이었다. 논문을 읽으면서 fault injection은 왜 수행하고, 어떤방식으로 수행되는지 궁금해졌기에 본 글을 읽어보게 되었다. 본 글은 fault injection의 종류 및 개념 그리고 사용되는 tool에 대해 잘 정리해 놓았으나 발행기관이 IEEE***라 그런지 chip계속 chip을 가지고 설명하여 관련 지식이 없는경우 예시의 이해가 어려울 수 있을것 같다.
시스템의 신뢰도를 평가하고 분석하는 것은 매우 중요한 부분중 하나이다. 하지만 현대의 시스템은 크기가 크고 상당히 복잡한 구조를 가지고 있다. 이런 복잡하고 거대한 시스템의 분석을 하기위한 방법으로 Measurement based approach와 Experiment based approach 두가지의 방법이 있다. Measurement based approach는 그냥 고장이 발생할 때 까지 죽치고 계측하는 것이다. 따라서 고장의 빈도가 낮고 infrequent한 경우 세월아 네월아 기다려야 하므로 적용이 힘들다. 그리고 정말 불량한 시스템이 아닌이상 대부분의 시스템은 고장의 빈도가 낮은편이다. 이러한 한계점으로, Experiment based approach를 사용하는 경우가 많다. Fault injection은 Experiment based approach에 있어서 좋은 방법으로 쓰인다.
Fault injection은 실험을 개시하는 phase, 고장 주입 부분 (hardware/software)에 따라 구분된다. 먼저 phase에 의한 구분을 살펴보면, System의 초반 (conceptual 한 단계)에서 fault injection을 하는 경우를 Simulation based fault injection이라 한다. Simulation based fault injection을 통해서 dependability bottleneck을 파악할 수 있고, system이 어떤식으로 고장이 나는지, 시스템의 fault tolerance mechanism을 확인할 수 있다고 한다. 그리고 prototype을 만들고 fault injection을 하는 경우를 prototype fault injection이라 한다. 이를 통해서는 실제 어디가 문제를 일으키는지 파악하고 fault tolerant를 파악할 수 있다.
고장 주입 부분에 따라서는, Hardware fault injection과 Software fault injection으로 구분된다. 먼저 Hardware fault injection에 대해 알아보자.
Hardware fault injection은 system에 물리적인 방법을 통해 고장을 유도하거나 강제로 주입하는 방법이다. Hardware fault injection의 장점으로는 고장을 일으키고 관측함에 있어서 high time resolution을 가지고 원하는 부분에서 원하는 시간에 고장을 일으킬수 있다는 점이다. 단점으로는 실제 model이 필요하므로 비용적인 측면이 부담될 수 있다는 것이다.
Hardware fault injection은 또 system에 접촉해 있는지 (contact) 비 접촉해 있는지 (without contact)에 따라 injection with contact, injection without contact로 구분된다.
Contact hardware fault injection은 Active probe를 사용하거나 socket insertion을 통해 이루어진다. Active probe는 pin에 고장을 내게 만드는 probe를 붙이는 것이다. 이 probe는 전류를 내뿜거나 전압을 문제를 일으키게 된다. Probe를 통해 이루어지는 고장주입의 예시가 바로 Stuck-at-fault이다. Socket insertion은 hardware circuit 사이에 socket을 넣어 이상한 logic gate를 작동시키거나 stuck-at-fault를 발생시키는 방법이다. Socket을 하나 아예 때려박는 식으로 이루어지니 더 많은 종류의 고장을 일으킬 수 있다고 한다.
비 접촉식 고장주입 (Injection without contact)로는 chip에 방사선을 쏘거나 강력한 자기장을 거는 방식으로 이루어진다.
Hardware fault injection의 도구로는 LAAS-CNRS가 만든 Messaline, Charmer university of technology가 만든 FIST(Fault Injection System for study of Transient fault effect) 그리고 Technical university of Vienna에서 만든 MARS(Maintainable Real-Time System)이 있다. 각각의 도구를 자세히 알 필요까지는 없을것 같아 생략한다.
Software fault injection은 software만 준비하면 되므로 비용 측면에서 hardware fault injection보다 뛰어나다. 하지만 hardware fault injection만큼 원하는 시간 원하는 위치에서 고장을 주입 할 수 있는것이 아니므로, time resolution이 낮다는 점이 문제로 작용한다. 그래서 요즘에는 Hybrid (Hardware+Software) fault injection 을 통한 방법이 늘어나고 있다고 한다. Software fault injection은 compile time injection과 run time injection 두가지로 구분된다고 한다.
Compile time injection은 source code나 assembly code안에 고장을 넣어놓는 것이다. 그러면 변조된 code는 다른일을 하는 프로그램을 만들게 되고 error를 발생시키게 된다. 이 방법은 한번 고장을 주입한 뒤로는 runtime 동안 다른 고장을 주입할 필요가 없다는 특징이 있다.
Run-time injection은 timer를 건드리는 경우, 비정상적인 code를 넣는 경우 두가지로 나뉜다.
time-out은 프로그램의 timer를 이용하는 방법이다. 보통의 프로그램들은 일정한 시간이 지나면 종료하도록 timer가 설정되어 있고, 이를 time out event라 한다. 이 점을 이용하여 hardware timer나 software timer를 조작해 강제로 time out event가 발생하도록 하여 비정상적인 종료를 유도할 수 있다. 이러한 방법을 time-out이라고 한다.
Software fault injection의 도구로는 Ferrari (Fault and Error Automatic Real-Time Injection), Ftape (Fault Tolerance and Performance Evaluator), DOCTOR(Integrated Software Fault Injection Environment) 가 있다. 역시 각가의 도구를 자세히 알 필요는 없어 생략한다.
지금은 컴퓨터 공학쪽 지식이 부족해서 그런지 완전히 이해하긴 어려웠다. 나중에 아는게 쌓이면 정확히 어떤식으로 동작하는지 알 수 있을것 같다. 공부를 더 한 뒤 다시한번 글을 읽어보고 어떤 방법이 내가 앞으로 다룰 시스템에 유용한지 파악해야겠다.
각 방법의 장단점을 저자가 잘 정리해 놓아 표를 첨부하는것으로 글을 마친다.
---------------------------------------------
*Fault coverage의 정의 및 False positive, False negative, True positive, True negative에 대해
**Stuck-at-fault란
***Institute of Electrical and Electronics Engineers