게임 렉 백서 › L10 메모리
NUMA 원격 메모리 Remote NUMA access
원인 ID mem-numa · 주 담당 인프라팀·서버 인프라
그림과 실험이 있는 원본 카드로 열기 →
CPU가 두 개인 서버에서 반대편 CPU에 붙은 메모리를 쓰면 접근이 느려집니다.
왜 스레드와 메모리가 서로 다른 CPU 소켓에 배치 → 그러면 메모리 접근이 느려짐(장비에 따라 1.5~2배) → 화면에서는 같은 사양인데 프로세스마다 성능 차이
- 증상
- 슬로우모션
- 요인
- 정체
- 누가 겪나
- 서버 전체
- 언제
- 항상
- 담당
- 주 담당 인프라팀·서버 인프라
- 인프라팀 할 일
- 프로세스·메모리를 한 소켓에 고정(numactl), 소켓이 둘이면 소켓마다 게임 서버 프로세스를 나눠 배치.
- 그래프에서는
- 일부만 높음 · 프로세스별 틱 시간, 노드별 메모리
- 확인할 곳
- numastat -p PID로 게임 서버 프로세스의 메모리가 어느 NUMA 노드에 있는지, numastat의 numa_miss·other_node가 늘어나는지 보고 그 프로세스가 도는 CPU의 노드와 비교함
- 이러면 맞음
- 느린 프로세스만 메모리 대부분이 자기가 도는 CPU와 다른 노드에 있고 numactl로 CPU·메모리를 한 노드에 고정해 다시 띄우면 차이가 사라짐
- 이러면 아님
- 빠른 프로세스와 노드 배치가 같은데도 느리면 노이지 네이버, CPU 스로틀링, 그 프로세스의 부하 같은 다른 원인
- 확인 수단
- 인프라 도구로 확인(게임 코드 불필요)
출처
- What is NUMA? Linux kernel
같은 셀의 메모리는 더 빠르고 대역폭이 크며 다른(원격) 셀의 메모리는 접근이 느림 - numactl(8) — Linux manual page numactl
--cpunodebind·--membind로 프로세스의 CPU와 메모리를 특정 NUMA 노드에 고정 - numastat(8) — Linux manual page numactl
numa_miss(원하던 노드가 아닌 곳에 할당)·other_node(다른 노드에서 도는 프로세스가 이 노드에 할당) 카운터, -p로 프로세스의 노드별 메모리
함께 보면 좋은 원인
같은 층: L10 메모리
같은 증상(슬로우모션)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기