개요

리눅스에서 메모리 관리시 접근 속도가 같은 영역을 뱅크로 나타내며 이를 노드라는 자료구조로 나타낸다. 모든 코어가 메모리 접근에 같은 속도로 접근하는 UMA시스템에서는 노드는 하나이고, NUMA환경에서는 노드는 최대 1024(CONFIG_NODE_SHIFT)개의 NUMA Memory Bank들을 지정할 수 있다. 노드의 접근은 리스트를 통해서 관리되며, pgdat_list라는 리스트를 통해서 접근한다.

pgdat_list 자료구조에는 노드의 물리 메모리양, 노드의 물리 시작 주소, ZONE구조를 담기 위한 변수들을 선언되어 있다. 이러한 메모리 노드 구조는 NUMA Memory policy를 위해서 사용된다. 예를 들어서 기본 SLUB Memory allocator는 최대한 현재 CPU에서 접근이 빠른 메모리를 먼저 할당하기 위해서 kmem_cache_node라는 구조체를 통해서 메모리를 할당한다.