수정 버전 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%
관련 항목