반응형
리눅스에서 사용 가능한 메모리 모델은 3가지 입니다. 각 메모리 모델에 대해 간단히 정리하겠습니다.
3가지 모델의 차이는 물리 메모리 주소 범위와 어떻게 메모리 맵을 관리하는지에 따라 구별됩니다. 3가지의 모델은 FLATMEM, DISCONTIGMEM, SPARSEMEM 입니다.
각 메모리 모델은 리눅스 커널 빌드 시 하나를 선택하여 빌드를 해야합니다. 각 메모리 특징에 대해 정리해 보겠습니다.
FLATMEM
우리나라 용어로 평면 메모리라고도 불립니다. UMA 시스템에서 많이 사용되며 메모리 주소가 연속되는 특성이 입니다. DISCONTIGMEM, SPARSEMEM과 달리 메모리 주소가 연속되어 있기 때문에 중간에 주소 사이의 홀이 없다는 장점이 있습니다.
DISCONTIGMEM
분리된 메모리 영역입니다. 분리가 되어 있어 메모리 뱅크들의 주소가 연속되지 않는 특성을 가지고 있습니다. UMA, NUMA 시스템에서 모드 사용하고 있습니다.
SPARSEMEM
설치된 메모리 뱅크들의 주소가 연속되지 않습니다. 그 특징은 DISCONTIGMEM과 같지만 다른 점이라면 DISCONTIGMEM은 2개로 분리되지만, SPARSEMEM은 여러 영역으로 나뉘어 집니다. 나뉘어지는 최소 단위는 section으로써 ARM64에서는 1G 가 하나의 section이 됩니다. 여러 섹션으로 나뉘어져 관리되므로 중간에 홀이 발생할 수 있습니다. section 단위로 관리하는 이유는 HOTPLUG 기능을 지원하기 위함입니다. 탈/장착 가능한 메모리를 구현하기 위함입니다. SPARSEMEM은 NUMA, UMA 모두 사용할 수 있습니다. ARM64에서 Default로 사용하는 메모리 모델이 SPARSEMEM입니다.
참고자료 : 코드를 알아보는 ARM 리눅스 커널
감사합니다.
반응형
'Linux > Kernel Analysis' 카테고리의 다른 글
NUMA BALANCING (0) | 2018.11.10 |
---|---|
zone_size_init (0) | 2018.11.03 |
bootmem_init() 부트 메모리 초기화 (0) | 2018.10.06 |
void __init paging_init() - 커널 페이지 초기화 하기 (2) | 2018.09.29 |
[커널분석] arm64_memblock_init() (1) | 2018.09.15 |