기본 검색 엔진: 위키백과
리눅스 커널의 메모리 관리 시스템에서 **페이지 할당자(page allocator)**와 **슬랩 할당자(slab allocator)**가 협력하여 효율적인 메모리 할당을 제공하며, NUMA 아키텍처에서의 지역성 최적화가 핵심입니다.
리눅스 메모리 관리 시스템 구조
페이지 할당자 (Page Allocator)
- 물리 메모리를 4KB 페이지 단위로 관리하는 기본 할당자
- buddy system 알고리즘을 사용해 메모리 단편화 최소화
- zone 기반으로 메모리를 분류 (DMA, Normal, High Memory 등)
슬랩 할당자 (Slab Allocator)
- 작은 크기의 객체들을 효율적으로 할당하기 위한 상위 레이어
- 캐시 메커니즘으로 자주 사용되는 객체들을 미리 할당
- 내부 단편화를 크게 줄이고 할당/해제 속도 향상
NUMA 최적화
- 각 NUMA 노드마다 별도의 메모리 풀 유지
- CPU가 자신이 속한 노드의 메모리에 우선 접근
- 원격 메모리 접근으로 인한 성능 저하 최소화
주요 특징
- Zone Watermark: 메모리 부족 상황을 미리 감지하여 회수 작업 수행
- Per-CPU 캐시: CPU별 로컬 캐시로 락 경합 감소
- Compaction: 메모리 단편화 해결을 위한 페이지 이동 메커니즘
- OOM Killer: 메모리 부족시 프로세스 종료로 시스템 안정성 보장
이러한 다층 구조를 통해 리눅스는 다양한 크기의 메모리 요청을 효율적으로 처리하면서도 시스템 전체의 성능과 안정성을 유지합니다.