hubring

NUMA 본문

linux

NUMA

Hubring 2021. 5. 14. 18:26

NUMA 아키텍처

numa(Non-Uniform Memory Access)?

  • 불균형 메모리 접근이라는 뜻
  • 멀티 프로세서 환경에서 적용되는 메모리 접근 방식
  • UMA(Unifrom Memory Access) numa와 반대되는 개념
    • 해당 방식은 공용 BUS를 이용하여 메모리에 접근
    • 해당 방식의 문제는 0번 소켓에 있는 CPU가 메모리에 접근하는 동안 1번 소켓에 있는 CPU는 메모리에 접근 불가
  • UMA와 달리 로컬 메모리의 접근이 동시에 이워질 수 있음.
  • 하지만 로컬 메모리의 양이 모자라면 다른 CPU에 있는 메모리 접근이 필요하게됨
    => 메모리 접근 시간이 소요하여 성능 저하 발생.

참고

  • Local Access : 각각의 cpu마다 별도의 메모리가 있고 해당 메모리를 접근 하는 방식
  • NODE : CPU+memory
  • Remote Access : 자신의 메모리가 아닌 다른 노드의 메모리에 접근 (NUMA에서 사용)

리눅스에서 NUMA 확인

$ numaactl --show
  • numaactl은 numa와 관련된 정책을 확인하거나 설정할 때 사용
  • 기본 정책 policy : default
  • 관련된 메모리 할당 정책은 총 4가지이다.

default

  • 별도 설정이 없다면 모든 프로세스에 적용됨.
  • 현재 프로세스가 실행되고 있는 프로세서가 포함됨 노드에서 먼저 메모리를 할당 받아 사용.

bind

  • 특정 프로세스를 특정 노드에 바인딩시키는 방식을 취함.
  • 이경우 메모리의 지역성이 좋아지기 때문에 메모리 접근 속도가 빨라서 성능이 좋아질 수 있음.
  • 단 바인드된 노드의 메모리가 부족하면 성능 하락

preferred

  • bind와 비슷하지만 선호하는 노드를 설정
  • 가능한 한 설정한 노드로부터 메모리를 할당 (bind 처럼 반드시는 아님)

interleaved

  • 다수의 노드에서 거의 동일한 비율로 메모리를 할당받음.
  • Round-Robin 정책에 따라 다수의 노드로부터 한 번씩 돌아가면서 메모리를 할당 받음.
$ numaactl --H
  • NUMA 노드가 몇개로 구성되어 있는지 확인할 수 있다.
  • 각 노드의 cpu, size, free 정보를 보여준다.
  • node distances 는 각 노드의 메모리 접근 시간을 의미한다.
$ numastat -cm
  • numa 환경에서 현재 시스템에 할당된 메모리의 상태를 보여준다.
  • numa 아키텍처에서 메모리 불균형 상태를 확인할 수 있다.
  • 전체 메모리에는 free 영역이 많이 있음에도 메모리 할당 정책에 따라 한쪽 노드에서 메모리 할당이 과하게 일어나면 swap을 사용하게 되며 이런 상태를 numastat를 통해서 확인이 가능하다.
$ cat /proc/29800/numa_maps
  • numa_maps를 통해 메모리 할당 정책 확인
  • /proc//numa_maps 를 통해 해당 pid의 정책과 관련된 정보 확인

관련글 링크

'linux' 카테고리의 다른 글

Vim 사용방법 정리  (0) 2021.03.24
Tmux 설치 및 사용법  (0) 2021.03.24
Linux에서 쉘스크립트 파일 만들기  (0) 2021.03.24
[리눅스] top  (0) 2021.02.03
[리눅스] 시스템 구성 정보 확인하기  (0) 2021.02.03