2007/06/05

Solaris 10 network Tuning Parameters(수신 시스템)

수신시 packet loss가 발생하는 이유는 대개

  1. 수신자가 충분한 버퍼를 가지고 있지 못하거나,
  2. 수신측의 인터럽트가 CPU에 의해서 충분히 잘 처리되지 않거나,
  3. 수신측에서 수신 큐에 도착한 데이타를 페치하는 과정에서 딜레이가 있거나 하는 경우입니다.

위의 기준으로 봤을때 튜닝의 요소는 다음 세가지에 해당합니다.

1) 충분한 버퍼를 확보하기 위해서
tcp_conn_req_max_q ; Anonymous access에 대한 Queue를 늘립니다.
tcp_conn_req_max_q0 ; DoS 가 아닌 접속 요청에 대한 큐를 늘립니다.
tcp_max_buf ; 이 값이 대표적으로 중요합니다.
tcp_time_wait_interval ; 접속이 끝난후 안정 종료하는데 걸리는 시간입니다. 이값이 길면 다음 접속이 어렵습니다. 이 값이 해당이 있는 지는 잘 모르겠습니다. 매 송신시 별도 접속을 하는 경우에만 사용하세요.
tcp_recv_hiwat ; 주로 수신을 받아야 하는 경우 중요합니다. ftp client 등
tcp_xmit_hiwat ; 수신과 함께 송신이 많은 경우 필요 합니다. 주로 서버의 경우.

를 조정할 필요가 있습니다.

조정의 예)
#ndd /dev/tcp tcp_conn_req_max_q 2048
#ndd /dev/tcp tcp_conn_req_max_q0 2048
#ndd /dev/tcp tcp_time_wait_interval 3000
#ndd /dev/tcp tcp_recv_hiwat 1048576
#ndd /dev/tcp tcp_xmit_hiwat 1048576
#ndd /dev/tcp tcp_max_buf 1048576


2) CPU interrupt 처리를 잘 하기 위해서는
set ip:ip_squeue_fanout=1 ; 여러 cpu를 활용합니다. set ip:tcp_squeue_wput=1  ; NIC 개수보다 CPU 개수가 훨씬 많으면 설정하는 것이 좋습니다.(option)

3) 패킷 처리 지연시간을 기본에서 0ms로 줄이려면 필요합니다. set ip:ip_squeue_wait=0 ; steam queue에서 packet drain시 지연 시간을 줄입니다.
하나씩 적용해서 테스트해보시려면 2) -> 1) -> 3)순으로 테스트하시고, 3번은 앞에까지 했는데 효과가 없는 경우에만 사용하세요.

썬의 나이아가라 시스템(일명 CMT)을 위한 튜닝을 하는 것이라면 2)번을 설정하는 것이 매우 중요합니다.

2), 3)은 /etc/system 에 변경사항을 추가해야 하며, 1)은 live로 파라메터를 변경할 수 있는 항목이므로 script화 하거나 SMF화 해서 사용하는 것이 좋습니다. 수시로 값을 변경해서 테스트할 수 있겠죠. /etc/system에 적용하는 것도 여전히 사용은 됩니다.