게임 렉 백서 › L9 서버 게임 프로세스
단일 스레드 지역 과부하(핫스팟) Single-threaded hot zone
원인 ID sp-hotzone · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
그림과 실험이 있는 원본 카드로 열기 →
지역마다 스레드 하나가 맡는 구조에서 한곳에 사람이 몰리면 그 코어 하나만 100%가 됩니다.
왜 한 지역(채널)을 스레드 하나가 담당 → 그러면 사람이 한곳에 몰리면 그 코어만 포화, 나머지 코어는 여유 → 화면에서는 그 지역만 렉, 다른 지역은 멀쩡
- 증상
- 슬로우모션, 입력 지연
- 요인
- 정체
- 누가 겪나
- 특정 장소·채널
- 언제
- 사람이 몰릴 때
- 담당
- 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
- 게임개발팀 할 일
- 채널 분산, 지역 내부 병렬화, 인원 상한.
- 인프라팀 할 일
- 코어별 CPU 사용률을 모니터링·경보에 추가(서버 전체 평균에는 코어 하나의 포화가 묻힘).
- 수치 감각
- 16코어 서버에서 코어 하나가 100%여도 서버 전체 CPU 사용률은 약 6%로 보입니다. 코어별 사용률을 봐야 찾을 수 있습니다.
- 그래프에서는
- 인원·부하를 따라 오름 · 코어별 CPU 사용률, 스레드별 CPU
- 확인할 곳
- mpstat -P ALL 1로 코어별 사용률, pidstat -t 1로 게임 프로세스의 스레드별 CPU를 보고 가장 바쁜 스레드가 맡은 존의 인원과 비교
- 이러면 맞음
- 서버 전체 CPU는 낮은데 스레드 하나(코어 하나)만 100% 가까이 붙어 있고, 그 시각 그 스레드가 맡은 존에 사람이 몰려 있음
- 이러면 아님
- 여러 코어가 고르게 높으면 서버 전체 과부하. 한 코어의 %soft(수신 처리)만 높으면 NIC 인터럽트 단일 코어 집중 쪽
- 확인 수단
- 인프라 도구로 확인(게임 코드 불필요)
- 더 알아보기
- 지역마다 틱을 따로 돌려야 다른 지역이 멀쩡합니다. 여러 지역 스레드가 매 틱 서로를 기다렸다가 함께 다음 틱으로 넘어가는 구조라면, 가장 바쁜 지역 하나가 서버 전체의 틱을 늦춥니다.
- 실제 사례
- CCP Games 2014: EVE Online HED-GP 대규모 함대전의 서버 과부하
출처
- Time Dilation – How’s That Going? CCP Games
EVE Online의 Time Dilation은 노드 단위라 한 노드에 함께 올라간 먼 성계까지 느려짐, 큰 전투는 성계 4개만 올린 강화 노드에서 처리 - mpstat(1) — Linux manual page sysstat
프로세서별 사용률과 전체 평균을 따로 보여 줌(-P ALL), %soft는 소프트웨어 인터럽트 처리에 쓴 시간 비율 - pidstat(1) — Linux manual page sysstat
-t로 프로세스에 속한 스레드별 통계(CPU 사용률 등)를 함께 표시
함께 보면 좋은 원인
같은 층: L9 서버 게임 프로세스
같은 증상(슬로우모션)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기