다음을 통해 공유


수정 버전 1: 명백한 정리

이 버전의 예제 프로그램에서는 성능 향상에 초기 단계를 수행하는 몇 가지 명백한 변경이 수행되었습니다. 이 버전의 코드는 성능 조정과는 거리가 멀지만 증분 방식으로 더 나은 접근 방식의 효과를 검사할 수 있는 좋은 증분 단계입니다.

경고

이 애플리케이션 예제에서는 코드 변경으로 가능한 성능 향상을 설명하기 위해 의도적으로 성능이 저하됩니다. 애플리케이션에서 이 코드 샘플을 사용하지 마세요. 설명 용도로만 사용됩니다.

 

#include <windows.h>

BYTE Set(row, col, bAlive)
{
    SOCKET s = socket(...);
    BYTE byRet = 0;
    BYTE tmp[3];
    tmp[0] = (BYTE)row;
    tmp[1] = (BYTE)col;
    tmp[2] = (BYTE)bAlive;
    bind( s, ... );
    connect( s, ... );
    send( s, &tmp, 3 );
    recv( s, &byRet, 1 );
    closesocket( s );
    return byRet;
}

이 버전의 변경 내용

이 버전은 다음과 같은 변경 내용을 반영합니다.

  • SNDBUF=0이 제거되었습니다. 버퍼링되지 않은 송신 및 지연된 승인으로 인한 200밀리초 지연이 제거됩니다.
  • Send-Send-Receive 동작이 제거되었습니다. 이 변경으로 인해 Nagle 및 지연된 ACK 상호 작용으로 인해 200밀리초의 지연이 제거됩니다.
  • little-endian 가정을 제거했습니다. 이제 바이트가 순서대로 표시됩니다.

나머지 문제

이 버전에서는 다음과 같은 문제가 남아 있습니다.

  • 애플리케이션은 여전히 많이 연결됩니다. 600밀리초 이상의 지연이 제거되었으므로 애플리케이션은 이제 초당 12개의 연결 지속 속도에 도달합니다. 이제 많은 동시 연결이 문제가 됩니다.
  • 응용 프로그램은 여전히 지방; 변경되지 않은 셀은 여전히 서버로 전파됩니다.
  • 애플리케이션은 여전히 스트리밍이 좋지 않습니다. 3 바이트 전송은 여전히 작은 송신입니다.
  • 이제 애플리케이션은 직접 연결된 이더넷에서 4KB/s와 같은 2바이트/RTT를 보냅니다. 너무 빠르지는 않지만 TIME-WAIT가 먼저 문제를 일으킬 수 있습니다.
  • 오버헤드는 99.3%로 낮아지는데, 이는 여전히 좋은 오버헤드 백분율이 아닙니다.

주요 성능 메트릭

다음 주요 성능 메트릭은 RTT(왕복 시간), Goodput 및 프로토콜 오버헤드로 표현됩니다. 이러한 용어에 대한 설명은 네트워크 용어 항목을 참조하세요.

이 버전은 다음과 같은 성능 메트릭을 반영합니다.

  • 셀 시간— 2×RTT
  • Goodput — 2바이트/RTT
  • 프로토콜 오버헤드 — 99.3%

느린 애플리케이션 개선

네트워크 용어

기준 버전: 성능이 매우 낮은 애플리케이션

수정 버전 2: 더 적은 수의 연결을 위해 다시 디자인

수정 버전 3: 압축 블록 보내기

향후 개선 사항