20.6.3.2 단일 노드 크래시가 유발하는 공유 메모리 버퍼 폭발 및 백프레셔(Backpressure) 역류 파동 분석
파이프라인 매니페스트 타입 불일치(20.6.3.1장 참조) 같은 초보적 검열을 통과하고 위대한 Zenoh-Flow 그래프가 궤도에 올랐다 한들, 악몽은 이제부터 시작이다.
카메라(소스) \rightarrow 사물인식(추론) \rightarrow 모터제어(싱크) 로 이루어진 3단계의 완벽한 파이프라인 안력. 여기서 사물인식 오퍼레이터(Operator) 하나 코드를 잘못 짰거나, 순간 GPU 메모리가 터져 이 녀석 단 한 명만 예외처리 없이 죽어버렸다(Crash) 치자.
초보자들은 “그 노드만 죽고 파이프라인 나머지는 아무 일 없이 돌겠지” 라고 망상한다. 그러나 중앙 통제가 아닌 큐(Queue)와 백프레셔(Backpressure)로 연결된 유기적 데이터플로우 아키텍처 세계관에서, 단일 노드의 침묵(Halt)은 고여있는 피의 웅덩이(Memory Leak)를 부르고, 그 웅덩이의 오염은 상류를 타고 빛의 속도로 역류하여 시스템 전체의 무결점 노드들마저 OOM(Out of Memory)으로 동반 연쇄 멸망시켜 버린다.
본 절에서는 단일 노드의 크래시가 어떻게 메모리 계층을 비참하게 쓸어버리는지 역류 파동의 물리학을 낱낱이 파헤친다.
1. Zero-Copy 파이프라인의 명암: ’해방 연기(Deferred Free)’의 올가미
Zenoh-Flow 이 자랑하는 초점 레이턴시 향상 기술은 공유 메모리 레이어(Zero-Copy) 기반의 텐서 사출이다.
카메라(소스) 노드가 10MB짜리 프레임 메모리(zflow::Data)를 할당하여 send() 하는 순간, 이 메모리 덩어리의 포인터 카운트(Reference Count)는 1이 되며 다운스트림 큐로 들어간다.
정상 궤도: 사물인식(추론) 노드가 이 포인터 주소를 낚아채어 계산 결과를 뽑아내고 return 하면, 프레임워크 엔진이 “이 텐서는 용도를 다했다” 며 레퍼런스 카운트를 0으로 깎고 할당 해제(Garbage Collect) 시킨다. 쾌적한 10MB 의 평화가 돌아온다.
2. 침묵의 타격: 큐 정체(Queue Congestion) 점화와 역류 감염
하지만 사물인식 노드에 버그가 생겨 C++ 스레드가 뱅글뱅글 데드락(Deadlock)에 빠지거나, 코드가 Segfault 직전으로 먹통(Halt)이 되어 캡슐(데이터)을 뽑아 먹지 않고 가만히 냅둔다면 무슨 끔찍한 연쇄 파산이 벌어지는가?
- 하부 큐(Queue)의 포화: 앞단의 카메라 노드는 1초에 60번씩 무자비하게 10MB 텐서 포인터를 쏴댄다. 중간 노드가 일을 안 하니 이 텐서 포인터 캡슐들은 다음 큐(Channel 버퍼)에 층층이 적재되기 시작한다.
- 해방(Free) 원천 봉쇄: 큐에 박혀있으니 레퍼런스 카운트 1은 영원히 유지된다! 시스템의 RAM 은 1초에 600MB씩 지수 단위로 잡아먹히며 독이 고이기 시작한다.
- 상태 천이 역류(Backpressure Wave): 큐 사이즈 제한치(
Size = 50)에 도달하는 그 순간 폭탄이 터진다. 카메라 노드의send()소켓은 다음 큐 공간이 없음을 인지하고 스레드 블로킹(Thread Blocking) 상태의 백프레셔(Backpressure) 타동에 결박 당한다.
3. 동반 연쇄 멸망(Cascading Failure)의 무간지옥
가장 소름 돋는 비극은, 이 장애의 원흉(사물인식 노드)이 아니라 가장 상단에 멀쩡하게 전압을 흘려대던 카메라 하드웨어 인터페이스 데몬 스레드마저 그 역류 타격파(Backpressure)에 맞아 영원한 대기(Block) 묘지로 함께 처박혀버리는 동반 자살극(Cascading Halt) 에 도달한다는 것이다.
결국 파이프라인 상의 모든 스레드 루프가 숨은 멈추고, OS 커널은 고여버린 텐서 메모리의 바다(Out Of Memory)를 견디다 못해 데몬 전체 프로세스를 냅다 죽이는(Kill -9) 처절한 학살로 이 시스템의 마지막을 장식하게 된다.
단 하나의 나약한 연산 노드(Faulty Node)가 뱉어낸 침묵(Halt)이, 공유 메모리(Zero-Copy) 보존의 절대 문법과 배관 큐 통제의 강제 결합(Backpressure)이라는 위대한 구조를 역이용하여, 불과 수 초 만에 인프라 엣지 1만 대의 메모리 우주를 폭발 파동으로 쓸어버리는 메커니즘.
이 얽히고설킨 큐 전파(Propagation) 파멸 모델을 인지하지 못한 채 파이프라인 그래프를 짜는 아키텍트는 언제든 시스템 폭사의 폭탄 스위치를 쥐고 있는 시한폭탄과 다를 바 없다. 이 동반 척살을 피하기 위해서는 큐가 막혔을 때 뒤로 숨구멍을 뚫어 텐서를 무단 방류시켜버리는 극한의 파괴적 런북(20.6.3.3장)이 생명줄로 요구되는 것이다.