2008-11-11 2 views
13

저수준 HTTP 및 FTP 전송을 구현할 때 최대 처리량을 위해 버퍼 크기 (소켓에서 읽거나 쓰는 바이트)를 선택하는 방법은 무엇입니까? 내 응용 프로그램은 130Kbps에서 3Mbps까지 다양한 연결에서 HTTP 또는 FTP를 사용하여 데이터를 전송해야합니다 (사전에 예상되는 속도를 알고 있습니다). 때로는 편도 이동이고 때로는 양방향으로 진행됩니다. 평균 버퍼 크기를 유지해야합니까 아니면 연결 속도에 따라 달라야합니까?FTP 및 HTTP 전송을위한 버퍼 크기 선택

감사합니다.

답변

6

먼저 약간의 측정을하십시오.

그런 다음 신뢰할 수있는 성능 측정을 수행 한 후에 버퍼 크기를 변경하고 속도 대 버퍼 크기의 그래프를 그립니다.

미리 연결 속도를 알고 있기 때문에 다른 실제 버퍼 크기로 실제 속도를 측정 할 수 있어야합니다.

OS, 프로토콜 스택 및 네트워크가 너무 복잡하기 때문에 첫 번째 원칙에서 답을 얻을 수 없습니다. 당신은 당신이 무엇인가하기 전에 측정 할 필요가 있습니다.

+0

감사합니다. 측정은 우리가 지금하고있는 것입니다. 나는 거기에 몇 가지 일반적인 알고리즘이있을 수 있다고 생각하거나 2x MTU 같은 것을 사용하는 것과 같은 조언을한다. 글쎄, 측정은 그렇다. – wasker

+0

일반 알고리즘이있는 경우 이미 프로토콜의 일부로 구현되었을 것입니다. 구현되지 않은 일반적인 알고리즘은 없습니다. 측정 만이 유일한 선택입니다. –

11

8KB 이상의 버퍼 크기를 선택하십시오. 9000은 일반적으로 가장 빠른 네트워크에서도 사용되는 최대 MTU (최대 전송 단위) 크기입니다.

연결의 MTU보다 큰 버퍼를 사용하면 운영 체제에서 필요에 따라 MTU 크기로 분할하므로 MTU를 통해 사용하는 모든 것이 네트워크 성능에 거의 영향을 미치지 않습니다.

그러나 큰 버퍼를 사용하면 성능에 다른 영향을 줄 수 있습니다. 파일을 전송하는 경우 큰 버퍼를 사용하면 읽기 성능이 향상되어 응용 프로그램의 속도가 향상 될 수 있습니다.

따라서 일반적으로 16KB와 같은 멋진 번호를 선택하는 것이 좋습니다. 확실히 1500 미만으로 가지 마십시오. 네트워크 성능에 부정적인 영향을 줄 수 있습니다 (운영 체제가 네트워크에서 성능을 저하시키는 작은 패킷을 보내는 경우가 있음).

+0

안녕하세요, 귀하의 의견에 감사드립니다. 느린 네트워크 (130 kbps)와 양방향 전송 (대칭 연결이 있다고 가정)에 대해 이야기하면 어떨까요? 큰 버퍼가 다른 방향으로 향하는 방향으로 전송을 방해하지 않을까요? – wasker

+0

이것은 링크의 물리적 특성 (단방향 대 이중)에 따라 다릅니다. 대부분의 이더넷 연결은 양면 통신이므로 동시에 송수신 할 수 있습니다. – SoapBox

+0

또한 일반적으로 네트워크의 정체는 패킷 수 (크기가 아님)로 인해 발생합니다. 많은 작은 패킷은 큰 패킷보다 많은 문제를 일으킬 수 있습니다. – SoapBox