리눅스 Kernel-doc 문서에 있는 내용을 번역하려고 했는데, 번역이 영...-_-;;

 

-----------------------------------------------------------------------------------------------

 

NUMA란 무엇인가? 주어진 프로세서에서부터 다른 메모리 영역들에 대한
메모리 액세스 시간이 그 프로세서로부터의 메모리 영역까지의 "거리"에 따라
변화하는 아키텍쳐입니다.

어떠한 cpu로 부터 메모리 액세스 시간이 같은 각각의 메모리 영역은 node라고 합니다.
그러한 아키텍쳐에서는, 커널이 node간의 communications를 최소화하는 것이 유용합니다.


kernel text와 read-only data replication에서 이 범위에 대한 구조들은 node들을 거쳐,

커널의 key components들이 필요로하는 모든 data structures를 그 node의 메모리 상에
할당하려고 합니다.



현재, numa support는 광범위하게 불연속적인 물리 메모리를 효율적인 처리를 제공하여,

NUMA는 아니지만 physical address 공간에 큰 구멍을 가질 수 있는 아키텍쳐에서도
동일한 코드를 사용할 수 있도록 하고 있습니다.
이러한 모든 코드는 CONFIG_DISCONTIGMEM으로 괄호로 묶입니다.

초기의 port(이식?)은 모든 종류의 정보를 bootmem_data_t structure로 캡슐화함으로서
bootmem allocator code를 NUMA화(NUMAizing) 하는 것을 포함합니다.
그리고 Node 지정 특정한 호출이 allocator에 추가되었습니다.
이론적으로, bootmem allocator를 사용하는 모든 플랫폼은
bootmem과 mem_map data structures를 최선이라고 구분되는 어느 곳에나
넣을 수 있어야 합니다.

 

 

각 node의 page allocation data structures는 또한 pg_data_t로 캡슐화되었습니다.
bootmem_data_t는 단지 이것의 한 부분입니다.
코드가 NUMA와 일반적인 UMA 플랫폼들 사이에 일관성있도록 만들기 위해서,
통계상으로 UMA 플랫폼들은 pg_data_t를 할당하였습니다.( config_page_data).
일관성을 위해서, 또한 num_online_nodes() 함수가 모든 플랫폼들에 대해 정의됩니다.
테스트했던 것과 같이, low_on_memory같은 보다 많은 변수들을 NUMA화할 수도 있습니다.
예를 들면, nr_free_pages 등등을 pg_data_t로..

 

 

NUMA 인식 page할당 코드는 현재 round robin 방식으로 다른 node들로부터 pages를 할당하려고 합니다.
이것은 concentric circle(동심원) search를 하기 위해 바뀔 수 있습니다, 현재의 node로 부터 시작하여,
일단 NUMA port가 보다 성숙함을 성취한다면,

alloc_pages_node 호출이 추가되어,drivers가 call하고
NUMA 혹은 UMA 플랫폼에서 동작하는지에 대해 걱정할 필요없도록 되었습니다.

 

+ Recent posts