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

게임 렉 백서 › L11 디스크

서버의 지연 로딩 Lazy loading on the server

원인 ID dk-lazy-load · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라

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

서버가 던전·맵 데이터를 처음 요청받을 때 디스크에서 읽으면, 그 틱 동안 모두가 멈춥니다.

왜 누군가 처음으로 던전·지역에 입장 → 그러면 서버가 게임 스레드에서 데이터를 디스크에서 읽음 → 화면에서는 그 서버의 모두가 잠깐 멈춤

증상
멈춤
요인
정체
누가 겪나
특정 장소·채널, 서버 전체
언제
이동 중·지역 전환 때
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
게임개발팀 할 일
서버 시작 때 미리 로딩, 비동기 로딩.
인프라팀 할 일
스냅샷으로 막 만든 서버는 서비스 투입 전 디스크 예열(전체 블록을 한 번 읽기) 또는 빠른 스냅샷 복원 기능 사용.
그래프에서는
가끔 무작위로 튐 · 서버 틱 시간, 디스크 읽기
확인할 곳
멈춘 시각을 게임 서버 로그의 던전·지역 첫 입장 기록과 맞춰 보고 그 순간 게임 서버의 디스크 읽기(pidstat -d의 kB_rd/s)와 perf trace --duration으로 오래 걸린 read·open 호출을 봄. 새로 뜬 클라우드 서버라면 EBS의 VolumeAvgReadLatency를 오래된 서버와 비교함
이러면 맞음
처음 입장하는 순간에만 멈추고 같은 곳에 두 번째로 들어갈 때는 멈추지 않음. 멈춘 동안 게임 스레드가 파일 읽기에서 기다림
이러면 아님
이미 로딩된 지역에서도 똑같이 멈추면 틱 예산 초과·GC 같은 다른 원인
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
클라우드에서 스냅샷(디스크 사본)으로 막 만든 서버는 처음 읽는 블록마다 원격 스토리지에서 받아 와 평소보다 훨씬 느립니다. 오토스케일링으로 새로 뜬 서버에서만 첫 입장이 유독 오래 걸린다면 이것을 의심합니다.

출처

  1. Initialize Amazon EBS volumes AWS
    스냅샷으로 만든 볼륨은 블록을 S3에서 받아 오는 동안 지연이 늘고 성능이 떨어짐, dd·fio로 전체 블록을 읽어 미리 초기화
  2. Amazon EBS fast snapshot restore AWS
    빠른 스냅샷 복원은 만들 때부터 초기화된 볼륨을 줘 첫 접근 지연을 없앰
  3. pidstat(1) — Linux manual page sysstat
    -d: 프로세스별 kB_rd/s(초당 디스크 읽기량)
  4. perf-trace(1) — Linux manual page perf
    --duration으로 지정한 ms보다 오래 걸린 시스템 호출만 표시
  5. Amazon CloudWatch metrics for Amazon EBS AWS
    VolumeAvgReadLatency: 1분 평균 읽기 지연(Nitro 인스턴스)

함께 보면 좋은 원인

같은 층: L11 디스크

같은 증상(멈춤)의 다른 층 원인

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