Linux 컴퓨터 사이의 “고지연 네트워크”를 통해 TCP 처리량을 개선하려고합니다.
내가 설정 tcp_mem
, tcp_wmem
및 tcp_rmem
“8192 7,061,504 7,061,504″로 설정합니다.
내가 설정 rmem_max
, wmem_max
, rmem_default
및 wmem_default
“7061504”로.
나는 설정 netdev_max_backlog
및 txqueuelen
10000
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 문제입니다. 해당 문구와 TCP를 Google에 제공하면이 문제와 가능한 해결책에 대한 많은 정보를 찾을 수 있습니다.
이 스레드 에는 이러한 종류의 Linux TCP 스택 조정에 대한 계산 및 제안이 많이 있습니다.
답변
사이트
http://www.psc.edu/networking/projects/tcptune/
요즘 리눅스는 TCP 설정을 자동 조정하기 때문에 값을 엉망으로 만들면 개선되지 않을 것입니다.
즉, 100ms와 큰 대역폭 (최소 790mbps)을 함께 사용하면 엄청난 BDP가 발생할 수 있으므로 자동 튜닝에서 무언가 잘못되었다고 판단 할 수 있습니다.
답변
해당 링크의 대역폭 지연 제품을 실제로 처리하도록 iperf 창 크기를 설정하십시오. 그래서 평균. RTT * 1Gbps는 대략 10MB를 제공해야합니다. 그것이 개선되는지 확인하십시오.
답변
실제로 무슨 일이 일어나고 있는지 이해하기 시작하는 유일한 방법은 더 많은 데이터를 얻는 것입니다. 패키지 sar
에서 시스템 수준보기 (CPU, 메모리, 인터럽트 등)를 얻는 것이 좋습니다 iostat
. 또한 Wireshark 또는 tcpdump를 사용하여 패킷 덤프를 받아야합니다. 그런 다음 Wireshark를 사용하여 많은 도구가 있으므로 분석 할 수 있습니다. 시간에 따른 창 크기, 패킷 손실 등을 그래프로 나타낼 수 있습니다.
대기 시간이 긴 링크에서 약간의 패킷 손실이 발생하더라도 대역폭이 크게 손상되는 경향이 있습니다. 시뮬레이트되고 있지만 약간 이상합니다. 작은 패킷이 많으면 인터럽트가 발생할 수 있습니다 (시뮬레이션 될 수도 있음).
간단히 말해 TCPDump와 Sar를 통해 패킷 수준과 시스템 리소스에서 무슨 일이 일어나고 있는지 확인할 수 있습니다.
답변
이 기계의 메모리 용량은 얼마입니까? tcp_mem
설정을 미친 것 같다, 그것은 전 세계적으로 TCP 데이터를 28기가바이트 (7,061,504 * 4킬로바이트)를 구성. (그러나 이것은 소켓 테스트 실행에서 그 한계에 도달하지 않았기 때문에 성능 문제가 아닙니다. tcp_mem을 tcp_xmem 값으로 설정하면 매우 일반적인 오해가 표시되므로 언급하고 싶었습니다).
기본적으로 구성한 7mb가 정상인 것 같습니다. 그러나 최대 지연 파이프에서는 최대 값이 훨씬 더 높아질 수 있습니다. 테스트를 위해 tcp_wmem
and 의 최대 숫자로 64MB를 사용 tcp_rmem
하면 이것이 제한 요인이라는 것을 배제 할 수 있습니다. (이것은 버퍼를 팽창 시키므로 동시성이 제한적이고 연결에 지터 및 드롭이 낮은 경우에만 작동합니다).