프로그래밍공부(Programming Study)/운영체제(OS)

Linux `free` 명령어와 Dentry Cache, Slab 메모리 개념 완벽 정리

Chann._.y 2024. 11. 25.
728x90

1. free 명령어란?

Linux free 명령어는 시스템 메모리 상태를 확인하기 위한 기본 도구입니다. 이 명령은 물리적 메모리와 스왑 메모리 상태뿐만 아니라 버퍼/캐시 메모리의 사용량도 보여줍니다. 이는 시스템의 성능 및 메모리 사용 최적화를 이해하는 데 유용합니다.


2. Memory 종류와 개념

free 명령어에서 확인할 수 있는 주요 메모리 항목:

  • Mem(Total/Used/Free): 물리적 RAM
  • Shared: 여러 프로세스 간 공유 메모리
  • Buffers: 디스크 메타데이터(예: 디렉터리 구조) 캐시
  • Cached: 파일 I/O 데이터를 캐싱하여 성능 최적화
  • Available: 버퍼 및 캐시를 포함하여 프로세스가 사용할 수 있는 메모리
  • Swap: 디스크 기반 가상 메모리

3. Dentry Cache와 Slab 메모리 개념

3.1 Dentry Cache (Directory Entry Cache)

  • Dentry Cache는 디렉터리 엔트리(파일 이름 및 경로)에 대한 정보를 캐싱합니다.
  • 파일 시스템에서 파일 탐색 및 열기 작업의 속도를 개선하는 데 사용됩니다.
  • 주요 역할:
    • 디렉터리 탐색 시 반복적인 디스크 I/O를 줄임.
    • 파일 경로를 빠르게 확인 가능.
  • Dentry Cache는 버퍼 캐시(Buffer Cache)와는 다른 목적을 가지며, 경로 탐색 및 파일 이름 매칭 속도를 높이는 데 특화되어 있습니다.

3.2 Slab 메모리와 Slab Allocator

  • Slab Allocator는 커널의 메모리 관리 시스템으로, 효율적으로 객체를 할당하고 관리하는 데 사용됩니다.
  • Slab 메모리는 커널 데이터 구조를 저장하기 위한 메모리 공간입니다.
  • 주요 용도:
    • Dentry, Inode, 파일 디스크립터, 네트워크 버퍼 같은 자주 사용되는 고정 크기 객체의 메모리 관리.
    • 메모리 파편화를 줄이고 성능 최적화.
  • Slab Allocator 구성:
    • Slab: 실제로 객체를 저장하는 메모리 블록.
    • Cache: 같은 종류의 객체를 관리하는 구조.
    • Page: Slab이 할당되는 물리적 메모리 페이지.

4. 각 Memory의 특징

4.1 Buffers

  • 디스크 장치의 메타데이터(디렉터리와 Inode 등)를 캐싱.
  • 파일 시스템의 디스크 I/O를 최적화.

4.2 Cached

  • 파일 내용이나 프로그램 데이터를 캐싱.
  • 디스크 I/O 없이 데이터를 빠르게 제공.

4.3 Dentry Cache

  • 파일 경로 탐색 속도를 높임.
  • 파일 시스템 작업의 효율성을 극대화.

4.4 Slab 메모리

  • 커널에서 자주 사용되는 고정 크기 객체의 메모리 관리를 담당.
  • Slab 캐시를 통해 효율적으로 할당 및 해제.

5. Slab Allocator 동작 원리

5.1 Slab Allocation 과정

  1. Slab 요청: 특정 커널 객체(예: Dentry, Inode) 생성 시 메모리 요청.
  2. 캐시 확인: Slab Allocator는 해당 객체의 캐시를 확인.
    • 기존 Slab에 빈 공간이 있으면 할당.
    • Slab이 가득 찼다면 새로운 Slab 생성.
  3. 메모리 반환: 객체 사용 종료 시 Slab으로 반환.

5.2 Slab Allocator 장점

  • 메모리 파편화 감소.
  • 객체 생성 및 소멸 속도 향상.
  • 고정 크기 객체의 효율적 관리.

6. 구체적인 사례와 활용 방법

6.1 Dentry Cache 확인

Dentry Cache의 크기와 상태는 /proc/meminfo를 통해 확인할 수 있습니다:

$ cat /proc/meminfo | grep -i dentry
SReclaimable:     123456 kB
SUnreclaim:        65432 kB
  • SReclaimable: 재사용 가능한 Slab 메모리 (주로 Dentry/Inode Cache).
  • SUnreclaim: 반환 불가능한 Slab 메모리.

6.2 Slab 메모리 확인

slabtop 명령어를 사용하면 실시간 Slab 메모리 사용량을 확인할 수 있습니다:

$ slabtop
 Active / Total Objects (% used)    : 45678 / 50000 (91%)
 Active / Total Slabs (% used)      : 1234 / 1500 (82%)
 Cache Name                         : dentry, inode, file, buffer_head

6.3 Python으로 Dentry Cache 데이터 추출

Python을 활용해 /proc/meminfo에서 Dentry 관련 데이터를 추출하는 예시입니다:

def parse_dentry_cache():
    with open("/proc/meminfo", "r") as f:
        lines = f.readlines()
        dentry_info = {line.split(":")[0]: line.split(":")[1].strip()
                       for line in lines if "Reclaim" in line or "Unreclaim" in line}
    return dentry_info

if __name__ == "__main__":
    dentry_data = parse_dentry_cache()
    print("Dentry Cache Information:", dentry_data)

요약

  • Dentry Cache는 디렉터리 탐색 속도를 높이고, Slab 메모리는 커널 객체를 효율적으로 관리합니다.
  • free 명령어는 전체적인 메모리 상태를 확인하는 기본 도구이며, 추가로 /proc/meminfoslabtop을 사용해 캐시 및 Slab 메모리를 모니터링할 수 있습니다.
  • 이러한 메모리 관리 기법은 파일 시스템 성능 최적화와 안정성을 유지하는 데 필수적입니다.

제목

Linux free 명령어와 Dentry Cache, Slab 메모리 개념 완벽 정리

태그

Linux, free 명령어, Dentry Cache, Slab 메모리, 메모리 관리, 파일시스템, 서버 관리, Linux 캐시, Linux 명령어, 초보자 가이드


목차

  1. free 명령어란?
  2. Memory 종류와 개념
  3. Dentry Cache와 Slab 메모리 개념
  4. 각 Memory의 특징
  5. Slab Allocator 동작 원리
  6. 구체적인 사례와 활용 방법

728x90

댓글