[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)

# NUMA 구성 Review

!참고 : `numactl 명령`이 존재하지 않을 경우 다음과 같이 패키지를 설치해야 한다.

```bash
# yum install nuamctl
```

이제 다음과 같이 현재 프로세스의 NUMA 정책 설정을 표시 하는데, 현재 서버 머신은 Total 32Core인 것을 확인할 수 있다.

```bash
# numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
cpubind: 0 1
nodebind: 0 1
membind: 0 1
```

추가적으로 NUMA H/W 정책도 같이 확인 한다. 현재 서버 머신은 Total 128GB의 메모리가 설치되어 있는 것을 알 수 있다.

```bash
# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 63916 MB
node 0 free: 1873 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 64484 MB
node 1 free: 54 MB
node distances:
node   0   1
  0:  10  21
  1:  21  10
```

# numastat

`numastat 명령`은 자주 사용되는 명령으로서, 다음과 같이 현재 각 필드 별 상태를 확인할 수 있다.

```bash
# numastat
                         node0             node1
numa_hit              2303089960      5856080919
numa_miss              904157931          711940
numa_foreign              711940       904157931
interleave_hit             33473           32804
local_node            2303093653      5856042930
other_node             904154238          749929
```

참고적으로 위의 각 필드의 값은 **페이지의 개수** 이며, 결과적으로 node0에 `numa_hit`가 많은 상태이기 때문에 **이를 특정 Node 또는 균등하게 할당되는 것이 Key Point** 이다.

# numastat Overview

*  numa_hit
>  해당 노드에 성공적으로 할당된 페이지의 수 이다.

*  numa_miss
>  원래 의도된 노드에 메모리가 부족하여, 다른 노드에 할당된 페이지의 수이다. `이 필드의 값이 낮으면 CPU 성능이 최적화 되어 있음을 의미` 한다.

*  numa_foreign
>  다른 노드에 할당하려 했으나, 처음에 의도된 노드에 할당된 페이지의 수이다. `이 필드의 값이 낮으면 CPU 성능이 최적화 되어 있음을 의미` 한다.

* interleave_hit
>  노드별로 균등하게(RoundRobin), 메모리가 할당된 페이지의 수이다.

* local_node
>  해당 노드의 프로세스에 의해 성공적으로 할당된 페이지 수이다. numa_hit의 값으로 봐도 무방하다.

* other_node
> 다른 노드에서 실행된 프로세스에 의해 할당된 페이지의 수이다. numa_miss 값과는 다르며, 일반적으로 interleave 정책에서 이 값이 상승되는 것을 확인할 수 있다.

