13.8.2.1 물리적 메모리 예외(Segfault) 파급 한계 및 리눅스 systemd 프로세스 재기동 의존성
분산 파이프라인(Zenoh-Flow) 위에서 작동하는 모든 플러그인 딥러닝/모션 제어 오퍼레이터 노드들은 궁극적으로 타인의 손(User Custom Code)에 의해 작성된 C++ 및 Python 쪼가리들에 불과하다.
이 쪼가리들이 NULL 포인터를 무단 참조하여 세그먼테이션 폴트(Segmentation Fault)를 터트리거나, Python C-Extension 모듈이 메모리 누수(OOM)를 일으켜 리눅스 OOM-Killer의 유혈 사태를 번지게 쓸 때, 시스템 아키텍트는 데몬 프레임워크의 자가 치유 능력이 뻗칠 수 있는 물리적 권력의 한계점을 명확히 직시해야 한다.
본 절에서는 데몬이 유저 레벨의 하드 크래시(Hard Crash)를 어디까지 어떻게 흡수하는가를 규정하고, 어플리케이션 계층(L7)의 자가 치유 망상을 박살 낸 뒤, 리눅스 커널 프로세스 관리자(systemd)의 절대 무력을 동원한 물리적 예외 파급 방어선(Process Isolation & Recovery) 구축 런북을 갈파한다.
1. 런타임 프레임워크의 무력함과 Segfault 의 파멸적 침투
Zenoh-Flow 러스트 데몬 엔진은 타임아웃(Timeout) 오류나 큐잉(Queue) 오버플로우 같은 “논리적(Logical)” 예외는 완벽하게 캐치하여 찢어발길 수 있다(13.8.1.3장 참조).
그러나 C++ 오퍼레이터 노드가 메모리를 넘어 허공(0x00000000)에 포인터 쓰기를 갈겨 커널이 발작하는 Segfault (SIGSEGV) 가 터지는 순간, 어떠한 소프트웨어적 런타임 제어도 무용지물이 된다.
Zenoh 데몬은 결국 그 폭사한 유저의 C++ 라이브러리(.so) 모듈을 같은 프로세스 물리 주소 공간(Address Space) 위에서 돌리고 있었다.
바이너리 하나가 자신의 배가 갈라진 줄 모르고 메모리 오염 폭탄(Memory Corruption)을 터트리는 순간, 그 여파는 즉시 메인 zenoh-flow-daemon 프로세스의 본진 코어까지 파고들어 전체 데몬을 통째로 추락시켜 버린다. 데몬이 죽었는데 데몬 스스로 재시동을 건다는 것은 성립할 수 없는 자가당착이다!
2. 권력의 이관: OS 레벨 통제자(systemd)와의 결탁
파이프라인 아키텍트는 멍청하게 데몬 프레임워크 내부 스니펫(Snippet)으로 죽은 노드를 살리려는 헛발질을 포기해야 한다.
데몬의 죽음(Crash)은 필연적인 엔트로피다. 죽음을 거부하지 말고 죽음 직후 “가장 폭력적이고 확실한 운영체제 레벨의 부활 마법” 을 설계하는 것이 올바른 이원화(Decoupling) 인프라 통치 철학이다.
그 절대 무력은 로봇 엣지의 리눅스 0번 프로세스, systemd 에 위탁된다.
# [로봇 엣지 장비의 /etc/systemd/system/zenoh-flow-worker.service 위탁 런북]
[Unit]
Description=Zenoh-Flow Hard-Realtime Edge Worker Daemon
After=network.target
[Service]
Type=simple
User=root
# 1. 런타임의 멱살: Zenoh-Flow 데몬 실행 명령어
ExecStart=/opt/zenoh/bin/zenoh-flow-daemon --name robot_edge_01
# 2. 강제 부활(Resurrection)의 결의:
# Segfault(메모리 붕괴)든, OOM-Killer든 비정상적으로 뻗어버리는 즉시!
Restart=always
# 3. 마이크로초 단위의 재착상 속도: 뻗어버린 찰나 단 1초 만에 데몬을 재강제 점화시킨다!
RestartSec=1
[Install]
WantedBy=multi-user.target
3. Death & Re-birth 의 초고속 순환(Micro-cycle) 철학
이 systemd 구속 런북이 설치된 엣지에서, 딥러닝 모듈이 메모리 오류로 대폭발을 일으켜 데몬을 갈기갈기 찢어 버렸다고 하자.
결함 적발에서 재시작까지 불과 1~2초다.
SIGSEGV도달 -> 리눅스 커널 프로세스 킬(Kill).systemd의 감시 트리거 작동 -> 즉시 잔류 메모리 덤프 청소.- 1초 뒤
zenoh-flow-daemon프로세스 완전 신규(Fresh) 재구동.
C++ 코드를 디버깅하겠다며 몇 년을 세월로 낭비할 것인가? 백엔드 분산 엔진은 소프트웨어의 완벽무결함을 믿지 않는다. 바이너리는 언제든 뻗을 수 있다(Embrace Failure)는 체념 하에, 가장 강력한 OS 감시자(systemd, K8s Pod restart)의 재기동 권력을 데몬 프로세스와 용접해 놓음으로써 장애 지속 시간을 1초대로 분쇄한다.
이것이 Segfault 라는 런타임 최악의 범죄를 리눅스 운영체제의 감자칼로 거칠게 벗겨 내버리고 시스템의 영속성을 회복하는 인프라스트럭처 레벨의 예외 파급 한계선(Boundary Limiting) 방어 아키텍처다.