"고지연 네트워크"를 통한 더 나은 TCP 성능


8

Linux 컴퓨터 사이의 "고지연 네트워크"를 통해 TCP 처리량을 개선하려고합니다.

내가 설정 tcp_mem, tcp_wmemtcp_rmem"8192 7,061,504 7,061,504"로 설정합니다.
내가 설정 rmem_max, wmem_max, rmem_defaultwmem_default"7061504"로.
나는 설정 netdev_max_backlogtxqueuelen10000
I 세트 tcp_congestion_control"확장"로 설정합니다.

나는 "nist"(cnistnet)를 사용하여 100ms 지연을 시뮬레이션하고 있으며 도달하는 BW는 약 200mbps입니다 (지연없이 약 790mbps에 도달 함).

iperf를 사용하여 테스트를 수행하고 TCPTrace를 사용하여 결과를 분석하고 있으며 여기에 내가 얻은 것이 있습니다.

수신자 쪽에서 :
max win adv : 5294720 bytes
avg win adv : 5273959 bytes
sack pkts sent : 0

발신자 측 :
실제 데이터 바이트 : 3085179704
rexmt 데이터 바이트 : 9018144
최대 owin : 5294577 바이트
평균 owin : 3317125 바이트
RTT 최소
: 19.2ms RTT 최대 : 218.2ms
RTT 평균 : 98.0ms

왜 200mbps에 도달합니까? 나는 "owin"이 그것과 관련이 있다고 생각하지만 확실하지 않습니다 (이 결과는 2 분의 테스트 결과입니다. 1 분 테스트는 "avg owin"이 1552900입니다)…

지연 시간이 100ms인데도 처리량이 거의 790mbps가 될 것으로 예상하는 것이 잘못입니까?

(창 구성에서 더 큰 숫자를 사용해 보았지만 효과가없는 것 같습니다)


여기에 실제 하드웨어가 있습니다. TCP는 CPU를 가지고, NIC는 자체 버퍼를 가지고, ACPI는 자체 제한이 있습니다.
J-16 SDiZ

답변:


3

이것은 "긴 지방 파이프"라는 일반적인 TCP 문제입니다. 해당 문구와 TCP를 Google에 제공하면이 문제와 가능한 해결책에 대한 많은 정보를 찾을 수 있습니다.

이 스레드 에는 이러한 종류의 Linux TCP 스택 조정에 대한 계산 및 제안이 많이 있습니다.


1

사이트

http://www.psc.edu/networking/projects/tcptune/

요즘 리눅스는 TCP 설정을 자동 조정하기 때문에 값을 엉망으로 만들면 개선되지 않을 것입니다.

즉, 100ms와 큰 대역폭 (최소 790mbps)을 함께 사용하면 엄청난 BDP가 발생할 수 있으므로 자동 튜닝에서 무언가 잘못되었다고 판단 할 수 있습니다.


커널 버전에 따라 자동 조정이 20MB를 훨씬 넘어서는 것을 보았습니다.
pfo

이 같은 외모는 이동했습니다 psc.edu/index.php/networking/641-tcp-tune
dland

0

해당 링크의 대역폭 지연 제품을 실제로 처리하도록 iperf 창 크기를 설정하십시오. 그래서 평균. RTT * 1Gbps는 대략 10MB를 제공해야합니다. 그것이 개선되는지 확인하십시오.


0

실제로 무슨 일이 일어나고 있는지 이해하기 시작하는 유일한 방법은 더 많은 데이터를 얻는 것입니다. 패키지 sar에서 시스템 수준보기 (CPU, 메모리, 인터럽트 등)를 얻는 것이 좋습니다 iostat. 또한 Wireshark 또는 tcpdump를 사용하여 패킷 덤프를 받아야합니다. 그런 다음 Wireshark를 사용하여 많은 도구가 있으므로 분석 할 수 있습니다. 시간에 따른 창 크기, 패킷 손실 등을 그래프로 나타낼 수 있습니다.

대기 시간이 긴 링크에서 약간의 패킷 손실이 발생하더라도 대역폭이 크게 손상되는 경향이 있습니다. 시뮬레이트되고 있지만 약간 이상합니다. 작은 패킷이 많으면 인터럽트가 발생할 수 있습니다 (시뮬레이션 될 수도 있음).

간단히 말해 TCPDump와 Sar를 통해 패킷 수준과 시스템 리소스에서 무슨 일이 일어나고 있는지 확인할 수 있습니다.


0

이 기계의 메모리 용량은 얼마입니까? tcp_mem설정을 미친 것 같다, 그것은 전 세계적으로 TCP 데이터를 28기가바이트 (7,061,504 * 4킬로바이트)를 구성. (그러나 이것은 소켓 테스트 실행에서 그 한계에 도달하지 않았기 때문에 성능 문제가 아닙니다. tcp_mem을 tcp_xmem 값으로 설정하면 매우 일반적인 오해가 표시되므로 언급하고 싶었습니다).

기본적으로 구성한 7mb가 정상인 것 같습니다. 그러나 최대 지연 파이프에서는 최대 값이 훨씬 더 높아질 수 있습니다. 테스트를 위해 tcp_wmemand 의 최대 숫자로 64MB를 사용 tcp_rmem하면 이것이 제한 요인이라는 것을 배제 할 수 있습니다. (이것은 버퍼를 팽창 시키므로 동시성이 제한적이고 연결에 지터 및 드롭이 낮은 경우에만 작동합니다).

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