dev.Log

커널파라미터 - 네트워크 버퍼 설정 본문

BACKEND.*/Server

커널파라미터 - 네트워크 버퍼 설정

초코푸딩 2025. 7. 14. 08:54

소켓통신 서버에서 커널파라미터를 튜닝할 일이 있었다.

 

  • net.core.rmem_default: 소켓 생성 시 자동 할당되는 기본 receive buffer 크기.
  • rmem_max: 어플리케이션에서 setsockopt(..., SO_RCVBUF, ...) 호출 시 최대 설정 가능한 값.
  • net.ipv4.tcp_rmem : TCP 수신 버퍼의 자동 조정 범위를 지정. 커널은 네트워크 상태에 따라 이 범위 안에서 TCP 수신 버퍼 크기를 동적으로 조정

 

 

1. net.core.rmem_default

 

  • 설명: 모든 소켓에 기본적으로 적용되는 수신 버퍼(default receive buffer) 크기.
  • 단위: 바이트(Byte)
  • 기본값 : 219024 (126KB)
  • 262144 (256KB)

 

 

2. net.core.rmem_max

 

  • 설명: 어플리케이션이 setsockopt() 함수로 설정할 수 있는 최대 수신 버퍼 크기.
  • 단위: 바이트(Byte)
  • 기본값 예시: 212992
  • 당신의 설정: 4194304 = 4 MB

 

- 적용방법 : /etc/sysctl.conf나 /etc/sysctl.d/*.conf 파일에 추가

net.core.rmem_default = 262144
net.core.rmem_max = 4194304

 

 

 

3. net.ipv4.tcp_rmem

  • 설명: TCP 수신 버퍼의 자동 조정 범위를 지정
    커널은 네트워크 상태에 따라 이 범위 안에서 TCP 수신 버퍼 크기를 동적으로 조정합니다.
  • 단위: 바이트(Byte)
  • 기본값 예시:
    • 4096 = 4 KB → TCP 소켓이 사용할 수 있는 최소 수신 버퍼
    • 87380 = 약 85 KB → 소켓 생성 시 기본 수신 버퍼 크기
    • 6291456 = 6 MB → 커널이 자동으로 확장할 수 있는 최대 수신 버퍼 크기
  • 당신의 설정
    • 8192 = 8 KB
    • 262144 = 256 KB
    • 4194304 = 4 MB

 

<번외 - TCP 수신 버퍼 자동 조정이란?>

TCP 통신중에 네트워크 상황 (RTT, bandwith)에 따라 리눅스 커널이 수신 버퍼 크기를 동적으로 조정한다. 

net.ipv4.tcp_rmem = 4096 87380 6291456


min 4096 (4KB) 커널이 TCP 수신 버퍼에 할당할 수 있는 최소 값
default 87380 (~85KB) 일반적인 상황에서 사용되는 기본 값
max 6291456 (6MB) 커널이 네트워크 상황에 따라 자동 조정할 수 있는 최대 값

 

Q. 자동 조정이 필요한 이유? 

 

  • 네트워크 속도나 지연 시간(RTT)에 따라 더 많은 데이터를 미리 받아놓을 수 있게 하는 게 유리함
  • 메모리를 무한정 쓸 수 없기 때문에 min~max 사이에서 제한을 둠 => 성능과 메모리 효율 사이의 균형을 자동으로 맞춤

 

Comments