haproxy에 fifo로 데이터가 들어온다면 cpu는 7계층까지 다 열어봐야함
사용자 공간(User space)에 있는 HAProxy 프로세스가 CPU를 사용해서 직접 까서 봄.
HAProxy 프로세스 (user-space 프로그램)recv()로 꺼낸 것)를 HAProxy 프로세스가 직접 파싱함[NIC]
→ [커널 TCP/IP 처리]
→ [sk_receive_queue에 패킷 도착]
→ [HAProxy 프로세스가 recv()로 꺼냄]
→ [HAProxy 내부 코드에서 패킷 파싱 수행]
→ [요청 분기/라우팅 결정]
이 중 **"패킷을 까서 본다"**는 건 다음 시점입니다:
→ 이 데이터를 parse_http_headers(), parse_url(), check_acl() 등의 함수가
→ CPU 연산으로 직접 문자열 검사 / 비교 / 파싱을 수행합니다.
📌 이때 CPU는 7계층 수준의 내용을 모두 "열어서 분석"합니다.
// src/proto_http.c
int http_process_req_common(struct stream *s, struct channel *req, int an_bit, struct proxy *px) {
...
ret = parse_http_headers(s, req);
...
}
이 함수는 다음을 수행합니다:
GET /index.html HTTP/1.1)Host, User-Agent, Authorization)전부 HAProxy가 CPU를 써서 수행
| 항목 | 명령어 |
|---|---|
| HAProxy 프로세스 CPU | top, htop, pidstat -p <pid> |
| syscall 빈도 | strace -p <pid> |
| 7계층 분석비용 | perf top → parse_http_headers, strcmp 등 |
실제로 패킷을 까서(7계층 파싱) 보는 주체는 커널이 아니라 HAProxy 프로세스입니다.
커널은 TCP까지만 다루고,
HAProxy가 CPU로 데이터를 읽고 해석하며 요청 경로, 헤더, 쿠키, 바디 등을 분석합니다.