다음을 통해 공유


TCP/IP 성능 개요

참고

이 문서는 3부로 구성된 시리즈에 포함되어 있습니다. 2부: TCP/IP 성능 기본 네트워크 문제3부: TCP/IP 성능 알려진 문제를 검토할 수 있습니다.

TCP/IP(전송 제어 프로토콜/인터넷 프로토콜) 성능은 비교입니다. 하드웨어, 네트워크 경로 및 OS(운영 체제) 측면에서 동일한 엔드포인트를 사용하여 비교를 수행해야 합니다. 여러 요인이 관련되어 병목 현상이 발생할 수 있기 때문에 실제 성능은 다릅니다. 이러한 요소는 종종 기본 네트워크, TCP 설계 및 스토리지 IO의 실제 전송 속도입니다.

성능 튜닝에 대해 자세히 읽어 엔드포인트에 대한 최상의 성능 구성을 설정합니다.

TCP 수신 창 자동 조정 은 긴 대기 시간 네트워크에서 대역폭을 활용하기 위해 연결을 스케일 업하는 데 사용되는 애플리케이션 정의 기능입니다. 예를 들어 TCP가 자동 조정 수준을 정상으로 사용하도록 구성되고 애플리케이션에 TCP 창에 대해 정의된 버퍼가 충분한 경우 OS는 TCP를 최대로 빠르게 확장합니다. 그러나 이 기능은 더 높은 대기 시간 네트워크를 위해 설계되었습니다. 대기 시간이 짧은 네트워크의 경우 즉석에서 많은 세그먼트(예: 네트워크 인프라)가 없기 때문에 이러한 요구 사항은 없습니다.

TCP 창이 한 번에 최대로 조정되지 않는 대기 시간이 긴 네트워크의 경우 CUBIC, NewRenoCompound TCP 와 같은 알고리즘이 있어 BDP(대역폭 지연 제품)를 결정하고 그에 따라 창을 확장합니다. Windows OS는 생성된 각 소켓에 정체 알고리즘을 할당합니다.

TCP 설정은 Windows 10 미리 정의됩니다. Get-NetTCPSettings cmdlet을 사용하여 TCP 설정을 가져와 Get-NetTCPConnection cmdlet을 사용하여 로컬 또는 원격 IP 주소, 로컬 또는 원격 포트 및 연결 상태와 같은 TCP 연결 속성을 볼 수 있습니다.

처리량을 향상시키기 위한 팁은 다음과 같습니다.

  • 기본 네트워크 문제(패킷 손실)가 없는지 확인합니다.
  • 기본 네트워크 호환성 문제가 있거나 문제 해결 목적으로 발생하는 경우를 제외하고 성능 기능(예: Jumbo 프레임, RSS/VMQ, 오프로드 기능 및 RSC)에 대해 NIC의 고급 속성을 사용하도록 설정합니다.
  • TCP가 자동 조정 수준을 정상으로 사용하도록 구성되어 있는지 확인합니다.
  • 성능 모니터 분석을 사용하여 CPU 또는 스토리지 병목 상태가 없는지 확인합니다.
  • 실제 조직의 요구 사항에 따라 보안 기능을 선택합니다.
  • 기준을 만듭니다.

TCP 처리량에 대한 테스트 도구

특정 하드웨어에 대해 가능한 가장 높은 처리량을 달성하려면 성능 요소를 조정해야 합니다. 기본 네트워크 문제(패킷 손실)가 없는지 확인합니다. NTttcp.exe 또는 ctsTraffic.exe 도구를 사용하여 처리량을 테스트합니다. 네트워크 워크로드에 대한 성능 도구를 참조하세요.

TCP 처리량에 대한 병목 현상

