그라운드 임베디드 유튜브 구독

노트 / 임베디드 리눅스

실시간 리눅스: PREEMPT_RT와 역할 나누기

리눅스도 실시간에 가까워질 수 있지만 MCU와는 다릅니다. 지연 측정 방법과 MCU에 맡길 일을 정하는 기준.

GROUND EMBEDDED · 정리 노트임베디드 리눅스 08실시간 리눅스 1cyclictest -p 90 -t1 -i 1000 -l 100000 …

실시간이란

"빠르다"가 아니라 "최악의 경우에도 마감 안에 반응한다"입니다. 평균 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)로 연결하는 구성이 흔합니다.