#zero-copy
글
-
Kafka 소스 파헤치기 8: 읽기 경로 — Fetch 요청, 롱 폴링, 그리고 제로 카피
컨슈머의 poll() 이 보낸 Fetch 요청이 브로커 안에서 KafkaApis.handleFetchRequest() → ReplicaManager.fetchMessages() → UnifiedLog.read() → LogSegment.read() 를 지나 파일의 한 조각(FileRecords)이 되고, 데이터가 모자라면 fetch.max.wait.ms 동안 퍼거토리(DelayedFetch)에서 기다렸다가, 마지막에 FileChannel.transferTo() 로 JVM 을 거치지 않고 소켓으로 나가는 길을 Kafka 4.5.0-SNAPSHOT 소스로 따라갑니다. 증분 fetch 세션, 컨슈머와 팔로워가 같은 Fetch 를 쓰는 이유, TLS 에서 제로 카피가 사라지는 이유를 요청 로그·JMX·JFR 예제로 확인합니다.
-
nginx 소스 파헤치기 10: 필터와 정적 파일 — 응답은 어떻게 흘러 나가나
정적 파일 하나가 응답이 되어 소켓까지 가는 길을 nginx 1.31.9 소스로 따라갑니다. 파일 내용을 읽지 않고 ngx_buf_t 에 "파일의 몇 번째부터 몇 번째"만 적는 static 핸들러, 함수 포인터 두 개로 이어 붙인 헤더·본문 필터 사슬과 그 순서를 정하는 ngx_modules.c, 파일을 메모리로 읽을지 정하는 copy 필터와 ngx_output_chain, 모아 두었다 보내는 write 필터와 writev + sendfile 까지 gdb·strace·디버그 로그로 확인합니다.
-
Apache httpd 소스 파헤치기 11: 필터와 버킷 브리게이드 — 응답은 어떻게 흘러 나가나
핸들러가 만든 응답이 소켓에 닿기까지 httpd 안에서 어떤 모양으로 흐르는지, 소스를 처음 여는 사람 기준으로 따라갑니다. APR-util 의 버킷과 브리게이드(링), 읽을 때 모양이 바뀌는 PIPE·FILE 버킷, 여섯 단계로 줄 서는 필터와 ap_pass_brigade, chunked 인코딩과 sendfile, 그리고 소켓이 가득 찼을 때 코어 출력 필터가 하는 일을 직접 쓴 필터 모듈의 로그로 확인합니다.