사실 (거짓 진술을 식별하십시오) :
-
80ms 떨어진 두 사이트 사이에 100Mbps 연결이 있습니다.
-
이것은 최대 100Mbps * 0.08 초 = 1,000,000 바이트의 큰 TCP 창 크기에서 이점을 얻을 수있는 긴 연결입니다.
-
두 시스템 모두 Windows Server 2012를 실행하고 있습니다. “수신 창 자동 튜닝 수준”은 두 시스템 모두에서 정상입니다. “창 크기 조정 휴리스틱”은 둘 다 비활성화되어 있습니다.
-
한쪽에서는 “iperf -s”를 실행하고 다른 쪽에서는 “iperf -c”를 실행했습니다. 5Mbps로 전송되었습니다. 나는 다른 방향으로가는 동일한 결과를 얻습니다.
-
양측은 SYN에서 TCP 슬라이딩 윈도우를 지원한다고 광고했다.
-
수신자는 TCP 창 스케일 값이 “shift 없음”(0x000) 인 전체 실행 중에 64,512 바이트 (0xFC00)의 TCP 창 크기를 요청했습니다.
-
네트워크는 더 큰 창 크기를 처리 할 수있었습니다 (아래 시퀀스 다이어그램 참조).
-
수신기는 네트워크 지원보다 창을 작게 유지
-
이 연결은 IPSEC VPN 내에서 발생합니다. 터널 인터페이스의 MTU가 양방향으로 1400 바이트로 줄었습니다.
의문
- 수신기가 왜 창을 작게 유지합니까?
답변 없음
-
네트워크가 고장났다
동일한 네트워크에서 실행되는 Linux 시스템은 TCP 창을 1.5MB로 열고 대역폭의 6 배로 데이터를 전송합니다
-
창 스케일링 휴리스틱이 활성화됩니다
창 스케일링 휴리스틱이 비활성화되어 있습니다 (아래 “netsh 인터페이스 tcp show 휴리스틱”출력 참조).
-
수신 창 자동 조정 레벨이 정상이 아닙니다
수신 창 자동 조정 레벨이 정상입니다 (아래 “netsh interface tcp show global”출력 참조).
-
ESXi 내의 가상 머신에서는 제대로 작동하지 않습니다.
동일한 호스트에서 실행되는 가상 Linux 시스템에서 6 배 더 나은 성능을 얻습니다.
업데이트 2015 년 6 월 12 일 오후 4시 30 분 (PDT)
나는 연결의 한쪽에 리눅스를 두어 테스트를 수정했다. 리눅스가 Windows Server 2012에 데이터를 보낼 때 Windows는 너무 작은 TCP 수신 창 (64,512 바이트)을 제공합니다.
Windows에서 Linux로 데이터를 보낼 때 Linux는 충분히 큰 TCP 수신 창 (1,365,120 바이트)을 제공합니다. 그러나 Windows는 전송을 최대 60,000 바이트로 전송을 제한합니다.
업데이트 2015 년 6 월 13 일 오후 3시 PDT
근본 원인에 더 가까운 단계. 내 설정에서 SO_SNDBUF 또는 SO_RCVBUF가 설정되지 않았습니다 (iperf에 의해). 수신 창을 효과적으로 바인딩하는 송신 및 수신 버퍼입니다. 이러한 값을 지정하지 않으면 Windows Server 2012는 기본값 64kB를 제공합니다. 따라서 질문은 다음과 같습니다.
의문
- 하나를 지정하지 않으면 MSDN에 설명 된대로 긴 지방 파이프를 수용하기 위해 Windows Server 2012가 SO_SNDBUF / SO_RCVBUF를 동적으로 늘리지 않는 이유는 무엇입니까?
무답
-
“netsh winsock show autotuning”이 비활성화되었습니다
사용 가능합니다.
업데이트 2015 년 8 월 24 일 오후 4시 PDT
netsh는 분명히 Set-NetTCPSetting 및 제품군으로 대체되었습니다. Get-NetTCPConnection과 Get-NetTCPConnection을 결합하면 다음과 같은 설정을 제공하는 ‘인터넷’체제에서 작동하고 있음을 알 수 있습니다.
SettingName : Internet
MinRto(ms) : 300
InitialCongestionWindow(MSS) : 4
CongestionProvider : CTCP
CwndRestart : False
DelayedAckTimeout(ms) : 50
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
발신자 TCP 설정
PS C:\Users\acs> netsh interface tcp show global
Querying active state...
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : enabled
Chimney Offload State : disabled
NetDMA State : disabled
Direct Cache Access (DCA) : disabled
Receive Window Auto-Tuning Level : normal
Add-On Congestion Control Provider : none
ECN Capability : enabled
RFC 1323 Timestamps : disabled
Initial RTO : 3000
Receive Segment Coalescing State : enabled
PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics : disabled
Qualifying Destination Threshold : 3
Profile type unknown : normal
Profile type public : normal
Profile type private : normal
Profile type domain : normal
PS C:\Users\acs> Get-NetTCPSetting
SettingName : Automatic
MinRto(ms) :
InitialCongestionWindow(MSS) :
CongestionProvider :
CwndRestart :
DelayedAckTimeout(ms) :
MemoryPressureProtection :
AutoTuningLevelLocal :
AutoTuningLevelGroupPolicy :
AutoTuningLevelEffective :
EcnCapability :
Timestamps :
InitialRto(ms) :
ScalingHeuristics :
DynamicPortRangeStartPort :
DynamicPortRangeNumberOfPorts :
SettingName : Custom
MinRto(ms) : 20
InitialCongestionWindow(MSS) : 4
CongestionProvider : DCTCP
CwndRestart : True
DelayedAckTimeout(ms) : 10
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Compat
MinRto(ms) : 300
InitialCongestionWindow(MSS) : 2
CongestionProvider : Default
CwndRestart : False
DelayedAckTimeout(ms) : 200
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Datacenter
MinRto(ms) : 20
InitialCongestionWindow(MSS) : 4
CongestionProvider : DCTCP
CwndRestart : True
DelayedAckTimeout(ms) : 10
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Internet
MinRto(ms) : 300
InitialCongestionWindow(MSS) : 4
CongestionProvider : CTCP
CwndRestart : False
DelayedAckTimeout(ms) : 50
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
발신자 SYN
No. Time Source Destination Protocol Length Delta Sequence number Acknowledgment number Bytes in flight Calculated window size Info
814 5.036577000 10.10.0.21 10.11.0.1 TCP 66 0.000000000 0 0 64512 49758→5001 [SYN, ECN, CWR] Seq=0 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1
Frame 814: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0
Ethernet II, Src: 00:11:22:33:44:55, Dst: aa:bb:cc:dd:ee:ff
Internet Protocol Version 4, Src: 10.10.0.21 (10.10.0.21), Dst: 10.11.0.1 (10.11.0.1)
Transmission Control Protocol, Src Port: 49758 (49758), Dst Port: 5001 (5001), Seq: 0, Len: 0
Source Port: 49758 (49758)
Destination Port: 5001 (5001)
[Stream index: 73]
[TCP Segment Len: 0]
Sequence number: 0 (relative sequence number)
Acknowledgment number: 0
Header Length: 32 bytes
.... 0000 1100 0010 = Flags: 0x0c2 (SYN, ECN, CWR)
Window size value: 64512
[Calculated window size: 64512]
Checksum: 0x1451 [validation disabled]
Urgent pointer: 0
Options: (12 bytes), Maximum segment size, No-Operation (NOP), Window scale, No-Operation (NOP), No-Operation (NOP), SACK permitted
Maximum segment size: 1460 bytes
No-Operation (NOP)
Window scale: 0 (multiply by 1)
Kind: Window Scale (3)
Length: 3
Shift count: 0
[Multiplier: 1]
No-Operation (NOP)
No-Operation (NOP)
TCP SACK Permitted Option: True
시퀀스 그래프의 발신자 관점
수신자 TCP 설정
PS C:\Users\acs> netsh interface tcp show global
Querying active state...
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : enabled
Chimney Offload State : disabled
NetDMA State : disabled
Direct Cache Access (DCA) : disabled
Receive Window Auto-Tuning Level : normal
Add-On Congestion Control Provider : none
ECN Capability : enabled
RFC 1323 Timestamps : disabled
Initial RTO : 3000
Receive Segment Coalescing State : enabled
PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics : disabled
Qualifying Destination Threshold : 3
Profile type unknown : normal
Profile type public : normal
Profile type private : normal
Profile type domain : normal
PS C:\Users\acs> Get-NetTCPSetting
SettingName : Automatic
MinRto(ms) :
InitialCongestionWindow(MSS) :
CongestionProvider :
CwndRestart :
DelayedAckTimeout(ms) :
MemoryPressureProtection :
AutoTuningLevelLocal :
AutoTuningLevelGroupPolicy :
AutoTuningLevelEffective :
EcnCapability :
Timestamps :
InitialRto(ms) :
ScalingHeuristics :
DynamicPortRangeStartPort :
DynamicPortRangeNumberOfPorts :
SettingName : Custom
MinRto(ms) : 20
InitialCongestionWindow(MSS) : 4
CongestionProvider : DCTCP
CwndRestart : True
DelayedAckTimeout(ms) : 10
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Compat
MinRto(ms) : 300
InitialCongestionWindow(MSS) : 2
CongestionProvider : Default
CwndRestart : False
DelayedAckTimeout(ms) : 200
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Datacenter
MinRto(ms) : 20
InitialCongestionWindow(MSS) : 4
CongestionProvider : DCTCP
CwndRestart : True
DelayedAckTimeout(ms) : 10
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
SettingName : Internet
MinRto(ms) : 300
InitialCongestionWindow(MSS) : 4
CongestionProvider : CTCP
CwndRestart : False
DelayedAckTimeout(ms) : 50
MemoryPressureProtection : Enabled
AutoTuningLevelLocal : Normal
AutoTuningLevelGroupPolicy : NotConfigured
AutoTuningLevelEffective : Local
EcnCapability : Enabled
Timestamps : Disabled
InitialRto(ms) : 3000
ScalingHeuristics : Disabled
DynamicPortRangeStartPort : 49152
DynamicPortRangeNumberOfPorts : 16384
수신기 SYN
No. Time Source Destination Protocol Length Delta Sequence number Acknowledgment number Bytes in flight Calculated window size Info
817 5.110501000 10.11.0.1 10.10.0.21 TCP 70 0.073924000 0 1 64512 5001→49758 [SYN, ACK, ECN] Seq=0 Ack=1 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1 [ETHERNET FRAME CHECK SEQUENCE INCORRECT]
Frame 817: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0
Ethernet II, Src: aa:bb:cc:dd:ee:ff, Dst: 00:11:22:33:44:55
Internet Protocol Version 4, Src: 10.11.0.1 (10.11.0.1), Dst: 10.10.0.21 (10.10.0.21)
Transmission Control Protocol, Src Port: 5001 (5001), Dst Port: 49758 (49758), Seq: 0, Ack: 1, Len: 0
Source Port: 5001 (5001)
Destination Port: 49758 (49758)
[Stream index: 73]
[TCP Segment Len: 0]
Sequence number: 0 (relative sequence number)
Acknowledgment number: 1 (relative ack number)
Header Length: 32 bytes
.... 0000 0101 0010 = Flags: 0x052 (SYN, ACK, ECN)
Window size value: 64512
[Calculated window size: 64512]
Checksum: 0xb5bb [validation disabled]
Urgent pointer: 0
Options: (12 bytes), Maximum segment size, No-Operation (NOP), Window scale, No-Operation (NOP), No-Operation (NOP), SACK permitted
Maximum segment size: 1460 bytes
No-Operation (NOP)
Window scale: 0 (multiply by 1)
Kind: Window Scale (3)
Length: 3
Shift count: 0
[Multiplier: 1]
No-Operation (NOP)
No-Operation (NOP)
TCP SACK Permitted Option: True
[SEQ/ACK analysis]
시퀀스 그래프의 수신기 투시도
TCP 창
답변
나는 이것을 드라이버 특정 문제로 보았다. TCPChimney를 사용하려고 시도한 QLogic 네트워크 컨트롤러의 경우 이 링크는 Windows 2008에 추가 된 TCPChimney 기능에 대해 설명하지만 여전히 적용되는지는 확신합니다. https://support.microsoft.com/en-us/kb/951037
다음을 순서대로 테스트하는 것이 좋습니다. 각 테스트 후에 재부팅하고 수신자가 예상대로 TCP RWIN 증가를 시작하는지 확인하십시오.
1) 수신 컴퓨터에 네트워크 어댑터 용 최신 버전의 드라이버를로드하십시오. 1) 수신 컴퓨터에서 TCPChimney를 비활성화합니다. 2) 모든 ‘TCP Receive’오프로드를 비활성화합니다. 이는 네트워크 어댑터 속성의 고급 설정 (속도 및 이중 모드가 설정되는 영역과 동일)에서 찾을 수 있습니다. 3) 모든 ‘TCP 전송’오프로드 비활성화 (네트워크 어댑터의 고급 속성)
(그리고 65k를 초과하는 큰 TCP 창 크기는 서버에 나쁜 영향을 미치므로 연결에 대한 메모리 요구가 증가합니다. 65k만으로는 충분히 만족하지 못할 수 있습니다. – user303507 Aug 6 ’15 at 11:30 “, 큰 TCP 수신 Windows는 본질적으로 서버에 좋지 않습니다. 위성 릴레이와 같은 고 대역폭, 대기 시간이 긴 링크의 경우 파이프에 더 많은 TCP 데이터가 포함되도록 큰 RWIN 값이 필요합니다. 3000ms의 대기 시간으로 600Mbps 연결, 고 대역폭 링크는 약 20KBps로 제한됩니다. 한 번에 65KB의 비 킹킹 TCP 데이터 만 “파이프에”있을 수 있습니다.)
답변
나에게 Windows 자동 튜닝 버그처럼 보이는가? https://support.microsoft.com/en-us/kb/932170
WskControlSocket을 사용하여 더 큰 SO_RCVBUF 값을 수동으로 요청하려고 했습니까?
답변
Cisco WAAS 또는 Riverbed와 같은 네트워크 최적화 도구를 사용하십시오. 로컬 acks를 빠르게 수행하므로 서버 설정에 신경 쓸 필요가 없습니다. 더 큰 네트워크에서는 다른 팀이거나 아웃소싱되므로 서버 설정에 아무런 영향을 미치지 않습니다.
답변
내가 찾은 몇 가지 정보 는 다음과 같습니다 . 비활성화 모드에 대한 64kb 제한에 대한 언급은 문서화되지 않은 일반 모드에 대한 유사한 제한에 대한 단서 일 수 있습니다.
천문학적 자동 조정 레벨에 대해 “실험”모드를 활성화하십시오.
Windows 자동 조정 레벨을 설정할 때 가능한 설정은 다음과 같습니다.
- normal : 기본값, 대부분의 조건을 수용하도록 수신 창이 커질 수 있습니다.
- 비활성화 됨 : tcp 수신 창에 고정 값을 사용합니다. 64KB로 제한합니다 (65535로 제한).
- 매우 제한적 : 수신 창이 기본값보다 커질 수 있으며 매우 보수적으로
- 제한됨 : tcp 수신 창의 성장이 기본값보다 약간 제한됨
- 실험적 : 극단적 인 시나리오를 수용하기 위해 수신 창을 확장 할 수 있습니다 (권장되지 않음, 일반적인 시나리오에서 성능을 저하시킬 수 있으며 연구 목적으로 만 사용됩니다. 16MB 이상의 RWIN 값 사용)