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 과정
- Slab 요청: 특정 커널 객체(예: Dentry, Inode) 생성 시 메모리 요청.
- 캐시 확인: Slab Allocator는 해당 객체의 캐시를 확인.
- 기존 Slab에 빈 공간이 있으면 할당.
- Slab이 가득 찼다면 새로운 Slab 생성.
- 메모리 반환: 객체 사용 종료 시 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/meminfo
와slabtop
을 사용해 캐시 및 Slab 메모리를 모니터링할 수 있습니다.- 이러한 메모리 관리 기법은 파일 시스템 성능 최적화와 안정성을 유지하는 데 필수적입니다.
제목
Linux free
명령어와 Dentry Cache, Slab 메모리 개념 완벽 정리
태그
Linux
, free 명령어
, Dentry Cache
, Slab 메모리
, 메모리 관리
, 파일시스템
, 서버 관리
, Linux 캐시
, Linux 명령어
, 초보자 가이드
목차
free
명령어란?- Memory 종류와 개념
- Dentry Cache와 Slab 메모리 개념
- 각 Memory의 특징
- Slab Allocator 동작 원리
- 구체적인 사례와 활용 방법
728x90
'프로그래밍공부(Programming Study) > 운영체제(OS)' 카테고리의 다른 글
CPU와 메모리 기본 개념 (2) | 2024.09.23 |
---|---|
CPU, Dispatcher, Scheduler, Run Queue, Task: 개념과 동작 원리 (6) | 2024.09.22 |
macOS에서 `smartctl`, `lspci`, `ethtool` 명령어 사용하기: 대체 방법과 설치 가이드 (3) | 2024.09.20 |
macOS에서 `free` 명령어를 대신하는 방법: 메모리 사용량 확인하기 (1) | 2024.09.19 |
멜트다운(Meltdown)과 스펙터(Spectre): CPU 보안 취약점의 이해 (0) | 2024.09.19 |
댓글