PREEMPT_RT 커널, 일반 리눅스 대비 10배 이상 안정적인 지터(Jitter) 성능

by DD
1개월 전
조회수 2

SW PLC 개발을 위해 실시간성(Real-time) 보장이 필수적이며, 이를 위해 PREEMPT_RT 커널을 활용함

스트레스 테스트(Stress Test) 환경에서 PREEMPT_RT 커널은 70µs 미만의 안정적인 지터(Jitter)를 보인 반면, 일반 커널은 650µs까지 치솟음

파일 I/O(File I/O)를 RT 루프 내에서 수행 시 지연 발생, 메모리 버퍼를 활용하여 문제 해결

IRQ Affinity 조정 및 CPU Isolation을 통해 성능 개선 가능성에 대한 논의가 이루어짐

PREEMPT_RT 커널의 실시간성 확보

본 연구는 SW PLC 개발에 필수적인 실시간성(Real-time)을 위해 PREEMPT_RT 커널을 활용하여, 일반 리눅스 커널과의 성능 비교를 수행했다. 특히, 스트레스 테스트(Stress Test) 환경에서 PREEMPT_RT 커널은 70µs 미만의 안정적인 지터(Jitter)를 보였다. 이는 일반 커널의 최대 650µs 지터와 비교하여, 10배 이상 향상된 성능을 나타낸다.

테스트 환경 및 방법론

테스트는 C++로 작성된 태스크(Task)를 10ms 주기로 실행하며, clock_nanosleep 함수를 사용하여 타이밍을 측정했다. 시스템 부하를 가중하기 위해 stress-ng 툴을 사용하여 CPU, I/O, 컨텍스트 스위치(Context Switch) 및 페이지 폴트(Page Fault)를 유발했다. 또한, CPU Governor를 performance 모드로 설정하여 CPU 클럭을 고정했다. 이러한 환경 설정은 최악의 지터(Worst-case Jitter)를 측정하기 위함이다.

파일 I/O(File I/O) 문제점 및 해결

실시간 시스템에서 파일 I/O(File I/O)는 지연을 유발하는 주요 원인 중 하나이다. 본 연구에서는 초기 로깅 방식으로 인해 지연이 발생하여, 메모리 버퍼(Memory Buffer)에 데이터를 기록하는 방식으로 변경했다. 이는 디스크 I/O(Disk I/O)로 인한 지연을 방지하고, 마이크로초(µs) 단위의 정밀한 타이밍 측정을 가능하게 했다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 성능을 향상시켰다.

IRQ Affinity 및 CPU Isolation을 통한 추가 최적화

커뮤니티에서는 IRQ Affinity 조정 및 CPU Isolation을 통해 실시간 성능을 더욱 향상시킬 수 있다는 의견이 제시되었다. IRQ Affinity는 특정 인터럽트(Interrupt)를 특정 CPU 코어에 할당하여, 인터럽트 처리 시간을 단축하는 기술이다. CPU Isolation은 특정 CPU 코어를 다른 프로세스의 간섭 없이 실시간 태스크에 전용으로 할당하는 기술이다. 이러한 기법들을 통해 지터(Jitter)를 더욱 줄일 수 있다.

Measuring Jitter: Standard Linux vs PREEMPT_RT under heavy load