2011-03-28 3 views
4

장비/도구로부터 측정 데이터를 수신하는 일련의 서버 응용 프로그램이 있습니다. 현재 메시지 전송 시간이 주요 병목 지점이므로 프로세스를 개선하기 위해 메시지 전송 시간을 줄이는 데 관심이 있습니다. 도구와 서버 응용 프로그램 간의 통신은 Redhat Linux에서 C++을 사용하여 만든 TCP/IP 소켓을 통해 이루어집니다.대용량 인트라넷 응용 프로그램의 통신에서 네트워크 대기 시간 감소

하드웨어를 사용하거나 TCP/IP 구성 설정을 변경하거나 TCP 커널 기능을 조정하여 메시지 전송 시간을 단축 할 수 있습니까? (통신이 안전한 인트라넷에 있기 때문에 보안을 희생 할 수 있습니다.)

답변

0

가능한 경우 대기 시간을 줄이는 확실한 단계는 TCP에서 UDP로 전환하는 것입니다.

+0

실제로 TCP 종종 UDP보다 더 가속으로 성능을 악화시킬 수 있습니다. 신뢰성이 요구되는지 여부와 밀접하게 관련됩니다. –

+0

측정 데이터이므로 데이터의 2-3 %를 잃어 버리는 것이 좋습니다. RTP (실시간 프로토콜)도 사용할 수 있습니까? – paseena

+0

@ Steve-o :이 가속에 대한 정보가 있습니까? TCP가 주로 UDP보다 무거운 래퍼를 무시하기 때문에 이것이 어떻게 수행 될지 상상할 수 없습니다. @fruit_trader : 별도의 답변으로 RTP에 대해 –

-1

예.

자세한 내용은 Google "TCP 프레임 크기"를 참조하십시오.

+2

좋은 답변은 "이 구문으로 google에 가십시오"이상의 것을 포함합니다. – Olli

5

작업 부하에 따라 소켓 연결에서 Nagle's Algorithm을 비활성화하면 많은 도움이됩니다.

많은 양의 작은 메시지를 처리 ​​할 때 큰 차이가 있음을 발견했습니다.

메모리에서, 나는 C++에 대한 소켓 옵션이 Intel Server NICs을 시도하고 활성화되어 TCP offload Engine (TOE)를 확인 하드웨어 측면에서

+1

Nagle의 알고리즘은 TCP의 중요한 부분이며 기본적으로 언어에 의해 비활성화되는 것은 완전한 분노입니다. 어떤 언어가 이것을 기억하지 못합니까?하지만이 특별한 경우에 TCP_NODELAY가 작업을 수행합니다. +1 –

+0

@Andy PHP라고 생각했지만 약 1 년 전에 작업했던 프로토 타입 코드를 검토하기 위해 다시 돌아가서 옵션이 존재한다는 것을 알았습니다 내가 사용했던 제 3 자 클래스에 의해 꺼졌습니다 - 당시 C++ 소켓이 PHP보다 느린 이유를 조사하기 시작했을 때 그 시간에 선택하지 않았습니다 :) –

1

TCP_NODELAY를 불렀다 믿습니다.

지연 시간과 goodput 사이에 중요한 결정을 내릴 수 있습니다. 양호한 대기 시간을 원할 경우 인터럽트 병합 기간을 줄이는 것이 좋습니다. 구성 가능한 많은 매개 변수를 제공하므로 자세한 내용은 인텔 설명서를 참조하십시오.

2

@ Jerry Coffin이 제안한대로 UDP으로 전환 할 수 있습니다. UDP는 신뢰할 수없는 프로토콜이므로 패킷을 잃어 버리거나 잘못된 순서로 도착하거나 복제 될 수 있습니다. 따라서 애플리케이션 수준에서 이러한 사례를 처리해야합니다. 귀하가 귀하의 의견에 진술 한 바와 같이 일부 데이터는 손실 될 수 있으므로 재전송 필요 없음 (신뢰할 수있는 프로토콜 중 가장 복잡한 부분). 구식 패킷을 삭제하면됩니다. 간단한 시퀀스 번호 매기기를 사용하면 작업이 완료됩니다.

예, RTP (시퀀스 번호 매기기가 있음)를 사용할 수 있지만 필요하지 않습니다. RTP는 간단한 경우에 과도한 것처럼 보입니다. 다른 많은 기능을 가지고 있으며 주로 멀티미디어 스트리밍에 사용됩니다.

[편집]과 비슷한 질문 here

관련 문제