전송 지연 시간 (Latency)
- 두 기기 간에 데이터를 최소량 전송할 때 걸리는 시간 (ms)
- 반응을 시작하기까지의 지연 시간
- 네트워크 품질을 결정하는 기준 3가지 중 하나
- Packet Loss : 패킷을 잃어버린 것 (데이터 유실)
- 전송 속도 : 두 기기간에 초당 전송될 수 있는 최대 데이터 양 (BitPerSecond, Bytes/Second)
- 전송 지연 시간 (Latency)
Latency Vs Throughput
- Lateny : 1개의 요청/작업에 걸리는 시간 (ms)
- Throughput : 일정 시간동안 처리 가능한 요청의 수
- 초당 100개의 요청 처리 가능
Latency Vs Response Time vs Processing Time
- Lateny : 반응이 시작되기까지의 지연
- Response Time : 요청 전체가 완료될 때까지의 시간 (Latency 포함)
- Processing Time : 실제 로직 수행에 걸린 시간 (I/O 제외)
Latency 종류
- Network : 네트워크를 통해 데이터가 왕복에 걸리는 시간
- 클라이언트 ↔ 서버간의 Ping
- Input : 사용자 입력이 시스템 반응으로 이어지기까지의 시간
- 마우스 클릭 후 반응 시간
- Render : GPU가 렌더링을 시작하고 끝낼 때까지의 걸리는 시간
- 프레임 렌더링 시간
- Application : 어플리케이션에서 내부 로직 수행에 걸리는 시간
- DB 쿼리, 알고리즘 실행 시간
- Disk : 디스크에서 데이터를 읽고 쓰는데 걸리는 시간
- SSD vs HDD 응답 시간
- Audio : 입력 음성이 스피커로 출력되는데까지의 걸리는 시간
- 보이스 채팅 딜레이
Latency 발생 원인
- 네트워크 : 거리, 라우터/스위치 수, DNS 지연, 방화벽 검사
- 하드웨어 : 디스크 접근, CPU 컨텍스트 스위칭, 캐시 미스
- 소프트웨어 : 알고리즘 복잡도, 동기화, 불필요한 I/O
- 스레드/락 : Mutex, Semaphore, Deadlock 대기 시간
- GC : 언어 런타임의 메모리 정리로 인한 멈춤]
측정 방법
- End - to - End
- 클라이언트로부터 응답까지 전체 흐름 측정
- Start Timer → 요청 전송 → 응답 수신 → Stop Timer
- Latency - Stop - Start
- BreakDown (구간별)
- 네트워크 전송 시간
- Ping, Traceroute
- 서버 처리 시간
- 백엔드 로그, APM 툴 (New Relic, Datadog 등)
- DB 지연
- 쿼리 프로파일링 (EXPLAIN, QueryTime)
- 렌더링 지연
- GPU 프로파일러, 프레임 분석
- 네트워크 전송 시간
메트릭 지표
- Average : 전체 요청의 평균 지연 시간
- P95/P99 : 95%, 99% 요청이 이 시간 이내에 응답됨
- Max : 가장 오래 걸린 요청 시간
- Jitter(지터) : Latency의 변동 폭 (불규칙성)
Latency 최적화 전략
- 네트워크 : CDN, 지역별 서버 배치, 압축
- 서버 처리 : 비동기 처리, 캐싱, 경량화
- DB : 쿼리 튜닝, 인덱싱, 메모리 캐시 (Redis)
- 멀티 스레딩 : 락 최소화, 스레드 풀 사용
- 게임/렌더링 : Prediction, Interpolation, Frame Delay 최소화
- 분산 시스템 : RPC 최적화, 데이터 파티셔닝, Circuit Breaker 패턴 등
Latency 공식
- L = λ × W
- L : 시스템 내 평균 요청 수 (Queue 길이)
- λ : 요청 도착률 (Throughput)
- W : 평균 응답 시간 (Latency)
Latency 측정법 : 라운드 트립 레이턴시 (Round Trip Latency)
- 기기 A에서 기기 B에 패킷 전송
- 기기 B는 이를 수신, A에 패킷 전송
- A에서 1번과정의 시간과 현재 시간의 차이를 구하여 2로 나눈다.
- 현재시간 - (A →B전송시간 / B→A 전송시간)
IOCP 내 패킷 유실시 UDP 및 TPC에서의 현상
- UDP : 패킷 유실 발생시 데이터 그램 자체가 유실
- Ex) 1만 바이트의 데이터그램을 UDP로 전송시 1300바이트의 패킷으로 분할하여 전송
- 해당 패킷 1개를 유실시 1만바이트 데이터그램 전체 유실
- 레이턴시 : 네트워크 기기의 레이턴시
- TCP 패킷 유실 발생시 유실된 패킷에 대한 Ack가 도착하지 않는다.
- Ack가 올때까지 대기 후 오지않으면 다시 패킷을 전송
- 3Hand - 4Hand Shake
- 지연시간이 발생하지만, 데이터를 송/수신 처리한다. (신뢰성)
- 레이턴시 : 네트워크 기기(라우터,스위치 등) 레이턴시 + 패킷 유실률 * 재전송 대기 시간
언리얼내의 추측항법을 통한 레이턴시
- 추측항법
- 다른 캐릭터의 위치 정보를 이미 지난 약간의 시간만큼 예측 하는 것
- 상대방 움직임을 어느정도 예상해서 그 위치로 갈 수 있게 보정시키는 방법
- 두 기기간의 레이턴시를 파악하는 것
- 언리얼의 CharacterMovementComponent는 이동 예측 + 보정을 자동으로 수행한다. (추측 항법)
- 높은 핑 환경에서의 예측이 어긋나고 서버 보정시 순간이동처럼 보이는 현상
RPC (Remote Procedure Call)의 레이턴시 특성
- Client → Server (RPC Server)
- 입력 전달, 행동 요청
- 클라이언트 → 서버 RTT만큼 지연
- Server → Client (RPC Client)
- 피드백, 애니메이션 트리거
- 지연 + 클라이언트 처리 순서 문제
- Multicast (RPC Multicast)
- 모든 클라이언트에 일괄 동기화
- RTT * N, 부하 높음
레이턴시 최소화 방법
- 불필요한 TCP 대신 UDP로 통신하기
- 언리얼 엔진은 이미 다른 방식의 IOCP 형태로 통신중 (엔진 내부적으로 최적화가 진행되어 있음)
- 언리얼의 Reliable → UnReliable 리팩토링
- 가급적 적은 수의 패킷 전송
- 클라이언트와 서버 간 통신과 클라이언트끼리 직접 통신을 섞어쓰기
- C/S네트워킹 + P2P 네트워킹
출처 및 참고내역
멀티플레이어 게임 프로그래밍(도서) - https://www.yes24.com/product/goods/38868446
게임 서버 프로그래밍 교과서(도서) - https://www.yes24.com/Product/Goods/71768958
'OS , 네트워크' 카테고리의 다른 글
컨텍스트 스위칭 (Context Switching) (0) | 2025.04.18 |
---|---|
[OS] - CPU 코어에 적합한 쓰레드의 개수 (Thread Pool,리틀의 법칙, 암달의 법칙) (0) | 2025.04.02 |
[OS] - 프로세스, 스레드 (Process, Thread) (0) | 2025.03.21 |
동기, 비동기, 블로킹, 논블로킹 (1) | 2025.03.11 |
OSI 7계층 (0) | 2025.03.10 |