
리눅스 커널 VFS 락 경합부터 하드웨어 캐시 아키텍처까지, 넷플릭스가 찾아낸 컨테이너 런타임 최적화의 비밀.
이 글은 넷플릭스가 새로운 컨테이너 플랫폼으로 전환하며 겪은 시스템 락 현상의 원인을 하드웨어 수준까지 깊이 파고들어 분석한 기술 리포트입니다. 단순히 소프트웨어 설정의 문제가 아니라, 최신 CPU의 NUMA 및 캐시 구조가 글로벌 락과 만났을 때 발생하는 성능 병목을 실증적인 벤치마크와 함께 설명합니다.
대규모 컨테이너 환경을 운영한다면 이미지 레이어 수를 최적화하고, 특히 보안을 위한 idmap 기능을 사용할 때 하드웨어 특성에 따른 런타임 성능 저하 가능성을 반드시 검토해야 합니다.
넷플릭스가 새로운 컨테이너 런타임(kubelet + containerd)으로 전환하는 과정에서 수많은 레이어를 가진 컨테이너를 대규모로 동시 실행할 때 시스템이 멈추거나 30초 이상의 상태 체크 타임아웃이 발생하는 병목 현상이 발견되었습니다.
리눅스 커널 VFS의 글로벌 락 경합을 원인으로 식별하고, containerd 소스 코드 수정을 통해 각 레이어마다 수행되던 마운트 작업을 부모 디렉토리 기반의 단일 작업(O(n)에서 O(1))으로 최적화했습니다.
글로벌 락 경합을 제거함으로써 CPU 아키텍처와 관계없이 안정적인 스케일링이 가능해졌으며, 기존에 락 경합으로 인해 낭비되던 CPU 리소스를 복구하고 컨테이너 시작 지연 시간을 정상화했습니다.
Trade-off
보안 강화를 위해 컨테이너별 고유 사용자 범위를 사용하는 idmap 기능을 도입했으나, 이것이 역설적으로 커널 마운트 작업의 폭증을 야기하여 성능과 보안 사이의 초기 균형 조정이 필요했습니다.
파일 소유권을 실제로 변경하지 않고도 커널 수준에서 UID/GID를 매핑하여 다른 사용자 네임스페이스에서도 파일을 안전하게 공유할 수 있게 해주는 기능입니다.
멀티 프로세서 시스템에서 각 CPU가 자신의 로컬 메모리에는 빠르게 접근하지만, 다른 CPU의 메모리에는 상호 연결망을 통해 상대적으로 느리게 접근하는 설계 방식입니다.
리눅스 커널의 가상 파일 시스템(VFS)에서 마운트 테이블 변경과 같은 전역적인 작업을 동기화하기 위해 사용하는 락 메커니즘입니다.




