피드로 돌아가기
nginx Event Loop — Complete Lifecycle Reference
Dev.toDev.to
Infrastructure

NIC DMA부터 epoll까지, Non-blocking I/O 기반의 고밀도 Event Loop 설계

nginx Event Loop — Complete Lifecycle Reference

kamal namdeo2026년 6월 27일27advanced

Context

전통적인 Thread-per-connection 모델의 메모리 오버헤드와 Context Switching 비용 문제를 해결하기 위한 아키텍처 분석. 수만 개의 동시 연결을 처리하기 위해 CPU 자원 낭비를 최소화하는 효율적인 데이터 흐름 설계가 필요함.

Technical Solution

  • NIC DMA를 통한 CPU 개입 없는 커널 RAM 직접 쓰기로 데이터 전송 효율 극대화
  • 하드웨어 Interrupt(IRQ)와 ISR 기반의 빠른 패킷 처리 및 Socket Recv Buffer로의 데이터 복사
  • epoll_wait 기반의 Event-driven 구조를 채택하여 Ready 상태인 fd만 선택적으로 처리하는 리소스 최적화
  • Worker 프로세스의 Non-blocking I/O 수행을 통해 단일 스레드로 다수 연결을 처리하는 Event Loop 구현
  • Socket Send Buffer의 EAGAIN 상태 처리와 EPOLLOUT 등록을 통한 Slow Client 대응 및 흐름 제어
  • request_context를 활용한 Client fd와 Backend fd의 논리적 매핑으로 상태 유지 및 응답 경로 최적화

- Event Loop 내 Blocking Syscall(동기 파일 I/O, 블로킹 DB 호출) 제거 여부 확인 - OS 레벨의 ulimit -n 설정과 nginx의 worker_connections 값 정합성 검토 - net.core.somaxconn 및 nginx backlog 설정을 통한 Listen Queue 병목 해소 - CPU 집약적 작업의 경우 nginx aio threads와 같은 별도 Thread Pool 오프로딩 적용

원문 읽기