실시간 리눅스: PREEMPT_RT와 역할 나누기
리눅스도 실시간에 가까워질 수 있지만 MCU와는 다릅니다. 지연 측정 방법과 MCU에 맡길 일을 정하는 기준.
실시간이란
"빠르다"가 아니라 "최악의 경우에도 마감 안에 반응한다"입니다. 평균 10µs여도 가끔 5ms가 걸리면 실시간이 아닙니다.
PREEMPT_RT
커널의 대부분을 선점 가능하게 만들어, 높은 우선순위 실시간 스레드가 커널 작업에 오래 막히지 않게 합니다. 6.12부터 메인라인 커널에 통합되었습니다.
지연 측정
cyclictest -p 90 -t1 -i 1000 -l 100000 -m
부하(stress, 네트워크 트래픽)를 걸고 측정한 최대 지연이 기준입니다. 일반 커널은 수 ms, PREEMPT_RT는 하드웨어에 따라 수십 µs 수준까지 줄어듭니다.
실시간 앱 작성
SCHED_FIFO우선순위 지정mlockall()로 메모리 고정 (페이지 폴트 방지)- 실시간 루프 안에서 동적 할당, 파일 I/O 금지
- CPU 코어 하나를 실시간 작업 전용으로 격리
역할 나누기
| MCU에 맡길 일 | 리눅스에 맡길 일 |
|---|---|
| 10kHz 이상 전류 제어, PWM 생성 | 상위 경로 계획, 영상 처리 |
| 과전류 같은 µs 보호 | UI, 네트워크, 로그 저장 |
| 안전 기능 | 업데이트, 클라우드 연결 |
로봇과 차량에서는 리눅스 SoC와 MCU를 함께 쓰고 UART, SPI, CAN, 공유 메모리(Cortex-A + M 복합 칩의 RPMsg)로 연결하는 구성이 흔합니다.