리눅스 커널에서 커다란 자료 구조(structer)를 자주 생성/파괴해야 하는 경우라면 slab cache의 사용을 고려해 보자.
slab layer 는 프로세서별로 할당되는 객체 캐시를 보존하며, 이 리스트는 객체(데이터)의 할당과 해제 성능을 획기적으로 향상시킨다.
(예를 들어 inode 로 slab cache 로 관리한다.)
객체(데이터) | ||
slab------------------------- | 객체(데이터) | |
객체들... | ||
cache----------------------- | ||
객체(데이터) | ||
slab------------------------- | 객체들... | |
slab들 .... |
각 객체 유형별(struct 별)로 하나의 cache 를 선언한다.
하나의 cache 는 다수의 slab 을 가지고 이 각각의 slab 들이 실질적인 데이터를 가지는 구조이다.
각 객체를 사용하고 해제할때 실질적인 할당 해제가 아닌 cache 의 성향을 가지고 자료구조를 관리해 주므로 성능향상에 큰 도움이 된다.
- 각 slab의 상태
full : 모든 저장소에 객체가 저장되어 있는 상태
partial : 일부만 사용중
empty : 이 slab 의 모든 저장소가 비어있어서 객체를 저장할 수 있는 상태
- cache 생성/해제
kmem_cache_create
kmemcache_destory
- slab 생성/해재
kmem_getpages
kmem_freepages
- 데이터 저장/해제
kmem_cache_alloc
kmem_cache_free
'Programming > Linux_Kernel' 카테고리의 다른 글
linux 병목현상 분석 : latencytop (0) | 2010.02.23 |
---|---|
각 HW block clock control 하기 - linux 2.6.29 (0) | 2010.02.17 |
misc 에 sysfs 등록하기 (0) | 2010.02.08 |
linux 레지스터 맵핑주소 찾기 (0) | 2010.02.08 |
정식 i2c port 에 등록하여 사용하기 (2) | 2010.02.06 |