본문 바로가기
IT/Linux_리눅스

[Linux / Memory] 메모리의 Slab 영역과 slabtop 명령어, slab 할당자(allocator)

by 무브영/movewoo0 2021. 3. 11.
728x90
반응형

안녕하세요 이번 포스팅에서는 /proc/meminfo 의 내용 중에서 'Slab' 으로 표현되는 메모리 영역에 대해 써보도록 하겠습니다.

 

 

 


 

0. Slab 메모리 영역

위의 사진에서 'Slab' 으로 명시되는 부분은 간단하게 설명하자면 '커널이 내부적으로 사용하는 영역'입니다.

 

커널 역시 프로세스의 일종이기 때문에 메모리를 필요로 하고, 다른 프로세스들보다 특별한 방법으로 메모리를 할당받아서 사용하는데 이 과정에서 쓰이는 공간이 Slab입니다.

 

빨간색으로 표시한 부분들이 Slab에 관련된 메모리입니다.


간단히 설명하자면

-Slab:
메모리 영역 중 커널이 직접 사용하는 영역, Dentry cache, inode cache등 커널이 사용하는 메모리가 포함됩니다.

-SReclaimable:
Slab 영역 중 재사용될 수 있는 영역, 캐시 용도로 사용하는 메모리들이 주로 여기 포함됩니다. 해제되어 프로세스에게 할당될 수 있는 영역입니다.

-SUnreclaim:
Slab 영역 중 재사용될 수 없는 영역, 커널이 현재 사용 중인 영역이고 해제해서 다른 용도로 사용할 수 없습니다.

1. slabtop 명령으로 Slab 정보 보기

slab 영역에 대해서 더 자세히 보기 위해서 slabtop 명령을 활용할 수 있습니다.

 

시스템에서 slab이 어떻게 사용하고 있는지에 대해 정보를 알 수 있습니다.

모든 프로세스는 각각의 작업을 위해 메모리가 필요하고 커널도 같습니다.

 

I/O 작업을 조금 더 효율적으로 하기 위해 dentry cache 또는 inode cache 등을 사용하게 되는데 이는 위의 사진에서도 'dentry(directory entry)', 'xfs_inode' 등과 같이 확인할 수 있습니다.

 

이러한 커널의 작업들은 사실 큰 메모리 영역이 필요하진 않습니다.


그렇지만 메모리를 할당해주는 버디 시스템은 4KB의 페이지 단위로 메모리를 할당합니다.

 

이 차이의 간극 때문에 커널이 실제 사용하는 영역과 할당 받은 영역의 차이가 커지면서 메모리 단편화 현상이 발생할 수 있습니다.


그렇기 때문에 커널이 사용하려는 메모리 영역은 좀 더 작고 효율적으로 사용할 수 있어야 합니다.

이를 위해서 커널은 slab 할당자(allocator)를 통해서 원하는 메모리 영역을 확보합니다.

 

 


 

 

2. Slab 할당자(allocator)

slab 할당자는 각각의 목적에 맞는 캐시별로 영역을 할당 받아서 사용합니다.
예를 들면 아래와 같이 표현할 수 있습니다.

위의 그림의 예를 보면 Slab 할당자는 각각의 목적에 맞는 캐시별로 영역을 할당 받아 사용합니다.

 

inode cache, dentry cache 등의 목적별로 공간이 나뉘어져 있으며 이렇게 기본 4KB의 영역을 할당 받은 후에 각각의 캐시 크기에 맞게 영역을 나눠서 사용합니다.


그래서 몇몇 경우에는 페이지 크기의 배수로 딱 떨어지지 않고 두개의 페이지 사이에 걸쳐있는 경우도 존재할 수 있습니다.

 

 


 

본 포스팅의 내용 및 이미지를 무단 전재, 재배포 또는 복사를 금지합니다.

인용 시 출처와 같이 공개해주세요!

도움이 되셨다면 댓글 또는 공감 부탁드립니다!

728x90
반응형

댓글