22. NUMA 아키텍처와 메모리 지역성: 원격 접근 비용·first-touch·스레드/메모리 어피니티

난이도 상 해설 보기 →
문제

문제 22 — NUMA 아키텍처와 메모리 지역성: 원격 접근 비용·first-touch·스레드/메모리 어피니티

대형 게임 서버는 소켓 여러 개(수십~수백 코어)를 가진 NUMA(Non-Uniform Memory Access) 머신 위에서 돈다. 이런 머신에서는 "어느 코어가 어느 메모리를 만지느냐" 가 성능에 크게 영향을 준다. (UMA와의 기본 차이·MESI 캐시 일관성 기초는 다른 문제에서 다루므로, 여기서는 노드 토폴로지·first-touch·어피니티·운영 도구에 초점을 둔다.)

다음을 설명하라.

  1. 노드 토폴로지와 NUMA distance. "노드(node)", "로컬 메모리 vs 원격 메모리", 노드 쌍마다 정의되는 "NUMA distance/비용" 개념을 설명하라. 소켓 수가 늘수록 왜 메모리를 노드로 나눠야 확장되는가? OS 는 이 토폴로지를 어떻게 노출하는가(예: /sys 노드 정보, numactl -H)?

  2. 원격 접근 비용. 코어가 다른 노드의 메모리를 읽을 때 로컬 대비 지연·대역폭이 어떻게 달라지는가? 캐시 일관성 트래픽(인터커넥트, 예: UPI/Infinity Fabric)은 여기에 어떻게 관여하는가?

  3. first-touch 정책. 리눅스에서 malloc/new 로 잡은 메모리는 물리 페이지가 언제 어느 노드에 배정되는가? "할당한 스레드" 가 아니라 "처음 건드린(first-touch) 스레드" 가 왜 중요한가? 초기화 방식이 잘못되면(한 스레드가 전부 초기화) 어떤 문제가 생기는가?

  4. 스레드·메모리 어피니티. 스레드를 특정 노드/코어에 고정(affinity/pinning)하고 메모리를 그 노드에 배치하면 무엇이 좋아지는가? 게임 서버에서 워커 스레드·존(zone) 데이터를 노드별로 나누는 설계의 장점과 위험(부하 불균형, 노드 간 이동)을 설명하라.

  5. 실무 함정과 도구. NUMA 를 무시했을 때 나타나는 증상(원격 접근 폭증, 대역폭 병목, false sharing 과의 차이), 그리고 이를 진단·제어하는 수단(numactl, numastat, mbind/set_mempolicy, 대형 페이지와의 상호작용)을 설명하라.

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.