Interrupt Latency & Jitter Physics
하드웨어 이벤트에 대한 시스템의 반응 속도를 결정짓는 인터럽트 지연 시간의 물리적 구성 요소와 그 불확실성(Jitter)을 분석하고 제어하는 학습 노드입니다.
Article
M
Me
hyunyoun's Blog
computer-architecture-embedded-systemscomputer-architectureembedded-systemshardware-software-interface-physicsinterrupt-latencyjitter-physicslearningmmio10 min read
1. Overview
인터럽트 지연시간과 지터 역학(Interrupt Latency & Jitter Physics)은 하드웨어 이벤트(버튼 클릭, 타이머, 통신 수신)가 발생하는 찰나의 순간, 딴짓을 하던 CPU의 멱살을 잡고 비상 대기조(ISR)로 진입하기까지 발생하는 나노초(ns) 단위의 기계적 저항력과 랙(Lag)을 분해하는 타이밍 공학입니다.
학습자는 인터럽트 핀(Pin)에 전압이 떨어지는 순간부터 CPU가 레지스터를 스택에 피신시키고 벡터 테이블을 뒤지는 데 걸리는 물리적 마찰 시간인 **인터럽트 레이턴시(Interrupt Latency)**를 뜯어봅니다. 나아가 다른 인터럽트가 이미 실행 중이거나 캐시 메모리가 미스(Miss)났을 때 레이턴시가 무작위로 널뛰는 기괴한 현상인 **지터(Jitter)**의 물리를 해부하고, 중첩(Nesting)과 꼬리 물기(Tail-Chaining) 하드웨어 기법을 통달하여 에어백이나 미사일처럼 1밀리초 늦으면 끝장나는 실시간 시스템(Hard Real-time)의 절대적 결정성을 확보합니다.
2. Scope & Boundaries
In-Scope
- 타이밍 역학 (Timing Physics): 인터럽트 레이턴시(Latency), 지터(Jitter, 타이밍 편차), 최악 실행 시간(WCET).
- 컨텍스트 백업 물리 (Context Preservation): 자동 스택 푸시(Push, R0-R3, R12, LR, PC, xPSR), 꼬리 물기(Tail-Chaining), 지각 도착(Late Arrival).
- 우선순위 지배구조 (Priority Architecture): 중첩(Nesting / Preemption), 선점 우선순위(Preempt Priority)와 서브 우선순위(Sub Priority), 프라이어리티 인버전.
- 아키텍처 부작용 (Architectural Side-effects): 캐시 미스(Cache Miss), 브랜치 예측 실패(Pipeline Flush)가 ISR 진입 속도에 미치는 파괴적 영향.
Out-of-Scope
- RTOS 태스크 스케줄링: ISR이 끝나고 어떤 소프트웨어 스레드(Task)를 깨울지 결정하는 OS의 컨텍스트 스위칭 03-01-01. Process & Thread Physics 영역.
- 분산 시스템 클럭 동기화: PTP/NTP 통신을 통한 여러 컴퓨터 간의 타이밍 오차 맞추기 08-01. Network Physics & Routing 영역.
Boundaries
- Latency vs. Task Switching (02-05-01): 소프트웨어 스레드 스위칭(02-05-01/RTOS)이 "OS 커널이 코드로 계산해서 수만 클럭 만에 무거운 짐을 옮기는 이사"라면, 인터럽트 레이턴시는 "하드웨어 논리 게이트가 개입하여 단 12클럭(ARM Cortex-M 기준) 만에 현재 상태를 스택에 강제로 때려 박고 ISR로 순간 이동하는 물리적 멱살잡이"입니다.
3. Counterexample
- 캐시 활성화 맹신 (Cache Speed Illusion): CPU 스피드를 올리려고 L1 캐시를 켰는데, 오히려 하드 리얼타임(Hard Real-Time) 모터 제어 시스템이 발작을 일으키는 무지함. 캐시는 평소 코드를 빠르게 만들지만(평균 속도 상승), 정작 모터 비상 정지 인터럽트가 터졌을 때 그 비상 코드가 캐시에서 미스(Cache Miss)나면 메모리에서 퍼오느라 지연 시간이 1클럭에서 100클럭으로 미친 듯이 널뛰는(Jitter) 재앙을 낳습니다. 실시간 시스템에서는 평균 속도보다 '예측 가능한 최악 시간(WCET)'이 절대 헌법이므로, 때로는 캐시를 강제로 꺼버려야(Tightly Coupled Memory, TCM 사용) 합니다.
- ISR 내 거대 연산 (Fat ISR Anti-pattern): 네트워크 패킷 수신 인터럽트(ISR) 안에서 1KB짜리 데이터를 해싱(SHA)하고 암호화까지 다 끝마치려는 초보자의 지옥. 그 거대한 ISR이 돌아가는 수십 밀리초 동안, 다른 모든 하위 인터럽트(타이머, 버튼)는 처리가 블로킹(Blocking)되어 시스템 전체의 레이턴시 랙(Lag)이 도미노처럼 쌓여 완전히 붕괴합니다. ISR에서는 '플래그(Flag)' 비트 1개만 딱 세우고 도망쳐 나온 뒤(Bottom Half), 진짜 무거운 연산은 메인 루프(Task)에서 처리해야 합니다.
4. Prerequisites
- 인터럽트 기본 뼈대 (Basic): ISR(인터럽트 서비스 루틴)과 NVIC 레지스터의 존재 자체를 사전에 인지하고 있어야 레이턴시의 물리적 길이를 체감할 수 있습니다. (02-05-01 MCU)
- 파이프라인 플러시 (Recommended): 점프(Branch)가 일어날 때 기존에 큐(Queue)에 들어있던 명령어가 학살(Flush)되는 원리를 알아야 ISR 진입 지연을 이해합니다. (02-03-01 PHR)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 찰나의 마찰력, 인터럽트 레이턴시 물리 (Interrupt Latency)
- Why to Learn: 100km/h로 달리는 자동차에서 브레이크 센서가 0(LOW)으로 떨어졌을 때, 브레이크 캘리퍼에 모터 펄스를 쏘는 코드 첫 줄이 도달할 때까지 CPU가 낭비하는(소비하는) 기계적 공회전 시간을 장악하기 위함입니다.
- What to Learn:
- Concepts: 인터럽트 레이턴시(Interrupt Latency), 문맥 저장(Context Save), 벡터 페치(Vector Fetch).
- Skills: ARM Cortex-M 12-cycle 레이턴시 법칙, 파이프라인 플러시(Flush).
- Tools: 오실로스코프 (핀 토글 측정법).
- Trade-offs: 레지스터 백업을 CPU 하드웨어가 자동으로 스택에 박아주면(Push) 레이턴시가 극단적으로 짧고 일정해지지만, 어셈블리어로 프로그래머가 직접 PUSH/POP 하도록 냅두는 낡은 아키텍처(AVR 등)는 유연하지만 레이턴시가 코더 실력에 따라 미친 듯이 엿가락처럼 늘어나는 단점.
- How to Learn:
- 1단계: 하드웨어 핀에 트리거 전압이 걸리면, CPU가 현재 파이프라인에서 실행(EX) 중이던 덧셈까지만 마저 끝내고, 뒤따라오던 디코드/패치 명령을 싹 다 비운(Flush) 뒤, R0~R3, PC 레지스터를 메모리 스택 램(RAM)에 쓰기(Write) 시작하는 병목 구간을 해부합니다.
- 2단계: 스택에 밀어 넣는 동시에 버스 컨트롤러가 0번지 벡터 테이블에서 ISR 함수의 주소를 잽싸게 읽어오는(Vector Fetch) 이중 버스 아키텍처(동시 작업)의 경이로운 클럭 최적화(12 Cycles)를 뜯어봅니다.
- Implement: 센서 핀(EXTI)에 신호가 떨어질 때 하드웨어 타이머를 시작하고, ISR 코드 첫 줄에서 타이머를 멈추어 그 사이의 틱(Tick) 카운트(레이턴시)를 터미널에 덤프하는 임베디드 벤치마크 로직(파이썬 가상 클럭 시뮬레이터로 모사) 작성.
Recommended
Core Topic 02: 중첩과 꼬리 물기의 하드웨어 곡예 (Nesting & Tail-Chaining)
- Why to Learn: 수십 개의 센서 인터럽트가 1마이크로초 차이로 연달아 펑펑 터질 때, CPU가 팝업(Pop)과 푸시(Push)를 미친 듯이 반복하다 시스템 클럭을 통째로 낭비해 버리는 무식함을 회피하는 칩 레벨의 꼼수를 쥐기 위함입니다.
- What to Learn:
- Concepts: 네스팅(Nesting / Preemption), 꼬리 물기(Tail-Chaining), 지각 도착(Late Arrival).
- Skills: NVIC 우선순위 그룹 매핑, 선점 레벨 통제.
- Tools: 인터럽트 타이밍 궤적(Trace).
- Trade-offs: 낮은 레벨 ISR 중에 높은 레벨 ISR이 치고 들어오면(Nesting) 최우선 작업 응답성은 극강이 되지만 원래 스택 위에 또 스택을 푸시하며 스택 오버플로우 폭발 위험이 커지는 딜레마.
- How to Learn:
- 1단계: 꼬리 물기(Tail-Chaining): ISR_A가 끝나고 원래 메인 함수로 돌아가기 위해 스택을 복구(POP, 12클럭)하려는 찰나, 이미 밖에서 대기 타던 ISR_B가 발견되면 "어차피 다시 스택에 백업(PUSH)해야 하니까, 복구하지 말고 그냥 B의 주소로 바로 점프하자!"라며 24클럭 낭비를 단 6클럭으로 단축하는 경이로운 하드웨어 숏컷을 해부합니다.
- 2단계: 지각 도착(Late Arrival): 하급 인터럽트 C가 발생해 스택 백업(PUSH)을 8클럭째 진행 중인데, 상급 인터럽트 D가 늦게 튀어나왔을 때, 하던 PUSH를 취소하지 않고 마저 끝낸 뒤 얌전히 벡터 테이블만 D의 주소로 바꿔치기하여 상급자(D)를 먼저 모시는(Execution) 기하학을 뜯어봅니다.
- Implement: 큐(Queue)에 인터럽트 이벤트를 발생시키고, 상태 머신 루프에서
[Push 12][ISR_A 100][Pop 12][Push 12][ISR_B 50]로 도는 바보 스케줄링과[Push 12][ISR_A 100][Tail-Chain 6][ISR_B 50]로 스위칭 오버헤드를 깎아먹는 ARM Cortex-M 최적화 시뮬레이션을 비교 증명.
Practical
Core Topic 03: 실시간의 적, 지터 물리와 무작위성 (Jitter & Variance)
- Why to Learn: "인터럽트 진입에 10클럭 걸림!"이라고 스펙 시트에 적혀있지만, 막상 현장(필드)에 배포하면 어떨 땐 10클럭, 어떨 땐 300클럭으로 지연 시간이 고무줄처럼 늘어나 로봇 팔이 덜덜 떨리는 지터(Jitter) 재앙의 근원을 뽑아내기 위해서입니다.
- What to Learn:
- Concepts: 지터(Jitter, 레이턴시 편차), WCET(최악 실행 시간, Worst-Case Execution Time).
- Skills: 다중 다단 캐시 미스(Cache Miss), 브랜치 플러시, 멀티 사이클 명령어(나눗셈, LDM/STM) 방해.
- Tools: 타이밍 편차 히스토그램.
- Trade-offs: 비순차 실행(OoO)과 분기 예측(Branch Prediction) 떡칠을 한 고성능 CPU를 쓰면 평균 처리량은 하늘을 뚫지만, 찰나의 캐시 붕괴 한 방에 레이턴시가 수백 클럭으로 무작위 팽창(Jitter 폭발)하므로 하드 리얼타임 비행 제어 시스템에서는 고성능 칩을 기피하고 구형 단순 파이프라인 칩(Cortex-R 시리즈)을 써야만 하는 실시간의 역설.
- How to Learn:
- 1단계: 인터럽트가 터진 그 순간 CPU가 하필 100클럭짜리 나눗셈(
DIV) 명령어나 거대한 배열 복사(LDM)를 실행 중이면, CPU 하드웨어가 그 긴 명령이 끝날 때까지 인터럽트를 물고 버티며(Blocking) 레이턴시가 고무줄처럼 늘어나는 1차 지터를 해부합니다. - 2단계: ISR 코드가 하필 L1 캐시에서 밀려나(Evict) 램(SRAM/Flash)에 쳐박혀 있을 때, CPU가 진입을 위해 램 컨트롤러(Wait State)를 거치며 수십 클럭의 캐시 패널티를 처맞는 2차 지터를 뜯어봅니다.
- 1단계: 인터럽트가 터진 그 순간 CPU가 하필 100클럭짜리 나눗셈(
- Implement: 10,000번의 임의 인터럽트 발생을 모사하여, 캐시 히트(90%)일 땐 12클럭, 미스(10%)일 땐 50클럭, 하필 나눗셈 중(5%)일 땐 80클럭으로 지연되는 확률 모델 작성. 이를 가우시안 롱테일(Long-tail) 그래프 히스토그램 데이터 텍스트로 뽑아내어, 평균은 15클럭이지만 WCET(최악)는 100클럭에 육박하는 지터 공포 증명.
Advanced
Core Topic 04: 결정성 극대화와 밀착 메모리 (TCM & Determinism)
- Why to Learn: 사람 목숨이 달린 브레이크 제어에서 "캐시 미스 때문에 랙 걸렸어요"라는 변명은 통하지 않으므로, 캐시의 무작위성을 쓰레기통에 처박고 반도체 트랜지스터 1클럭의 오차도 없는 궁극의 결정성(Determinism)을 하드웨어 레벨에 박아넣기 위함입니다.
- What to Learn:
- Concepts: 강결합 메모리(TCM, Tightly-Coupled Memory), XIP(eXecute In Place), ARM Cortex-R 아키텍처.
- Skills: 링커 스크립트 기반 주소 강제 맵핑(
.attribute(TCM)). - Tools: 레이턴시 정적 분석 툴.
- Trade-offs: TCM 메모리는 CPU 코어 다이(Die)와 직결되어 캐시 미스 따위 없이 무조건 1클럭 접근(100% 결정성)을 보장하지만, 실리콘 공간을 너무 많이 퍼먹어 기껏해야 16KB~64KB밖에 넣을 수 없는 비참한 용량의 한계.
- How to Learn:
- 1단계: 시스템 버스(AHB/AXI)를 타면 다른 마스터(DMA)와 멱살잡이(Arbitration)를 하느라 레이턴시가 변동(Jitter)하므로, 아예 CPU 코어 전용 1차선 직통 고속도로를 뚫어놓은 TCM(Tightly-Coupled Memory)의 하드웨어 기하학을 해부합니다.
- 2단계: C/C++ 코딩을 할 때, 절대로 늦어지면 안 되는 핵심 ISR 함수(
__attribute__((section(".tcm_code"))))와 그 ISR이 쓰는 필수 변수들만 컴파일러 링커 스크립트를 조작해 이 64KB짜리 황금의 땅(TCM)에 강제 이주(Hardcoding)시키는 극한의 튜닝을 뜯어봅니다.
- Implement: 파이썬 시뮬레이터에서 일반
RAM_Bus(혼잡도 0~10 난수 딜레이)와TCM_Bus(항상 1 고정 딜레이) 객체를 둡니다.ISR_Emergency()를RAM_Bus에서 실행하면 틱이 널뛰는 것을 보여주고,TCM_Bus로 섹션(Section) 맵핑을 옮기는 순간 10,000번을 실행해도 오차(Variance)가 0인 완벽한 하드 리얼타임 결정성이 달성됨을 덤프 증명.
7. Terminology
8. References
Primary
- [P3] CyBOK v1.1 - Hardware Security / Real-time and Safety-critical Support — Main standard.
- [P1] CS2023 - AR/Embedded Systems (Timing Analysis) — Core requirements.
Secondary
- [The Definitive Guide to ARM Cortex-M3/M4 Processors] Joseph Yiu — The gold standard for Interrupt internals.
- [Real-Time Systems Design and Analysis] Laplante — Jitter and Latency theory.
Industry
- [ARM Application Note 179: Cortex-M3/M4 Interrupt Latency] — Detailed cycle breakdown.
- [Texas Instruments: Enhancing Real-time Response in Embedded Processors] — Industry whitepaper.
9. Final Checklist
Primary
- 하드웨어 인터럽트가 발생했을 때, CPU 파이프라인에서 현재 수행 중인 '긴 명령어'가 즉각 중단되는지 아니면 끝날 때까지 기다리는지 물리적 차이를 설명 가능한가? (P1)
- 'Context Save' 과정에서 왜 하드웨어가 특정 레지스터들만 자동으로 스택에 쌓는지, 그 기준을 물리적 실행 상태 보존 관점에서 입증할 수 있는 가? (P1)
Secondary
- 시스템에 캐시(Cache)가 추가되었을 때, 전체적인 평균 성능은 향상되지만 왜 'Interrupt Jitter'는 더 악화될 수 있는지 물리적 이유를 소통 가능한가?
- 인터럽트 처리 도중 더 높은 우선순위의 신호가 들어왔을 때, 하드웨어가 다시 스택 작업을 하는 'Preemption'의 물리적 오버헤드를 수리적으로 계산할 수 있는 가?
Industry
- 0.1ms 단위의 정밀한 모터 제어가 필요한 임베디드 시스템 설계 시, 최악의 지연 시간(Worst-case Latency)을 제한하기 위한 하드웨어 설정값을 제안할 수 있는 가? (SFIA)
- 테일 체이닝(Tail-chaining) 기능을 켰을 때와 껐을 때, 센서 데이터 수집 주기의 지동(Jitter) 수치 변화를 측정하고 안정성을 기술할 수 있는 가?