페이지 캐시

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.09
조회수
3
버전
v1

페이지 캐시

캐시(Page Cache)는 운영체제가 디스크 I/O(입출력) 성능을 향상시키기 위해 사용하는 핵심 메커니즘 중 하나로, 자주 접근되는 파일 데이터를 메모리에 저장하여 반복적인 디스크 읽기 작업을 줄이는 기술입니다. 특히 리눅스와 같은 현대 운영체제에서 중요한 역할을 하며, 시스템 전반의 반응 속도와 처리 효율에 큰 영향을 미칩니다.

개요

디스크는 RAM(랜덤 액세스 메모리)에 비해 접근 속도가 수천 배에서 수십만 배 느리기 때문에, 운영체제는 디스크에서 읽은 데이터를 메모리에 캐시하여 향후 요청 시 빠르게 제공합니다. 이 캐시된 데이터의 단위는 일반적으로 페이지(page)이며, 일반적으로 x86 아키텍처 기준으로 4KB 크기를 가집니다. 이러한 메모리 기반의 캐시를 페이지 캐시라고 부릅니다.

페이지 캐시는 파일 시스템과 밀접하게 연동되며, 디스크에서 읽은 파일 데이터뿐만 아니라, 아직 디스크에 쓰이지 않은 수정된 데이터(더티 페이지, dirty page)도 포함될 수 있습니다.


페이지 캐시의 작동 원리

1. 읽기 캐시 (Read Caching)

파일을 처음 읽을 때 운영체제는 디스크에서 데이터를 로드하고, 이를 메모리의 페이지 캐시에 저장합니다. 이후 동일한 파일의 동일한 부분을 다시 읽을 경우, 운영체제는 디스크를 다시 접근하지 않고 페이지 캐시에서 직접 데이터를 제공합니다.

예를 들어, 웹 서버가 자주 요청되는 정적 파일(예: index.html)을 제공할 때, 이 파일은 한 번 디스크에서 읽힌 후 페이지 캐시에 남아 있어 반복 요청 시 매우 빠르게 서비스됩니다.

2. 쓰기 캐시 (Write Caching)

데이터를 파일에 쓸 때도 페이지 캐시를 활용합니다. 사용자 프로그램이 파일을 쓰면, 운영체제는 먼저 해당 데이터를 페이지 캐시에 저장하고, 이를 "더티 페이지(dirty page)"로 표시합니다. 이후 백그라운드에서 이 더티 페이지를 디스크에 순차적으로 기록합니다.

이 방식은 다음과 같은 장점을 제공합니다: - 성능 향상: 즉각적인 디스크 쓰기를 회피하여 쓰기 지연을 줄임 - 순차 쓰기 최적화: 여러 개의 작은 쓰기를 모아서 한 번에 큰 블록으로 기록 - 전력 효율: 디스크 활성화 횟수를 줄여 전력 소모 감소

하지만 이로 인해 데이터 무결성 위험도 존재합니다. 시스템 충돌 시 더티 페이지가 디스크에 기록되지 않아 데이터 손실이 발생할 수 있습니다. 이를 방지하기 위해 [fsync](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/API/fsync)() 같은 시스템 콜을 사용하여 강제로 디스크에 기록하도록 할 수 있습니다.


페이지 캐시와 버퍼 캐시의 차이

과거 운영체제에서는 버퍼 캐시(Buffer Cache)와 페이지 캐시(Page Cache)를 별도로 관리했습니다. 버퍼 캐시는 블록 장치의 원시 블록 데이터를 캐시하고, 페이지 캐시는 파일 데이터를 캐시하는 방식이었습니다.

하지만 현대 리눅스 커널(2.4 이후)에서는 이 두 개념이 통합되어 统합 캐시(Unified Page Cache)로 운영됩니다. 즉, 파일 시스템 레벨의 데이터도 블록 장치 데이터도 모두 페이지 캐시를 통해 관리됩니다. 이로 인해 메모리 사용 효율이 향상되고, 중복 캐싱을 방지할 수 있습니다.


페이지 캐시의 관리

운영체제는 메모리가 부족해질 경우 페이지 캐시에서 일부 데이터를 제거하여 메모리를 확보합니다. 이 과정은 일반적으로 LRU(Least Recently Used) 또는 2Q, Working Set 기반 알고리즘으로 수행됩니다.

리눅스에서는 다음과 같은 방식으로 페이지 캐시를 모니터링하고 관리할 수 있습니다:

시스템 정보 확인 명령어

# 현재 메모리 사용 상태 확인 (페이지 캐시 포함)
free -h

# 상세한 캐시 정보 (버퍼, 캐시 등)
cat /proc/meminfo | grep -i cache

출력 예:

Cached:            4567892 kB
Buffers:            123456 kB

여기서 Cached 필드는 페이지 캐시의 크기를 나타냅니다.

페이지 캐시 비우기 (테스트 용도)

# 페이지 캐시, dentries, inodes 캐시 강제 정리
echo 3 > /proc/sys/vm/drop_caches

⚠️ 주의: 프로덕션 환경에서 이 명령어를 사용하면 성능이 급격히 저하될 수 있습니다.


성능 최적화와 튜닝

페이지 캐시는 대부분 자동으로 최적화되지만, 다음과 같은 설정을 통해 조정할 수 있습니다:

  • /proc/sys/vm/[vfs_cache_pressure](/doc/%EA%B8%B0%EC%88%A0/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/%EC%84%B1%EB%8A%A5%20%ED%8A%9C%EB%8B%9D/vfs_cache_pressure): 커널이 dentry와 inode 캐시를 얼마나 공격적으로 회수할지 결정
  • /proc/sys/vm/[swappiness](/doc/%EA%B8%B0%EC%88%A0/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/%EC%84%B1%EB%8A%A5%20%ED%8A%9C%EB%8B%9D/swappiness): 메모리 부족 시 스와핑보다 페이지 캐시를 얼마나 유지할지 조절 (0~100, 기본값 60)

예:

# 페이지 캐시 유지 우선 (스와핑 줄임)
echo 10 > /proc/sys/vm/swappiness


관련 개념

개념 설명
Page Fault 요청한 페이지가 메모리에 없을 때 발생하는 인터럽트. 페이지 캐시에 있으면 빠르게 해결됨
Dirty Page 메모리에 수정된 데이터가 있지만 디스크에 아직 기록되지 않은 페이지
Writeback 더티 페이지를 디스크에 기록하는 백그라운드 작업
Memory Mapping (mmap) 파일을 메모리에 매핑하여 페이지 캐시와 직접 접근 가능하게 함

참고 자료


페이지 캐시는 운영체제의 성능과 안정성에 핵심적인 역할을 하는 메커니즘으로, 시스템 관리자와 개발자가 성능 문제를 분석하고 최적화할 때 반드시 이해해야 하는 개념입니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?