슬랩 할당 (Slab Allocation)
Jan 27, 2026
핵심 개념
섹션 제목: “핵심 개념”슬랩 할당(Slab Allocation)은 커널 객체 유형별로 캐시를 만들고, 미리 생성된 객체를 재사용하여 단편화 없이 빠르게 메모리를 할당하는 기법입니다. 버디 시스템은 작은 커널 객체 할당에 최대 50% 내부 단편화가 발생하므로, 동일 유형 객체를 반복적으로 할당/해제하는 커널에 최적화된 할당자가 필요합니다.
동작 원리
섹션 제목: “동작 원리”- 커널 데이터 구조 유형별로 캐시(cache) 생성
- 각 캐시는 하나 이상의 **슬랩(slab)**으로 구성
- 슬랩은 물리적으로 연속된 페이지들로, 동일 크기 객체들로 분할
- 객체 요청 시 캐시에서 free 객체 할당
- 객체 해제 시 캐시로 반환 (실제 메모리 해제하지 않음)
┌─────────────────────────────────────────┐│ Kernel ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ Cache: │ │ Cache: │ │ Cache: │ ││ │ task_ │ │ inode │ │ file │ ││ │ struct │ │ │ │ object │ ││ └────┬─────┘ └────┬─────┘ └────┬─────┘ ││ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ ││ │ Slabs │ │ Slabs │ │ Slabs │ ││ │ [][][] │ │ [][][] │ │ [][][] │ ││ └─────────┘ └─────────┘ └─────────┘ │└─────────────────────────────────────────┘슬랩의 세 가지 상태
섹션 제목: “슬랩의 세 가지 상태”| 상태 | 설명 | 할당 우선순위 |
|---|---|---|
| Partial | 일부 used, 일부 free | 1순위 |
| Empty | 모두 free | 2순위 |
| Full | 모두 used | 할당 불가 |
할당: partial slab → empty slab → 새 slab 생성
주요 장점
섹션 제목: “주요 장점”- 단편화 없음: 정확한 객체 크기로 분할 (3KB 요청 → 3KB 할당)
- 빠른 할당/해제: 미리 생성된 free 객체 반환 → O(1)
- 객체 재사용: 해제된 객체의 초기화 상태 유지 → 재할당 시 비용 절감
Linux 구현체
섹션 제목: “Linux 구현체”| 이름 | 특징 |
|---|---|
| SLAB | 원조, per-CPU 캐시 |
| SLUB | 현재 기본, 메타데이터를 page 구조체에 저장, 오버헤드 감소 |
| SLOB | 임베디드용, 단순, 메모리 적은 시스템용 |
사무용품 창고와 같습니다. 볼펜, 포스트잇 등 품목별로 정리된 선반에서 바로 꺼내고, 반납하면 다시 선반에 배치합니다.
- 장점: 단편화 제거, 매우 빠른 할당/해제, 객체 초기화 비용 절감
- 단점: 미리 할당해두므로 유휴 메모리 발생 가능, 범용 메모리 할당에는 부적합