CHAPTER 05
5. fault injection으로 오류 경로와 timeout을 검증한다
reset 지연, clock 차단, 잘못된 mapping, allocation 실패, interrupt mask와 packet loss를 의도적으로 주입해 예상한 status, timeout, rollback과 재시도가 실제로 실행되는지 확인합니다.
한 경계
한 번에 하나의 fault만 주입해 어떤 checkpoint가 처음 달라지는지 봅니다.
범위
fault가 다른 device나 filesystem까지 손상하지 않도록 대상과 지속시간을 제한합니다.
복구
오류 검출뿐 아니라 quiesce, rollback, resource release와 재시작까지 통과해야 합니다.
watchdog
무한 대기 대신 문서화된 timeout과 상태 snapshot이 남아야 합니다.
기록 항목과 판정 기준
| 항목 | 수집 방법 | 필수 metadata | 통과 기준 | 누락했을 때의 위험 |
|---|---|---|---|---|
| fault point | debugfs/hook/instrument | object, index, duration | 정확한 한 경계 | 주입 위치 불명 |
| expected error | spec/code review | status/errno/timeout | 예상 경로 실행 | 다른 오류를 성공으로 오인 |
| rollback | trace/resource count | 해제 역순, refcount | 누수/잔존 work 0 | 재시험 오염 |
| blast radius | isolation/watchdog | 대상 장치와 안전 한계 | 다른 자원 정상 | 시스템 손상 |
| recovery proof | 동일 정상 시험 | 재시작 조건 | fault 제거 후 반복 통과 | 오류 로그만 확인 |
실패한 실험을 바로잡는 표
| 증상 | 문제점 | 다시 고정할 변수 | 재시험 | 유효한 결론 |
|---|---|---|---|---|
| fault가 재현되지 않음 | hook가 경로 밖 | 실제 실행 함수/object | trace로 hit 확인 | 주입점 수정 |
| 예상보다 넓게 고장 | shared reset/clock | resource topology | scope 축소 | 공유 경계 확인 |
| timeout 후 재사용 불가 | 오류 검출 성공 | rollback/ownership | resource snapshot diff | 복구 누락 |
| 메모리 증가 | 기능 복구 | mapping/ref/work | 반복 fault와 leak 검사 | lifetime 오류 |
| 다음 boot까지 영향 | fault 제거됨 | persistent register/firmware | power cycle과 reset scope | 잔존 상태 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | 정상 경로에서 주입 hook가 실제 hit하는지 먼저 확인합니다. | hit counter | 위치 검증 |
| 2 | 예상 status/errno/timeout과 rollback 목록을 작성합니다. | oracle | 판정 기준 |
| 3 | fault 한 종류를 한 번 주입하고 모든 snapshot을 수집합니다. | 첫 실패 경계 | 원인 연결 |
| 4 | fault 제거 후 동일 장비에서 정상 시험을 반복합니다. | 완전 복구 | 잔존 상태 검출 |
시뮬레이터에서는 주입 모델과 판정 기준을 함께 고정합니다
Renode는 Robot Framework 시험을 CI에서 반복 실행할 수 있습니다. 먼저 사용하는 보드·주변장치 모델이 필요한 오류를 표현하는지 확인하고, firmware 버전, 모델·스크립트, 입력, 주입 시점, 예상 오류와 복구 조건을 같은 시험 기록에 묶습니다. 정상 경로뿐 아니라 timeout 뒤의 자원 해제와 fault 제거 후 정상 동작까지 판정해야 합니다. Renode 자동 시험 문서
응답 데이터를 넣는 I²C 시험 장치가 있다는 사실만으로 NAK, 쓰기 도중 전원 차단, 늦은 인터럽트가 모두 구현돼 있다고 보지 않습니다. 필요한 상태와 시간 동작을 모델·시험 스크립트에서 따로 확인합니다. 시뮬레이션 통과는 실제 flash의 전원 차단 특성이나 보드의 전기적·시간적 동작을 입증하지 않으므로, 제품의 허용 범위에서 실장비 검증을 별도로 수행합니다. Renode 시험 API의 지원 범위
주의전원과 clock fault injection은 hardware 손상 가능성이 있으므로 operating limit와 안전 회로 안에서만 수행합니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 제조사 레지스터나 제품별 오프셋은 추측하지 않았습니다. 아래의 제조사 자료, 아키텍처 문서, Linux v6.18.37 원본으로 확인할 수 있는 내용만 다뤘습니다.
Linux ftrace
trace_marker, function graph와 event tracing
Linux DMA API HOWTO
DMA 주소 매핑, 버퍼 소유권, 캐시 동기화
Linux PCIe AER
PCIe hierarchy error source와 recovery
Linux fault injection
allocation, I/O와 driver 오류 경로 검증