본문 바로가기

Programming/Linux_Kernel

slab cache - 생성과 파괴를 반복하는 커다란 자료구조 관리

리눅스 커널에서 커다란 자료 구조(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