TCP 처리량 테스트 중에 네트워크 모니터를 사용하거나 네트워크 패킷 수준 로그를 사용하지 마세요. NDIS(네트워크 드라이버 인터페이스 사양) 모니터링 필터는 패킷이 기록될 때마다 보낸 사람 및 수신자에 대한 지연을 추가합니다. 이 작업은 CPU 리소스를 요구하고 많은 스토리지 IO를 생성합니다. TCP가 패킷 손실에서 복구하려고 하므로 패킷 수준 로그를 사용할 때 성능이 저하됩니다.

보안을 추가하면 자체 비용 및 성능 문제가 있습니다. IPsec(인터넷 프로토콜 보안)과 같은 보안 프로토콜에는 오버헤드 및 추가 처리 요구 사항이 있습니다. 데이터 보호와 데이터 무결성을 비교하면 처리 비용을 절감하기 위해 IPsec의 무결성 모드를 선호해야 합니다. 보안 소프트웨어는 패킷 처리에 막대한 비용이 들기 때문에 출력 속도가 느려집니다.

테스트된 성능이 기대에 부합하지 않는 경우 네트워크 관련 성능 카운터에 정의된 대로 로그를 사용합니다.

TCP 성능 문제를 확인한 후 파일 시스템 프로토콜(SMB(서버 메시지 블록) 또는 NFS(네트워크 파일 시스템))와 같은 상위 계층 관련 프로토콜을 검사. 이러한 프로토콜에는 프로세서 리소스 및 디스크 IO가 필요합니다. 느린 속도는 결함이 있는 드라이버 또는 하드웨어, 높은 DPC(지연 프로시저 호출) 큐 또는/및 느린 디스크 IO로 인해 발생합니다. OS에서 높은 DPC를 유발하는 구성 요소를 찾는 것은 Xperf/WPR(Windows Performance Recorder) 로깅을 사용하여 분석해야 하기 때문에 어렵습니다. 디스크 관련 속도 저하 문제를 찾는 것이 비교적 쉽습니다. 자세한 내용은 디스크 성능 검사 및 튜닝을 참조하세요.

테스트 중에 테스트 애플리케이션(클라이언트 및 서버 애플리케이션)을 조정하여 최대 처리량에 도달할 수 있을 만큼 높은 버퍼 값이 있는 여러 스레드를 사용할 수 있습니다. 그러나 각 API 호출이 활용할 수 있는 스레드 및 버퍼의 수는 프로그래밍에 따라 제한되므로 실제 조건을 반영하지 않을 수 있습니다. 또한 애플리케이션 계층 프로토콜(SMB 또는 CIFS(일반 인터넷 파일 시스템))에는 자체 버퍼 및 최적화(파일 서버 또는 SMB에 대한 성능 튜닝: 문제 해결 가이드)가 있습니다. 애플리케이션이 기준에 대해 예상대로 작동하지 않는 경우 애플리케이션 전문가와 협력하여 병목 상태를 찾습니다.

기준을 만드는 방법

현재 처리량을 비교하려면 성능 기준을 만들어야 합니다. 네트워크를 더 잘 이해하려면 배포 시작 부분에 기준을 만듭니다.

기준선은 다음과 같은 주요 지점에 의해 형성됩니다.

  • 원본 및 대상 네트워크
  • 이러한 네트워크 간의 대기 시간 및 홉 수
  • 프로세서/인터페이스 기능 및 구성
  • 테스트의 시간 프레임(작업 시간/비근무 시간/피크 시간)
  • OS 버전
  • 처리량 끌어오기 및 처리량 푸시

참고

동일한 서버 모델(동일한 수의 NIC 카드 및 프로세서 용량)을 사용하여 기준을 만들어 처리 능력을 거의 동일하게 유지합니다.

버퍼를 보고 테스트 도구에서 만든 전송 세션 수를 추적합니다. 4개의 동시 TCP 전송 세션은 RSS를 사용하도록 설정된 상태에서 CPU 사용률을 균등하게 평가할 수 있습니다.

