실시간 성능 분석 — WCET·Jitter·Deadline Miss 측정
#한 줄 요약
**“평균이 아니라 worst”**입니다. Real-time에서는 max ≤ deadline이 기준이며, 일반 시스템과 평가 기준 자체가 다릅니다.
#Real-Time의 핵심 지표
| 지표 | 의미 |
|---|---|
| WCET | Worst-Case Execution Time |
| Deadline Miss | Deadline 넘긴 횟수 |
| Jitter | Latency 변동 |
| Tardiness | 늦은 정도 (deadline 넘긴 시간) |
| Release Jitter | task 실행 시작 지연 |
#WCET — 측정 4 방법
#1. Static Analysis (정적 분석)
소스와 CPU 모델로부터 모든 path의 WCET를 계산합니다. 상용 도구로는 aiT(AbsInt)와 Bound-T가 있습니다.
수학적 보장이 장점입니다. 다만 비싸고 setup이 복잡합니다.
#2. Measurement-Based
uint32_t max_cycles = 0;for (int i = 0; i < N; i++) { uint32_t t = DWT->CYCCNT; work(input[i]); uint32_t elapsed = DWT->CYCCNT - t; if (elapsed > max_cycles) max_cycles = elapsed;}WCET_est = max_cycles * SAFETY_FACTOR; // 보통 1.2-1.5×Coverage가 보장되지 않습니다. 측정하지 않은 path가 더 느릴 가능성이 있습니다.
#3. Hybrid
Static analysis로 bound를 계산하고 measurement로 typical case를 잡습니다. 정밀도와 비용의 균형이 좋습니다.
#4. Probabilistic WCET (pWCET)
확률 분포로 표현합니다. 예를 들어 “99.999% 확률로 80 µs 미만”처럼 말합니다. Extreme Value Theory를 활용하며, 자동차나 항공 분야에서 도입되고 있습니다.
#Jitter 분석
// 1ms 주기 taskTickType_t xLast = xTaskGetTickCount();while (1) { uint32_t t = DWT->CYCCNT; process(); vTaskDelayUntil(&xLast, pdMS_TO_TICKS(1));
uint32_t period_actual = DWT->CYCCNT - t; uint32_t period_expected = SystemCoreClock / 1000; int32_t jitter = period_actual - period_expected; log_jitter(jitter);}Jitter 분포를 보면서 기준 ±10% 안이면 OK로 판정합니다. 더 크면 원인을 추적합니다.
#Jitter 원인
- Higher-priority preemption
- ISR latency
- Cache miss (Cortex-A)
- DMA contention
- Tickless wake delay
#Deadline Miss 카운트
void task(void *arg) { TickType_t deadline = xTaskGetTickCount() + DEADLINE_TICKS; while (1) { if (xTaskGetTickCount() > deadline) { miss_count++; } process(); deadline = xTaskGetTickCount() + DEADLINE_TICKS; }}Counter를 누적하고 주기적으로 출력합니다. Production에서는 miss rate에 대한 alerting을 둡니다.
#Tardiness — 얼마나 늦었나
Deadline을 넘긴 시간을 의미합니다. 단순 miss count보다 정보량이 많습니다.
int32_t tardiness = (now - deadline); // > 0이면 늦음log_tardiness(tardiness);Tardiness 분포를 보면서 얼마나 심각한지를 판정합니다.
#Cyclictest — Linux RT 표준
sudo cyclictest -p 80 -t 1 -i 1000 -l 100000 -m
# T: 0 (12345) P:80 I:1000 C:100000 Min:5 Avg:7 Max:23p99와 max latency를 측정합니다. PREEMPT_RT에서 worst-case를 검증할 때 씁니다. 핵심은 수일에 걸친 측정으로 outlier를 capture하는 것입니다.
#Latency Budget 분석
PID 1ms 주기, deadline 1ms
ISR latency : 50 nsScheduler latency: 2 µsContext switch : 3 µsPID compute : 95 µs (WCET)Actuator write : 10 µs────────────────────────Total worst case: ~110 µs
여유 = 890 µs (89%) — 안전Component별로 budget을 고정해 두고, 컴포넌트별로 WCET를 분석합니다.
#Hard vs Soft RT — 측정 차이
| Hard RT | Soft RT | |
|---|---|---|
| Deadline miss | 0회 (모든 경우) | <1% |
| 측정 기간 | 무한 (수학 증명) | 수일 |
| WCET 산출 | Static analysis | Measurement + 1.5× |
| Test coverage | MC/DC | functional |
| 인증 | DO-178C·ISO 26262 ASIL D | 없음 |
#Schedulability Analysis
WCET를 알면 전체 시스템의 schedulability를 증명할 수 있습니다.
#Utilization Bound (Liu-Layland)
#Response Time Analysis (RTA)
각 task의 worst response time은 다음과 같이 구합니다.
Iterative하게 풉니다. (deadline)이면 schedulable입니다.
Cheddar와 SymTA/S 같은 도구가 이 과정을 자동화합니다.
#Release Jitter
Task가 정확히 release되어야 할 시점과 실제 시작 시점의 차이를 의미합니다.
이상: release at t=0, 5, 10, 15, ... ms (정확 5ms 주기)실제: t=0.05, 5.12, 9.98, 15.30, ...release jitter = 5.30 - 5.00 = 0.30 ms원인으로는 tick granularity, higher-priority preemption, ISR latency가 있습니다.
#측정 시 함정
#Probe Effect
측정 코드 자체가 측정 대상에 영향을 줍니다. printf를 추가하면 1 ms가 지연되기도 합니다.
해결책은 light-weight tracing(DWT, GPIO, ring buffer)입니다.
#Thermal Drift
장시간 부하가 걸리면 온도가 상승하고 throttling이 일어납니다. 측정 후반부의 latency가 증가합니다.
해결책은 fan이나 heatsink를 두고 thermal sensor로 모니터링하는 것입니다.
#Stationarity
부팅 직후에는 시스템이 cold 상태였다가 점차 warm해집니다. 최소 1분 warmup 후에 측정합니다.
#자주 하는 실수
⚠️ Avg WCET 사용
평균은 WCET가 아닙니다. Max에 safety factor를 곱한 값을 씁니다.
⚠️ Single workload만
Worst-case를 유발하는 input은 다릅니다. 대표 input set을 준비해야 합니다.
⚠️ Lab 환경 = production
Production 환경에는 DMA, noise, thermal이 추가됩니다. 실 환경에서 측정해야 합니다.
⚠️ Linux mainline = real-time
Mainline은 best-effort입니다. PREEMPT_RT 패치만 RT-capable입니다.
#정리
- Real-time에서는 WCET, jitter, deadline miss, tardiness를 측정합니다.
- WCET 측정에는 4가지 방법이 있습니다. static, measurement, hybrid, probabilistic입니다.
- Cyclictest가 Linux RT의 표준입니다.
- Latency budget 분석으로 컴포넌트별 WCET 책임을 나눕니다.
- Schedulability proof는 RTA와 WCET의 조합으로 가능합니다.
다음 편은 벤치마킹 기초입니다. 재현성과 warmup, 노이즈 제거를 다룹니다.
#관련 항목
Embedded Performance Engineering · 6 of 57
- 1Embedded Performance Engineering — 임베디드 성능 엔지니어링 시리즈 소개
- 2임베디드 성능 분석 방법론 — Measure → Analyze → Optimize 사이클
- 3성능 지표 정의 — Latency·Throughput·Utilization 분석
- 4성능 측정의 기본 — Wall-Clock·CPU Cycle·Instruction Count
- 5성능 데이터 통계적 분석 — Percentile·Histogram·평균의 함정
- 6실시간 성능 분석 — WCET·Jitter·Deadline Miss 측정
- 7임베디드 벤치마킹 기초 — 재현성·Warmup·노이즈 제거
- 8성능 모델링 — Amdahl·Gustafson·Roofline Model 적용
- 9프로파일링 기법 개요 — Sampling vs Instrumentation·PGO·LTO
- 10CPU 파이프라인 분석 — 5-stage·Cortex-M·Cortex-A 비교
- 11Pipeline Stall 분석 — Data·Structural·Control Hazard·Forwarding
- 12Branch Prediction 분석 — Static·2-bit·BTB·BHT·Mispredict 비용
- 13Speculative Execution 분석 — OoO·Reorder Buffer·Register Renaming
- 14CPU Cache 기초 — L1·L2·L3·Set Associative·Replacement Policy
- 15Cache Miss 3C Model 분석 — Compulsory·Capacity·Conflict
- 16Cache Line 최적화 — Alignment·Prefetch·False Sharing 처리
- 17메모리 대역폭 분석 — STREAM·Roofline·Bus Saturation 측정
- 18SIMD·NEON 활용 — 128-bit Vector·Auto-Vectorization·SVE/SVE2
- 19PMU·HPM 하드웨어 카운터 분석 — 정밀 성능 진단
- 20임베디드 Bus Architecture — AHB·AXI·CHI 진화와 5-Channel
- 21Bus Contention 진단 — Arbitration·QoS·Starvation 측정
- 22DMA 성능 최적화 — Burst·Scatter-Gather·Chain·Cache 일관성
- 23DMA vs CPU Copy 성능 비교 — Break-even·Setup Overhead 실측
- 24Interrupt Latency 분석 — 진입·종료·Tail-Chaining·Late Arrival
- 25Interrupt Storm 처리 — NAPI·Rate-Limit·Polling 전환
- 26MMIO 접근 성능 — Cache Policy·Write-Combining·Volatile·Barrier
- 27Peripheral Clock 분석 — PLL·Divider·Gating·DVFS
- 28Power vs Performance 트레이드오프 — DVFS·Race-to-Idle·Big.LITTLE
- 29Thermal Throttling 분석 — Junction Temp·Trip Point·냉각
- 30CXL Interconnect 분석 — AI 시대 메모리 대역폭 확장
- 31Concurrency 기초 — Concurrency vs Parallelism·Race·Memory Model
- 32False Sharing 진단 — Cache Line Ping-Pong·Padding·측정
- 33Lock Contention 분석 — Wait·Hold·Convoy·측정 기법
- 34Spinlock 성능 분석 — Spin-Wait vs Context Switch·Ticket·MCS
- 35Mutex 성능 분석 — Futex·Adaptive·Priority Inheritance
- 36Reader-Writer Lock 성능 — Reader/Writer Priority·RCU·Seqlock
- 37Lock-Free 자료구조 성능 — CAS·ABA·Hazard Pointer·Epoch Reclamation
- 38Memory Ordering 분석 — Acquire·Release·Seq-Cst·ARM Relaxed Model
- 39Cache Coherency 프로토콜 — MESI·MOESI·Snoop·Directory
- 40SMP 성능 분석 — Per-Core·Affinity·Load Balance·Scalability
- 41Linux perf 기초 — stat·record·report 활용
- 42Linux perf 고급 — Raw Event·Tracepoint·perf script
- 43ftrace 활용 — function·function_graph·latency tracer
- 44eBPF·bpftrace 동적 트레이싱 — 커널 무수정 관측
- 45Flamegraph 분석 — On-CPU·Off-CPU·Differential
- 46ARM DS·Lauterbach 분석 — Hardware Trace 전문 도구
- 47Bare-metal 프로파일링 — GPIO·DWT·SysTick·ITM 활용
- 48NVIDIA Nsight Systems — GPU·NPU 포함 시스템 분석
- 49모던 프로파일러 비교 — Tracy·Hotspot·uftrace·Coz
- 50연속 프로파일링 — Parca·Pixie·Pyroscope·Tetragon
- 51실전 사례 — ISR Latency 100µs Deadline Miss 추적
- 52실전 사례 — Matrix Multiply가 예상의 10배 느린 이유
- 53실전 사례 — 8-core가 4-core를 넘으면 throughput이 떨어지는 이유
- 54실전 사례 — 카메라 1080p 60fps가 30fps로 떨어지는 이유
- 55CXL.mem 지연·대역폭 실측 — Direct·Switch·Pooled 토폴로지 비교
- 56CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem 활용
- 57실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복
관련 글
성능 지표 정의 — Latency·Throughput·Utilization 분석
3 핵심 지표 + 임베디드 추가 — Jitter·Deadline. Service time vs Response time.
실시간성 분석 — Latency·Jitter·Deadline·WCET·RMA
4 핵심 지표인 Latency, Jitter, Deadline, WCET를 다룹니다. Hard와 Soft real-time의 차이, Rate Monotonic Analysis로 schedulability를 증명하는 방법을 살펴봅니다.
실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복
70B 모델 KV cache가 HBM 한계를 넘어 throughput이 무너졌을 때, CXL.mem 256 GB pool 추가로 회복한 실전 케이스.