피드로 돌아가기
fork() + exec()를 넘어
GeekNewsGeekNews
Infrastructure

fork() + exec()를 넘어

fork()+exec() 오버헤드 제거를 위한 Spawn Templates 및 pidfd 기반 프로세스 생성 설계

xguru2026년 6월 7일15advanced

Context

전통적인 Unix 프로세스 생성 모델인 fork() + exec() 패턴은 자식 프로세스를 위해 페이지 테이블과 VMA 등 프로세스 상태를 복제한 뒤 즉시 폐기하는 구조적 비효율을 내포함. 특히 대규모 메모리를 사용하는 Redis와 같은 애플리케이션에서는 Copy-on-Write(CoW) 적용 후에도 페이지 테이블 복사 비용으로 인해 상당한 지연 시간이 발생함.

Technical Solution

  • spawn_template_create()를 통한 실행 파일 정보의 커널 내 사전 캐싱 구조 설계
  • 템플릿 파일 디스크립터(fd) 기반으로 중복되는 실행 파일 로드 비용을 제거한 가속 경로 구축
  • spawn_template_spawn_args 구조체를 통해 인수, 환경 변수, 파일 디스크립터 조작 등 실행 시점의 가변 설정을 분리하여 전달
  • 기존 fork()의 메모리 복제 단계를 생략하고 'Pristine Process'를 생성하는 pidfd_open() 및 pidfd_config() 기반의 Builder API 지향
  • 사용자 공간의 posix_spawn() 구현을 네이티브 커널 수준으로 최적화하여 불필요한 중간 상태 생성 억제

- 반복적인 외부 바이너리 실행이 필요한 경우 libgit2와 같은 라이브러리 형태의 통합 검토 - 대규모 메모리 점유 프로세스에서 fork() 호출 시 페이지 테이블 복사로 인한 STW(Stop-The-World) 가능성 체크 - posix_spawn() 등 fork()를 대체하는 현대적 프로세스 생성 API의 네이티브 지원 여부 확인

원문 읽기