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 제거 후 동일 장비에서 정상 시험을 반복합니다. | 완전 복구 | 잔존 상태 검출 |
주의전원과 clock fault injection은 hardware 손상 가능성이 있으므로 operating limit와 안전 회로 안에서만 수행합니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Linux ftrace
trace_marker, function graph와 event tracing
Linux DMA API HOWTO
DMA mapping, ownership과 cache synchronization
Linux PCIe AER
PCIe hierarchy error source와 recovery
Linux fault injection
allocation, I/O와 driver 오류 경로 검증