<aside> 📌

목적: 네트워크 라이브러리 안전성 테스트 / 처리 한계 측정 (3000클라)

과정: Send 경합이 높게 관측경합은 정상 동작 → 내부 개선항목 없음. 처리량 상한은 IOCP 완료 처리 총량으로, 에코(1:1 응답) 수준에서는 자연스러운 한계다.

다음 단계: SendQ의 mutex + memcpy 비용은 에코에서는 미미하지만, 브로드캐스트(1:N)에서는 N배로 스케일하므로 MMO 스트레스 테스트에서 재검증이 필요하다.

</aside>


1. 테스트 조건

환경

항목
CPU Intel Core i9-10900 @ 2.80GHz (10C/20T)
RAM 32GB (16GB x2)
OS Windows 10 Home 10.0.19045
네트워크 localhost (127.0.0.1) — 동일 PC에서 서버/클라 실행
빌드 Release x64 (MSVC 2022)

서버 설정 (ServerConfig.ini)

항목 비고
Mode NetWorkLib_EchoTest 워커 스레드가 recv → 즉시 send (게임 로직 없음)
Port 6000
MaxClients 5000
Worker Threads 40 에코 테스트 당시값 (hardware_concurrency() × 2 = 40). 워커 수는 INI WorkerThreads로 지정 — 이후 게임서버 부하에선 4가 최적(WT×K 스윕)
MonitorPort 9090 Prometheus 메트릭 엔드포인트

클라이언트 설정 (EchoStressConfig.ini)

항목 비고
ClientCount 3000 동시 접속 클라이언트 수
OverSendCount 100 응답 기다리지 않고 동시에 보내는 패킷 수
LoopDelayMs 1 네트워크 루프 간 대기 시간
DisconnectTest 1 연결/종료 반복 활성화
EchoTimeoutMs 500 에코 응답 타임아웃 판정 기준
PacketSize 12~256 bytes 랜덤 크기
AttackMode 0 (정상)
MonitorPort 9092 클라이언트 메트릭 엔드포인트

모니터링 스택

도구 포트 역할
Prometheus 9091 메트릭 수집 (scrape_interval: 5s)
Grafana 3000 대시보드 시각화
windows_exporter 9182 OS 레벨 메트릭 (CPU, 메모리, NIC)

<aside> ⚠️

동일 PC에서 서버와 클라이언트를 동시에 실행하므로, CPU/메모리 자원을 공유한다.

이 조건에서의 관측값은 네트워크 지연이 아닌 서버 내부 처리 구조에 의한 것으로 한정하여 해석한다.

</aside>


2. 관측 결과 (에코 기준선)

① Send 경합 & WSASend 호출

image.png

메트릭 관측값
send contention/s ~950K ~ 1M ops/s
WSASend calls/s ~130K ~ 150K ops/s
WSASend completions/s ~130K ~ 150K ops/s
경합 비율 contention / WSASend ≈ 7:1

② Send 체류량 (bytes)

image.png

메트릭 관측값
pending bytes (최소) ~0 KiB
pending bytes (최대) ~46 KiB
패턴 스파이크 반복, 피크가 점점 커지는 추세