22.3.2 이벤트 구동형 이그제큐터 도입 시 스레드 컨텍스트 스위칭 오버헤드 감소 모델
ROS2 프레임워크에서 이그제큐터(Executor)는 노드(Node) 내부에 정의된 타이머(Timer), 서브스크립션(Subscription), 서비스 서버(Service Server), 그리고 액션 서버(Action Server) 등의 비동기 콜백(Callback)을 스레드 풀(Thread Pool)에 할당하고 실행 흐름을 제어하는 핵심적인 스케줄링 엔진이다. ROS2 Jazzy Jalisco 배포판에서는 기존의 폴링(Polling) 기반 이그제큐터 구조에서 발생하는 누적 지연(Latency) 문제를 극복하기 위해 이벤트 구동형 이그제큐터(Event-driven Executor) 아키텍처가 전면적으로 도입 및 최적화되었다. 이는 자율 드론과 같이 고주파수의 센서 데이터를 결정론적(Deterministic)으로 실시간 처리해야 하는 메타 시스템에서 컨텍스트 스위칭(Context Switching) 오버헤드를 극적으로 감소시킨다.
1. 기존 폴링(Polling) 기반 스케줄링 패러다임의 한계
Humble Hawksbill 및 하위 배포판의 기본 이그제큐터 모델(단일 스레드 및 다중 스레드 이그제큐터)은 rcl 및 rmw 레이어의 대기 셋(Wait Set) 메커니즘을 기반으로 폴링(Polling) 로직을 수행한다. 이 구조에서는 이그제큐터가 실행 가능한 콜백을 찾기 위해 다음과 같은 순차적 연산을 매 주기마다 반복한다.
- 활성화된 모든 노드의 콜백 엔티티(Entity)를 수집하여 대기 셋을 재구성한다.
- 미들웨어 계층(RMW)을 호출하여 네트워크 혹은 OS 커널로부터 이벤트 도착 여부를 블로킹(Blocking) 방식으로 검사한다.
- 데이터가 수신되었거나 타이머가 만료된 콜백을 분류하여 실행 큐(Ready Queue)에 삽입한다.
- 스레드를 할당하여 콜백 본문을 실행한다.
이러한 로직은 노드와 콜백의 개수가 적은 시스템에서는 안정적으로 동작하나, 자율 에이전트 드론과 같이 수 백 개의 콜백 그룹(Callback Group)이 동적으로 스폰(Spawn)되는 환경에서는 심각한 병목을 유발한다. 시스템 내의 타이머나 네트워크 이벤트가 없더라도 CPU 클럭을 소모하며 지속적인 폴링을 수행해야 하므로 낭비적인 컨텍스트 스위칭이 빈번하게 발생하며, 대기 셋 재구성 과정 자체에 소모되는 CPU 시간(CPU time)이 실제 데이터 처리 시간을 상회하는 오버헤드 역전 현상을 초래한다.
2. 이벤트 구동형(Event-driven) 콜백 할당 모델의 수학적/구조적 우위
Jazzy Jalisco 배포판에 도입된 이벤트 구동형 이그제큐터(Event-driven Executor, 릴리스 버전 호환 API 지원)는 폴링 로직을 근본적으로 제거하고, 데이터 통지(Data Notification)가 발생한 시점에 한하여 트리거(Trigger)되는 구조를 채택하고 있다.
이 모델은 관찰자 패턴(Observer Pattern)과 콜백 기반의 비동기 I/O 원리(예: Linux 플랫폼의 epoll, POSIX 시그널 방식)를 활용한다. 특정 서브스크립션 채널에 메시지가 수신되었을 때, RMW 계층이 직접 이그제큐터의 이벤트 큐(Event Queue)에 식별자를 비동기적으로 삽입(Push)한다. 이에 따라 어플리케이션 계층 스케줄러는 대기 셋을 주기적으로 재생성할 필요가 없으며, 이벤트 큐에 데이터 알림이 존재하는 경우에만 즉각적으로 스레드를 깨워(Wake-up) 할당한다.
시스템의 컨텍스트 스위칭 횟수를 수학적으로 모델링할 때, 기존 폴링 방식에서는 시간 함수 O(N) (N은 전체 등록된 시스템 콜백의 수)에 비례하여 검색 오버헤드가 발생하지만, 이벤트 구동형 모델에서는 실행해야 할 이벤트 개수 상수 O(k) (k는 실제 활성화된 트리거의 수)에만 의존적인 최적의 복잡도를 달성한다. 즉 N \gg k인 대규모 로보틱스 그래프 환경에서 CPU 스레드가 불필요하게 선점(Preemption)당하거나 교체(Switching)되는 오버헤드가 기하급수적으로 감소한다.
3. 자율 임무 수행에서의 실시간성(Real-time) 한계 확장
컨텍스트 스위칭 횟수의 감소는 자율 에이전트 드론의 제어 루프 지터(Jitter) 억제에 직접적으로 기여한다. 비행 제어 노드(Flight Control Node)와 IMU 자세 예측 노드가 200Hz ~ 400Hz의 고주파로 상호작용하는 환경에서, 이벤트 구동형 이그제큐터는 CPU L1/L2 캐시 적중률(Cache Hit Ratio)의 하락을 방지하고 스레드 지역성(Thread Locality)을 보존한다. 결과적으로 운영체제의 스케줄러가 데드라인을 위반(Deadline Miss)하는 확률을 낮추며, C++20 코루틴(Coroutines) 및 비동기 API 생태계와 결합하여 고도의 결정론적 실시간(Deterministic Real-time) 인프라를 실현한다.