한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L8 소켓과 프로토콜

블로킹 I/O 구조 Blocking I/O model

원인 ID sk-blocking-io · 주 담당 게임개발팀·서버 개발

그림과 실험이 있는 원본 카드로 열기 →

소켓 하나를 기다리는 동안 스레드가 다른 일을 못 하는 구조에서는 사람이 늘수록 전체가 느려집니다.

왜 연결마다 읽기·쓰기를 기다리는 방식 → 그러면 한 연결의 지연이 같은 스레드의 다른 연결로 번짐 → 화면에서는 동접이 늘수록 전체가 슬로우모션·입력 지연

증상
슬로우모션, 입력 지연
요인
정체
누가 겪나
서버 전체
언제
사람이 몰릴 때, 저녁 피크 시간
담당
주 담당 게임개발팀·서버 개발
게임개발팀 할 일
epoll·IOCP·io_uring 기반 비동기 I/O로 전환.
그래프에서는
인원·부하를 따라 오름 · 응답 시간, 스레드 수
확인할 곳
pidstat -w -t로 게임 서버 스레드 수와 스레드별 자발적 컨텍스트 스위칭(cswch/s, 자원을 기다리며 멈춘 횟수)을 보고 동접에 따른 응답 시간과 비교
이러면 맞음
동접이 늘수록 응답 시간이 가파르게 오르고 연결 수만큼 늘어난 스레드 대부분이 자발적 스위칭만 많고 CPU는 거의 쓰지 않음(소켓 대기)
이러면 아님
스레드가 대기 없이 CPU를 계속 쓰고 있으면 계산 과부하(“틱 예산 초과”)
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. epoll(7) — Linux manual page Linux man-pages
    많은 fd를 한 번에 감시하도록 확장되는 I/O 이벤트 알림
  2. I/O Completion Ports Microsoft
    많은 비동기 I/O를 미리 만든 스레드 풀로 처리하는 윈도우 방식
  3. pidstat(1) — Linux manual page sysstat
    -w의 cswch/s: 자원을 기다리며 스스로 멈춘 자발적 컨텍스트 스위칭, -t로 스레드별

함께 보면 좋은 원인

같은 층: L8 소켓과 프로토콜

같은 증상(슬로우모션)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기