Linux Programmer

Linux network tune-up 본문

컴퓨터 관련/리눅스(유닉스) 일반

Linux network tune-up

sunyzero 2010. 5. 14. 18:45

*TCP auto tuning
네트워크 라인 속도가 충분히 빠르다면 TCP 소켓의 버퍼가 클수록 전송속도에서 유리해진다. 그러나 프로그래머가 일일히 네트워크 라인 속도를 체크하여 소켓 버퍼를 조정하도록 프로그래밍 하는 것은 매우 귀찮은 일이다.

따라서 리눅스나 최근 운영체제들은 운영체제에서 전송속도를 감지하여 자동으로 소켓 버퍼의 크기를 늘려주거나 반대로 줄여주어 쓸데없는 메모리 낭비를 막아주는 기능이 도입되었다.

리눅스에서는 이를 TCP auto tuning이라고 하며 Linux 2.4.16 or 2.6.8 이후부터 제공되었다.

TCP auto tuning의 리눅스 커널 설정
항목 설명
net.ipv4.tcp_moderate_rcvbuf    boolean : 0=off, 1=on 수신버퍼에 TCP autotuning을 설정
net.ipv4.tcp_wmem vector of 3 integers 송신 소켓 버퍼의 크기 (min default max값으로 지정)
net.ipv4.tcp_rmem vector of 3 integers 수신 소켓 버퍼의 크기 (min default max값으로 지정)
net.core.wmem_max integer 송신 소켓 버퍼로 지정가능한 최대 메모리 크기
= SO_SNDBUF로 지정가능한 최대값
net.core.rmem_max integer 수신 소켓 버퍼로 지정가능한 최대 메모리 크기
= SO_RCVBUF 로 지정가능한 최대값

이들을 /etc/sysctl.conf 에 등록해두면 매번 부팅때마다 자동으로 설정되도록 할 수 있다. 하지만 이 값을 너무 크게 가져가는 일부 인터넷 문서들은 내용이 틀렸다. 차라리 tuned를 사용하도록 하자. (RedHat이 검증되지 않은 커널 파라메터 문제로 얼마나 골머리를 앓았으면 이런 기능을...)


* net.core.tcp_max_orphans = integer
프로세스에 지정되지 않은 소켓의 최대수


* net.core.netdev_max_backlog = integer
integer : 처리를 위한 장치의 큐 길이(클수록 빠른 클럭에 유리)
e.g. netdev_max_backlog는 패킷 큐 (2.6은 1,000마다 처리)
default value(1000) * 1000 = 1,000,000 (packet/sec)
avg packet size(1500 = MTU)가정할 경우, 초당 패킷 처리량은? = 1,000,000(packet/sec) * 1,500 = 1.5GB


반응형
Comments