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

게임 렉 백서 › 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 스로틀링, 그 프로세스의 부하 같은 다른 원인
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. What is NUMA? Linux kernel
    같은 셀의 메모리는 더 빠르고 대역폭이 크며 다른(원격) 셀의 메모리는 접근이 느림
  2. numactl(8) — Linux manual page numactl
    --cpunodebind·--membind로 프로세스의 CPU와 메모리를 특정 NUMA 노드에 고정
  3. numastat(8) — Linux manual page numactl
    numa_miss(원하던 노드가 아닌 곳에 할당)·other_node(다른 노드에서 도는 프로세스가 이 노드에 할당) 카운터, -p로 프로세스의 노드별 메모리

함께 보면 좋은 원인

같은 층: L10 메모리

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

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