Windows Server 2008 환경의 Socket 통신을 이용한 Local File Copy시에 성능이슈가 발생할 수 있다. 정리되지 않은 기술

Windows 7이나 Windows Server 2008에서는 새로운 TCP/IP 특성으로 TCP Receive Window Auto-Tuning 지원한다. Auto tuning level로써 제공하는 여러 수준이 존재하는 , 하나가 experimental 이라는 level이다. 문서 Mail flow to certain domains does not work when you run Exchange Server 2007 on a Windows Server 2008-based computer http://support.microsoft.com/kb/951291/en-us 에서 언급한 것처럼, experimental 옵션은 Enable the receive window to grow to accommodate extreme scenarios기능으로 “Experimental setting can significantly decrease performance in typical scenarios. This setting should be used only for research purposes” Performance impact 있는 수준이다. 그러므로, 정상적인 운영환경에서는 고려되기 어려운 level이다. 이것이 의미하는 , 시스템의 환경 auto tuning level 따라서 TCP/IP 사용하는 Network 애플리케이션은 여러가지 Performance impact 받을 수도 있다는 것이다.

최근에
접한 문제는 사용자 환경이 auto-tuning level experimental이고, Local File Copy 목적으로하는 Socket 애플리케이션에서 극심한 성능이슈가 발생하는 문제였다. 경우에 간단하게 netsh interface tcp set global autotuninglevel=disable 통해서 문제를 해결할 있으나, 일일이 해당 시스템을 체크하여 변경하는 것은 애플리케이션 입장에서 보면 어려울 있다. 경우에 Receive Server Socket쪽에 아래와 같은 코드를 추가함으로써 문제를 피해갈 있다.

 

WSA_COMPATIBILITY_MODE mode;
 char dummy[4];
  DWORD ret_dummy;

 mode.BehaviorId = WsaBehaviorAll ;
 mode.TargetOsVersion = NTDDI_WIN7 ; // win7 target
 
 if (WSAIoctl(listen_sock, SIO_SET_COMPATIBILITY_MODE,
  (char *)&mode, sizeof(mode), dummy, 4, &ret_dummy, 0, NULL)
== SOCKET_ERROR)
 {
      int err = WSAGetLastError();
      printf("WSAIoctl error: %d", err) ;
 };

 

관련해서는 다음의 문서를 참조하는 것이 좋겠다.

-       SIO_SET_COMPATIBILITY_MODE control code

-       Using the Windows Headers


덧글

  • killy 2011/12/07 17:15 # 답글

    좋은 정보 감사합니다. 잘읽었습니다.
댓글 입력 영역