처리량을 측정하고 기준을 만드는 단계는 다음과 같습니다.

  1. ctsTraffic 도구를 다운로드합니다. 다음은 ctsTraffic 도구의 일부 매개 변수에 대한 설명입니다.

    매개 변수 설명
    -listen:<IP/*> 이 옵션은 서버에서 수신 대기하는 포트에 사용됩니다. 가 지정된 경우 * ctsTraffic 도구는 해당 컴퓨터에서 사용할 수 있는 모든 IP 주소에서 수신 대기합니다. 예를 들면 -listen:*와 같습니다.
    -target:<IP> 이 옵션은 클라이언트에서 사용되며 ctsTraffic.exe 실행 중이며 수신 대기 상태에 있는 서버의 IP 주소를 지정합니다. 예를 들면 -target:192.168.1.10와 같습니다.
    -pattern:pull CtsTraffic 도구는 기본적으로 푸시 패턴을 사용합니다. 즉, 데이터가 클라이언트에서 서버로 전송됩니다. 이 스위치를 클라이언트와 서버 모두에서 사용하면 클라이언트에서 데이터가 수신됩니다. 푸시 테스트를 수행할 때는 이 옵션을 사용하지 마세요.
    -connections:<num> 이 옵션은 TCP 연결 수를 지정합니다. TCP 소켓은 클라이언트에서 동시에 만들어집니다. 중급 네트워크 카드의 RSS 큐는 8이므로 일반적으로 8이 사용됩니다. 예를 들면 -connections:8와 같습니다.
    -iterations:<num> 이 옵션은 에 -connections:곱한 연결 수를 지정합니다. 예를 들면 -iterations:10와 같습니다. 10번의 반복을 통해 클라이언트는 총 80개의 연결을 시도합니다. 이 옵션을 지정하지 않으면 클라이언트는 1000개 연결까지 8개의 연결을 계속 시도합니다.
    -statusfilename:<filename.csc> 이 옵션을 사용하여 콘솔 수준 1 옵션을 Microsoft Excel과 호환되는 .txt 파일로 플러시합니다.
    -connectionfilename:<filename.csv> 자세한 정보를 플러시하려면 이 옵션을 사용합니다. 예를 들어 각 소켓이 데이터를 전송하는 데 걸린 시간과 같은 소켓 수준 정보입니다. 이 옵션을 사용하여 오류 또는 고급 문제 해결이 있는지 검사 수 있습니다.
    -consoleverbosity:<0|1|2|3> 이 옵션은 테스트가 실행되는 동안 모니터의 뷰 또는 출력을 지정합니다. 예를 들면 -consoleverbosity:1와 같습니다.
  2. 수신 쪽에서 리소스 모니터를 엽니다. 예를 들어 를 사용하는 -pattern:pull경우 클라이언트에서 엽니다. 그렇지 않으면 서버에서 엽니다.

  3. 서버에서 ctsTraffic 도구를 시작하고 다음 명령을 실행합니다.

    Ctstraffic.exe -listen:* -consoleverbosity:1 <-pattern:pull>
    

    서버 쪽에서 ctsTraffic 명령을 실행합니다.

  4. 클라이언트에서 ctsTraffic 도구를 시작하고 다음 명령을 실행합니다.

    Ctstraffic.exe -target:<serverip> -consoleverbosity:1 <-pattern:pull> -connections:8 -iterations:10
    

    클라이언트 쪽에서 ctsTraffic 명령을 실행합니다.

  5. 수신 측의 프로세서가 균등하게 활용되는지 확인합니다. 그렇지 않은 경우 RSS와 관련된 문제를 검사 예상대로 작동하지 않는 문제를 확인합니다.

    수신 측의 cpu 사용량에 대한 세부 정보입니다.

  6. 클라이언트의 결과에 따라 처리량을 비트/초 단위로 계산합니다. 다음 스크린샷의 예제를 참조하세요.

    클라이언트 쪽의 ctsTraffic 명령 결과입니다.

    이 예제에서 처리량은 거의 19Gb/s이며 다음과 같이 계산됩니다.

    (85,899,349,200바이트/36.678초) * 8 = 18,735,885,097.33355(비트/초)

다음 단계