우분투에서 낮은 대기 시간 TCP 설정


10

실험실의 Ubuntu에서 실행되는 측정을위한 서버가 있습니다. 그리고 TCP 연결을 통해 데이터를 수신하고 가능한 빨리 회신을 보내야하는 C 프로그램이 있습니다.

구성

  • CPU : 프로세서 2 개 x 코어 4 개-Intel Xeon CPU E5345 @ 2.33GHz
  • 램 : 12GB
  • NIC : 인텔 Corporation 80003ES2LAN 기가비트 이더넷 컨트롤러 / 82546EB 기가비트 이더넷 컨트롤러
  • 네트워크 스위치 : Cisco Catalyst 2960
  • 데이터 정보 : 데이터 블록은 약. 각 10 밀리 초 데이터 블록 크기는 약입니다. 1000 바이트

패킷 수신시 네트워크 대기 시간이 매우 중요합니다 (수십 마이크로 초가 중요 함). 프로그램을 최대로 최적화했지만 Ubuntu를 조정 한 경험이 없습니다.

패킷 처리 / 전송의 로컬 지연을 줄이기 위해 Ubuntu에서 무엇을 구성 할 수 있습니까?


예, 서버의 제조사 / 모델을 알고 싶습니다.
ewwhite

더 깊이 파고 들어야합니다. 고주파 거래를위한 커널 최적화에 대한 내용을 읽어보십시오. Cisco 용지 판매 : cisco.com/c/dam/en/us/products/collateral/switches/… 양쪽에 알맞은 PCI-E 카드를 설치하면 비용도 절약됩니다. 대부분의 경우 (이에 얼마나 많은 시간을 소비하고 있는지에 따라) 적어도 다른 설정으로 커널을 다시 작성하여 우분투에 필요한 많은 것을 제거하지만 필요하지는 않습니다. 따라서 ewwhite가 의견을 작성 했으므로 우분투는 가장 낮은 설정에 완벽하지 않을 수 있습니다.
Dennis Nolte

하드웨어가 나열되면 2008 년 장비 (Intel 5300 시리즈 CPU)입니다. 당시에는 지연 시간이 짧은 특별한 하드웨어 변경이 너무 많지 않았습니다. 시스템 BIOS를 고성능 모드로 실행하고 CPU C- 상태를 비활성화하도록 설정했습니다.
ewwhite

@ewwhite 예, 당신은 2008 년 장비에 대해 맞습니다. 나는 당신의 제안을 시도합니다. 감사합니다!
Alex V

TCP_NODELAY에 대해이 소프트웨어를 조정할 수있는 기능이 있습니까?
Matt

답변:


10

솔직히, 나는 이것을 위해 Ubuntu를 사용하지 않을 것입니다 ...하지만 모든 Linux 변형에 적용 할 수있는 옵션이 있습니다.

네트워크 스택 버퍼를 생성하고 싶을 것입니다 :

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

응용 프로그램이 디스크에 쓰는 경우 스케줄러 / 엘리베이터 변경이 필요할 수 있습니다 (예 : deadline엘리베이터).

서버 수준에서 CPU 조정기와 전원 및 CPU 주파수 관리 (P- 상태, C- 상태)를 수정할 수 있습니다.

OS 수준에서 애플리케이션의 실시간 우선 순위 ( chrt)를 변경하여 인터럽트를 줄이고 최적화하여 CPU 또는 CPU 그룹에 고정 ( taskset)하고 불필요한 서비스 또는 데몬을 중지 할 수 있습니다.

다음에서 몇 가지 제안을 볼 수도 있습니다. 2 개의 Linux 호스트 간 지연 시간 문제 해결 방법

관련된 하드웨어 나 네트워킹 장비를 알지 못하면 더 구체적으로 구하기가 어렵습니다.


3
이것은 실제로 종교 토론에 적합한 장소가 아닙니다. 채팅과 같은 다른 곳으로 가져 가십시오.
Michael Hampton

1
@MichaelHampton 질문과 관련된 토론에 흥미로운 링크가 있습니다 : Red Hat Realtime Tuning Guide .
Alex V

6

고성능 경로를 사용하는 경우 일반적으로 응용 프로그램을 방해 할 수있는 다른 (예약 된) 프로세스를 가능한 한 적게 실행하려고합니다.

Linux는 고전적인 UNIX 운영 체제와 마찬가지로 공정한 방식으로 여러 응용 프로그램을 동시에 실행하도록 설계되었으며 리소스 기아를 방지하려고 시도하며 응용 프로그램을 제외한 그 밖의 모든 것을 굶주리게됩니다. OS 수준의 간단한 단계는 응용 프로그램 의 멋진 수준과 실시간 우선 순위를 변경 하거나 , 스케줄러를 변경 하거나 실시간 커널로 이동하는 것입니다 .

TCP / IP는 일반적으로 연결 끊김을 방지하고 사용 가능한 대역폭을 효율적으로 사용하도록 조정됩니다. 일부 중간 링크가보다 제한적인 연결에서 가능한 최대 대역폭을 얻는 것이 아니라 매우 빠른 링크에서 가능한 가장 낮은 대기 시간을 얻으려면 네트워크 스택의 조정을 조정합니다.

 sysctl -a 

조정할 수있는 커널 설정이 표시됩니다. 설정은 IPv4를 사용하는지 또는 IPv6을 사용하는지 여부와 응용 프로그램에서 이미 정확히 수행하지만 관심있는 대상에 따라 다릅니다.

  • net.ipv4.tcp_window_scaling=1 RFC 1323-64K보다 큰 IPV4 TCP 창 크기 지원-일반적으로 고 대역폭 네트워크에 필요
  • net.ipv4.tcp_reordering=3 패킷 손실을 가정하고 느린 시작으로 가정하지 않고 TCP 패킷 스트림에서 IPV4 패킷을 다시 정렬 할 수있는 최대 횟수입니다.
  • net.ipv4.tcp_low_latency=1높은 처리량보다 낮은 대기 시간을 선호하도록 의도되었습니다. = 1로 설정하면 IPV4 TCP 사전 대기열 처리가 비활성화됩니다.
  • net.ipv4.tcp_sack=0 1로 설정하면 IPV4에 대한 선택적 승인이 활성화되어 tcp_timestamps를 활성화해야하고 패킷 손실이 발생하지 않아도 필요하지 않은 일부 패킷 오버 헤드가 추가됩니다.
  • net.ipv4.tcp_timestamps=0 자루가 필요한 경우에만 권장됩니다.
  • net.ipv4.tcp_fastopen=1 시작 SYN 패킷에서 데이터를 보낼 수 있습니다.

전부는 아니지만 대부분은 커널 소스에 더 잘 설명되어 있습니다.

물론 원시 TCP 소켓을 코딩하고 커널 TCP / IP 스택을 모두 우회 할 수 있습니다.

고도로 튜닝 된 시스템은 신뢰할 수있는 네트워크에서 실행되며 로컬 (iptables) 방화벽이 비활성화됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.