콘텐츠로 이동

슬랩 할당 (Slab Allocation)

Jan 27, 2026

슬랩 할당(Slab Allocation)은 커널 객체 유형별로 캐시를 만들고, 미리 생성된 객체를 재사용하여 단편화 없이 빠르게 메모리를 할당하는 기법입니다. 버디 시스템은 작은 커널 객체 할당에 최대 50% 내부 단편화가 발생하므로, 동일 유형 객체를 반복적으로 할당/해제하는 커널에 최적화된 할당자가 필요합니다.

  1. 커널 데이터 구조 유형별로 캐시(cache) 생성
  2. 각 캐시는 하나 이상의 **슬랩(slab)**으로 구성
  3. 슬랩은 물리적으로 연속된 페이지들로, 동일 크기 객체들로 분할
  4. 객체 요청 시 캐시에서 free 객체 할당
  5. 객체 해제 시 캐시로 반환 (실제 메모리 해제하지 않음)
┌─────────────────────────────────────────┐
│ Kernel │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Cache: │ │ Cache: │ │ Cache: │ │
│ │ task_ │ │ inode │ │ file │ │
│ │ struct │ │ │ │ object │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ │
│ │ Slabs │ │ Slabs │ │ Slabs │ │
│ │ [][][] │ │ [][][] │ │ [][][] │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
상태설명할당 우선순위
Partial일부 used, 일부 free1순위
Empty모두 free2순위
Full모두 used할당 불가

할당: partial slab → empty slab → 새 slab 생성

  1. 단편화 없음: 정확한 객체 크기로 분할 (3KB 요청 → 3KB 할당)
  2. 빠른 할당/해제: 미리 생성된 free 객체 반환 → O(1)
  3. 객체 재사용: 해제된 객체의 초기화 상태 유지 → 재할당 시 비용 절감
이름특징
SLAB원조, per-CPU 캐시
SLUB현재 기본, 메타데이터를 page 구조체에 저장, 오버헤드 감소
SLOB임베디드용, 단순, 메모리 적은 시스템용

사무용품 창고와 같습니다. 볼펜, 포스트잇 등 품목별로 정리된 선반에서 바로 꺼내고, 반납하면 다시 선반에 배치합니다.

  • 장점: 단편화 제거, 매우 빠른 할당/해제, 객체 초기화 비용 절감
  • 단점: 미리 할당해두므로 유휴 메모리 발생 가능, 범용 메모리 할당에는 부적합