[Linux] Network Ring Buffer Size 설정하기

2018. 6. 5. 21:24 - mr.november11

Network Ring Buffer Size 설정하기 

 

Ring Buffer는 네트워크 카드의 버퍼 공간이다. 

 

 

스위치에서 서버로 전달된 패킷은

    - 1차로 네트워크 카드 내 Ring Buffer 에 보관되며

    - 2차로 커널의 Socket RCV Buffer 로 이동한다.

이후에는 User Application의 read 함수를 통해 전달 된다.

 

이러한 이유로  Kernel의 Socket RCV Buffer가 여유가 있더라도

Ring Buffer Size가 작다면 중간 병목(bottleneck)이 발생할 수 있다. 

 

그렇기 때문에 Ring Buffer는 가능하다면 Maximum 값으로 설정해주는 것이 권장된다. 

 

Linux 상에서 NIC의 Ring Buffer(Current, Maximum) 값은 ethtool -g 명령어를 통해 확인 가능하다.

 

아래 interface의 경우 최대 값이 4,096이지만 현재 설정 값은 2,048이다.

[root@server~]# ethtool -g eth2 Ring parameters for eth2: Pre-set maximums: RX:		4096 RX Mini:	0 RX Jumbo:	0 TX:		4096 Current hardware settings: RX:		2048 RX Mini:	0 RX Jumbo:	0 TX:		2048    

'해당 명령어는 ethtool -G 명령어를 통해 설정 가능하다.

ethtool -G eth2 rx 4096 ethtool -G eth2 tx 4096 

 

대부분의 Linux 설정과 같이 명령어는 현재 메모리 상의 값을 변경하기 때문에 재부팅 시에는 이전 값으로 원복된다.

영구적으로 변경하기 위해서는 Network script 내 해당 Interface에 관련 설정 값을 추가해주는 것이 필요하다.

아래와 같이 스크립트 파일 내 ETHTOOL_OPTS 를 추가한 후 해당 설정 값을 입력하면 된다. 

ETHTOOL_OPTS="-G ${DEVICE} rx 4096 ; -G {$DEVICE} tx 4096"

(rx/tx의 최대 값을 확인 후 작성 필요) 

 

[root@server~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2 DEVICE=eth2 ONBOOT=yes USERCTL=no NM_CONTROLLED=no BOOTPROTO=static MASTER=bond0 SLAVE=yes ETHTOOL_OPTS="-G ${DEVICE} rx 4096 ; -G ${DEVICE} tx 4096"

 

다른 카테고리의 글 목록

Linux 카테고리의 포스트를 톺아봅니다