CHAPTER 04
4. 계측기, firmware, kernel과 userspace를 공통 시간축으로 맞춘다
하나의 사건 ID를 GPIO marker, `trace_marker`, firmware log와 application payload에 넣고 각 clock의 offset과 drift를 보정합니다. 순서만 맞추는 것이 아니라 경계별 latency를 계산할 수 있게 합니다.
event ID
timestamp가 달라도 동일 사건을 확실히 매칭합니다.
clock domain
scope, cycle counter, kernel monotonic과 userspace clock은 원점과 속도가 다릅니다.
marker latency
marker를 쓰는 행위에도 software/bus 지연이 있으므로 calibration이 필요합니다.
trace loss
buffer overflow와 overwrite를 기록하지 않으면 사건이 없었다고 오판합니다.
기록 항목과 판정 기준
| 항목 | 수집 방법 | 필수 metadata | 통과 기준 | 누락 시 위험 |
|---|---|---|---|---|
| hardware marker | GPIO/analyzer | event ID encoding, probe | stimulus와 고정 관계 | software timestamp만 남음 |
| kernel trace | ftrace/trace_marker | clock, CPU, lost events | entry/exit와 ID 연결 | buffer overflow |
| firmware log | cycle counter | frequency, wrap, boot offset | kernel marker와 보정 가능 | 서로 다른 clock 혼합 |
| userspace | payload/monotonic timestamp | process/thread/sequence | socket 결과와 ID 일치 | application queue 지연 누락 |
| calibration | 동시 marker | offset, drift, uncertainty | 시험 구간 오차 이내 | 거짓 선후관계 |
실패한 실험을 바로잡는 표
| 증상 | 문제점 | 다시 고정할 변수 | 재시험 | 유효한 결론 |
|---|---|---|---|---|
| 로그 순서가 뒤집힘 | clock 원점 다름 | offset/drift | 동시 marker 회귀 | 보정 후 순서 |
| 일부 event가 없음 | buffer overflow 가능 | lost counter/buffer size | 짧은 capture 재시험 | 실제 loss와 수집 loss 분리 |
| GPIO와 trace 차이가 변함 | marker latency 불안정 | CPU scheduling/MMIO posting | RT pinning과 readback 비교 | marker uncertainty |
| 장시간 drift | 초기 sync만 수행 | clock frequency | 구간별 calibration | drift 보정 |
| printk 추가 후 정상 | 관측이 timing 변경 | low-overhead trace | binary buffer로 재시험 | timing race |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | 모든 로그에 동일한 증가 event ID를 넣습니다. | ID 매칭 | 사건 식별 |
| 2 | 시험 시작/끝에 동시 marker를 발생시킵니다. | offset/drift | clock 보정 |
| 3 | trace lost event와 buffer 상태를 결과에 포함합니다. | 수집 완전성 | 부재 증거 검증 |
| 4 | 경계별 delta와 uncertainty를 계산합니다. | latency 표 | 상한 분석 |
주의서로 다른 clock의 raw timestamp를 숫자 크기만으로 정렬하지 않습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 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 오류 경로 검증