<aside> 📌
목적: 네트워크 라이브러리 안전성 테스트 / 처리 한계 측정 (3000클라)
과정: Send 경합이 높게 관측 → 경합은 정상 동작 → 내부 개선항목 없음. 처리량 상한은 IOCP 완료 처리 총량으로, 에코(1:1 응답) 수준에서는 자연스러운 한계다.
다음 단계: SendQ의 mutex + memcpy 비용은 에코에서는 미미하지만, 브로드캐스트(1:N)에서는 N배로 스케일하므로 MMO 스트레스 테스트에서 재검증이 필요하다.
</aside>
| 항목 | 값 |
|---|---|
| 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) |
| 항목 | 값 | 비고 |
|---|---|---|
| Mode | NetWorkLib_EchoTest |
워커 스레드가 recv → 즉시 send (게임 로직 없음) |
| Port | 6000 | |
| MaxClients | 5000 | |
| Worker Threads | 40 | 에코 테스트 당시값 (hardware_concurrency() × 2 = 40). 워커 수는 INI WorkerThreads로 지정 — 이후 게임서버 부하에선 4가 최적(WT×K 스윕) |
| MonitorPort | 9090 | Prometheus 메트릭 엔드포인트 |
| 항목 | 값 | 비고 |
|---|---|---|
| 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>

| 메트릭 | 관측값 |
|---|---|
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 |

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