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

게임 렉 백서 › L10 메모리

캐시 미스 CPU cache misses

원인 ID mem-cache-miss · 주 담당 게임개발팀·서버 개발

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

데이터가 메모리 여기저기 흩어져 있으면 CPU가 매번 느린 RAM까지 가서 기다립니다.

왜 객체가 포인터로 흩어져 있고 순서 없이 접근 → 그러면 CPU 캐시에 없어서 매번 RAM에서 읽음(100배 안팎 느림) → 화면에서는 같은 일을 해도 틱 비용이 몇 배, 심하면 슬로우모션

증상
슬로우모션
요인
정체
누가 겪나
서버 전체
언제
항상, 사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발
게임개발팀 할 일
자주 함께 쓰는 데이터를 연속으로 배치(데이터 지향 설계).
그래프에서는
처음부터 늘 높음 · 틱 시간, CPU 사용률
확인할 곳
게임 서버 프로세스에 perf stat -d -p PID를 걸어 사이클당 명령어 수(insn per cycle)와 L1·LLC 캐시 미스를 재고, 틱 시간·CPU 사용률과 함께 봄
이러면 맞음
CPU를 계속 바쁘게 쓰는데 insn per cycle이 낮고 LLC 미스가 많음. 데이터 배치를 바꾼 빌드에서 같은 인원의 틱 시간이 크게 줄면 확정
이러면 아님
CPU 사용률이 낮은데 틱이 느리면 락·I/O 대기처럼 CPU 밖에서 기다리는 원인
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    L1 캐시 0.5ns, L2 캐시 7ns, 메인 메모리 100ns(2009년 기준): RAM까지 가면 캐시보다 한두 자릿수 느림
  2. perf-stat(1) — Linux manual page perf
    -p로 실행 중인 프로세스의 하드웨어 이벤트를 세고 insn per cycle을 보여 줌, -d는 L1·LLC 데이터 캐시 이벤트를 더함

함께 보면 좋은 원인

같은 층: L10 메모리

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

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