18.1.2.2 제로 카피(Zero-copy) 기반 공유 메모리(Shared Memory) 통신의 성능적 이점
현대적인 소프트웨어 공학에서 “모듈 간의 결합도를 낮추기 위해 미들웨어를 도입한다“는 명제는 자칫 “통신 오버헤드(Overhead)를 감수하겠다“는 말과 동의어로 받아들여지기 쉽다. 범용 운영체제를 타겟으로 하는 미들웨어들은 네트워크 투명성(Network Transparency)을 보장하기 위해 필연적으로 무거운 데이터 패키징 연산을 동반하기 때문이다.
그러나 PX4-Autopilot의 uORB는 이러한 상식을 깨고 제로 카피(Zero-copy) 기반의 공유 메모리 아키텍처를 채택함으로써, 모듈화의 이점을 100% 취하면서도 통신 오버헤드는 사실상 C 언어의 memcpy() 호출 단 한 번 수준으로 압축하는 경이로운 최적화를 달성했다.
1. 데이터 직렬화(Serialization)의 완전 소거
ROS 1(TCPROS)이나 ROS 2(DDS), 혹은 MAVLink와 같이 외부 네트워크 전송을 염두에 둔 프로토콜들은 C/C++ 구조체 메모리를 바이트 스트림(Byte Stream)으로 변환하는 직렬화(Serialization) 과정을 거친다.
- 기존 미들웨어의 오버헤드: 구조체 필드를 하나씩 순회하며 엔디안(Endianness)을 변환하고 포장(Packing)하는 과정은 막대한 CPU 사이클을 낭비시킨다. 수신자 역시 바이트 스트림을 역직렬화(Deserialization)하여 구조체로 복원하기까지 동일한 연산 비용을 지불해야 한다.
- uORB의 철학: PX4의 코어 모듈들은 하나의 마이크로컨트롤러(단일 주소 공간 또는 플랫 메모리 모델) 위에서 동작한다는 사실을 100% 활용한다. uORB는 데이터를 직렬화하지 않는다. 컴파일러가 만들어낸 메모리상의
struct레이아웃 그 자체를 Raw Byte 영역 통째로 공유 메모리에 복사한다.
2. 공유 메모리 기반의 메모리 복사 최소화
일반적인 리눅스 환경에서 프로세스 간 통신(IPC) 파이프나 소켓을 사용하면 데이터는 [User Space] -> [Kernel Space] -> [User Space] 순서로 최소 두 번 이상의 컨텍스트 복사(Context Copy)가 발생한다.
NuttX RTOS 상에 구축된 uORB는 VFS(Virtual File System) 계층을 활용하되, 본질적으로는 전역 커널 메모리 풀(Pool) 내에 위치한 버퍼에 접근하는 방식을 취한다.
- 발행(Publishing): 센서 드라이버 모듈이
orb_publish()를 호출하면, 드라이버가 가진 로컬 레이어의 구조체 메모리 블록이memcpy()명령어 한 번을 통해 uORB 노드의 최신 세대(Generation) 링 버퍼 블록으로 직접 써진다. (단 1번의 Copy) - 구독(Subscribing): 제어기 모듈이 깨어나
orb_copy()를 호출하면, uORB 링 버퍼에 있던 메모리 블록이 제어기 모듈의 로컬 구조체 변수 공간으로 다시memcpy()를 통해 직행한다. (단 1번의 Copy)
만약 데이터 유효성만을 검증하거나 헤더만 읽고 버려도 되는 상황이라면, 아예 데이터를 복사하지 않고 포인터 참조만으로 상태를 확인(orb_check)하는 O(1) 초고속 검증 채널도 제로 카피 철학 덕분에 가능해진다.
3. MHz 임베디드 칩셋의 한계를 돌파하는 마법
Pixhawk 4(STM32F7, 216MHz)나 Pixhawk 6C(STM32H7, 480MHz)와 같은 제한적 클럭 자원 위에서, 드론은 1초에 수백 번 이상 수십 개의 토픽(가속도, 자이로, GPS, 기압, 나침반, 제어기 출력, 모터 믹서 결과 등)을 끊임없이 생산하고 소비해야 한다.
만약 PX4 브로커가 이 데이터를 매번 직렬화하고 네트워크 버퍼를 경유시켜 전달했다면, CPU는 통신 연산만으로 사용률 100%를 찍고 비행 알고리즘을 수행할 여력을 상실했을 것이다. uORB의 완벽한 Zero-copy/Shared-Memory 아키텍처 결단이 있었기에, 오늘날의 경량 드론 MCU 상에서도 인공지능이나 복잡한 비선형 제어(Non-linear Control) 알고리즘을 얹을 수 있는 여유 연산 리소스(Headroom)가 확보될 수 있었던 것이다.