# /etc/sysctl.conf 에 커널 설정값을 명시한다.
# [네트워크]
# 속도 즉 대역폭이 왜 낮을까 해서 찾아보니
# https://www.speedguide.net/faq/what-is-the-bandwidth-delay-product-185
# BDP(Bandwidth Delay Product)는 네트워크에 있는 데이터 총량으로
# BDP = Bandwith * Delay(RTT) 가 되며
# Bandwidth = BDP / Delay 가 된다.
# Delay, 즉 RTT 는 물리적 환경에 따라 고정되는 값이기 때문에,
# 우리가 할 수 있는건 BDP 를 제어하는 것이다.
# BDP 는 결국 네트워크에 존재하는 데이터를 크기로,
# 커널 네트워크관련 read/write buffer 로 조정할 수 있다.
# 현재 커널 네트워크 설정을 확인해보자.
sysctl -a | grep -E "net.core|net.ipv4.tcp"
# /etc/sysctl.conf 내용을 수정해 보자.
# http://man7.org/linux/man-pages/man7/tcp.7.html
# http://www.linuxlab.co.kr/docs/kernel/a2547.html
# https://klaver.it/linux/sysctl.conf
# 네트워크 코어(공통) 설정들
# read(receive), write(send) 최대 버퍼 32MiB 로 설정
# read(receive), write(send) 기본 버퍼 16MiB 로 설정
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
# tcp4 설정들, low / pressure / high 순서로 설정
# tcp read(receive) 버퍼 4KiB 87380Bytes 16MiB
# tcp write(send) 버퍼 4KiB 64KiB 16MiB
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# tcp4 에 사용할 수 있는 메모리 크기로
# 기본적으로 부팅할때 가능한 시스템 메모리양으로 계산되어 되도록이면 그냥 둔다.
# low / pressure / high 로 bytes 가 아닌 page 단위다.
# getconf PAGESIZE 로 페이지 크기를 보면 보통 4096 바이트다.
net.ipv4.tcp_mem = 4096 4096 4096
# receiver windows size 기본 64KiB 인데
# tcp 옵션 헤더로 window scale factor(wsf) 설정하면
# 64KiB * 2^wsf 크기로 window size 를 확장할 수있다.
# https://en.wikipedia.org/wiki/TCP_window_scale_option
# 이를 가능하기 위해선 tcp_window_scaling 을 활성화 해야 한다.
# rfc1323 스펙에 추가된 사항으로 rfc1323 도 활성화 해야 한다.
# 보통 디폴트로 다음과 같이 활성화되어 있다.
net.inet.tcp.rfc1323 = 1
net.ipv4.tcp_window_scaling = 1
# 네트워크 메모리 사용량 확인
netstat -m