콘텐츠로 바로가기

Page Cache & I-O Stack

디스크의 느린 물리적 속도를 극복하기 위해 메모리를 버퍼로 사용하는 페이지 캐시 시스템과, 사용자 요청이 하드웨어 전선까지 도달하는 OS 내부의 입출력 경로를 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

페이지 캐시 및 I/O 스택(Page Cache & I/O Stack, PCI)은 운영체제가 램(RAM)이라는 고속 도로와 디스크(Disk)라는 비포장도로 사이의 물리적 속도 격차를 '메모리 웅덩이'로 완충하는 지능형 통로입니다.

CPU는 엄청나게 빠르지만, 디스크에서 데이터를 가져오는 행위는 물리적으로 수천 배 더딥니다. 학습자는 OS가 한 번 읽은 디스크 데이터를 메모리에 고여 있게 만드는 **페이지 캐시(Page Cache)**의 물리적 가두기 원리를 배웁니다. 또한, 사용자가 read() 명령을 내렸을 때 데이터가 파일 시스템, 블록 계층, 장치 드라이버를 거쳐 실제 자석판이나 플래시 메모리에 도달하는 I/O 스택의 계층별 물리 가공 과정을 분석합니다. 이를 통해 앱의 입출력 성능을 수십 배 이상 끌어올리는 시스템 물리 최적화 능력을 확보합니다.

2. Scope & Boundaries

In-Scope

  • Page Cache Mechanics: 파일 데이터를 물리 메모리 페이지로 캐싱하는 논리 및 관리
  • I/O Stack Layers: VFS -> File System -> Block Layer -> Driver -> Hardware 물리 시퀀스
  • Write Policy: 지연 쓰기(Write-back)와 즉시 쓰기(Write-through)의 물리적 일관성 차이
  • Dirty Page Management: 수정되었으나 아직 디스크에 안 적힌 데이터의 물리적 추적 및 비우기(Flush)

Out-of-Scope

  • 하드웨어 디스크 내부의 섹터 읽기/쓰기 물리 알고리즘 (03-04-01 노드에서 분담)
  • 데이터베이스 고유의 인메모리 버퍼 매니저 (06-03-XX DB 기술 노드에서 분담)

Boundaries

  • PCI vs. VFS: VFS가 '파일이라는 이름의 이름표'를 관리한다면, PCI는 '파일 내부의 실제 바이트 데이터가 흐르는 물리 관로와 저장소'를 다룹니다.

3. Counterexample

  • 단순히 "파일을 빨리 읽게 해준다"는 설명은 PCI 학습이 아닙니다. 왜 Direct I/O를 쓰면 운영체제의 페이지 캐시를 건너뛰고 물리 메모리에서 직접 디스크로 데이터를 쏘는지 그 하드웨어적 우회 경로를 설명할 수 있어야 합니다. 또한, 캐시에 담긴 **더티 페이지(Dirty Page)**가 갑작스러운 정전에 의해 왜 손실될 수밖에 없는지 물리적 휘발성과 저장소 타이밍 관점에서 입증하지 못한다면 PCI의 실전적 의미를 이해하지 못한 것입니다.

4. Prerequisites

  • Virtual Memory & Paging (Basic): 페이지 단위의 메모리 관리 기초가 필수입니다. (03-03-01 VMP)
  • Disk, SSD & Flash Internals (Recommended): 저장 매체의 물리적 속도 특성 이해가 권장됩니다. (02-02-05 DSF)

5. Learning Map

  1. Speed Buffer: 램을 디스크의 대리인으로 세워 속도를 속이는 '캐싱'의 기틀을 배웁니다.
  2. The Descent: 유저의 요청이 커널의 여러 층계(Stack)를 내려가 물리 전선에 도달하는 과정을 익힙니다.
  3. Dirty Tracking: 메모리에서만 수정된 데이터에 '더럽다(Dirty)'는 딱지를 붙여 감시하는 법을 분석합니다.
  4. Flushing Physics: 고여 있던 데이터 웅덩이를 한 번에 디스크로 흘려보내 일관성을 맞추는 물리를 완성합니다.

6. Learning Topics

Basic

Core: 페이지 캐시의 물리적 구조 (Page Cache Internals)

  • Why to Learn: 현대 컴퓨터가 왜 메모리가 클수록 파일 처리가 빨라지는지 그 수리적 근거이기 때문입니다.
  • What to Learn:
    • Buffer Cache vs Page Cache: 현대 OS에서 두 개념의 물리적 통합
    • Radix Tree / XArray: 캐시된 페이지를 광속으로 찾기 위한 커널 내 데이터 물리 배치
    • Hit vs Miss Physics: 캐시에 데이터가 있을 때와 없을 때의 시스템 지연 시간 격차
  • How to Learn:
    • free -m 명령어로 시스템 메모리 중 'buff/cache' 영역이 작업량에 따라 어떻게 물리적으로 변하는지 관찰 실습
    • 동일한 대용량 파일을 두 번 연속 읽었을 때의 소요 시간 차이를 측정하여 캐시 효과 수치화
  • Implement: 파일 오프셋을 입력하면 캐시 인덱스를 반환하는 시스템 캐시 논리 모델링

Core: 입출력 스택의 계층과 경로 (The I/O Path)

  • Why to Learn: 입출력 병목이 어느 계층에서 발생하는지 알아야 하드웨어 성능을 100% 쓸 수 있기 때문입니다.
  • What to Learn:
    • Block Layer: 개별적인 바이트 요청을 덩어리(Block)로 묶어 처리하는 물리적 효율 기법
    • I/O Scheduling: 디스크 헤드의 움직임을 최소화하기 위해 요청 순서를 바꾸는 물리 논리
    • Device Driver Interface: 커널 추상화를 하드웨어 핀 신호로 전달하는 최종 전선
  • How to Learn:
    • iostat 도구를 사용하여 블록 장치의 대기열(Queue) 깊이와 응답성의 물리적 상관관계 분석 실습
    • 커널 내의 I/O 경로를 다이어그램으로 그리고, 데이터가 지나가는 물리적 체크포인트 명시
  • Implement: 특정 파일 요청이 들어왔을 때 VFS부터 Driver까지 거쳐야 하는 계층 순서를 출력하는 리포트

Practical

Core: 지연 쓰기와 일관성 보증 (Write-back & Sync)

  • Why to Learn: 데이터의 전송 성능과 저장의 안정성 사이의 물리적 줄타기를 조율하기 위함입니다.
  • What to Learn:
    • Write-back Cache: 메모리에만 쓰고 즉시 리턴하여 앱의 물리적 속도를 높이는 기술
    • Flush Trigger: 주기적(pdflushpdflush), 혹은 임계치 초과 시 발생하는 디스크 동기화 이벤트
    • fsync() Physics: 소프트웨어적으로 강제 동기화를 내려 모든 물리 버퍼를 비우는 과정
  • How to Learn:
    • 대량의 쓰기 작업 도중 전원을 차단했을 때, 디스크에 남은 파일의 물리적 무결성 파괴 현상 분석 실습
    • /proc/sys/vm/dirty_ratio 등의 상수를 바꿔가며 쓰기 성능과 안정성의 물리적 변화 측정
  • Implement: 주기적으로 더티 페이지를 체크하여 디스크 저장 함수를 호출하는 백그라운드 워커 코드

Advanced

Core: Direct I/O와 커널 바이패스 (Zero-copy I/O)

  • Why to Learn: 최고 성능이 필요한 DB나 통신 엔진에서 CPU의 관여 없는 광속 전송을 구현하기 위함입니다.
  • What to Learn:
    • O_DIRECT Flag: 페이지 캐시를 무시하고 유저 메모리에서 하드웨어로 직접 쏘는 경로
    • Memory-mapped I/O (mmap): 파일을 메모리 주소 공간에 사상하여 복사 없이 접근하는 물리 기법
    • Sendfile Mechanics: 네트워크 소켓과 파일 캐시 간의 커널 내 데이터 물리 이동(Zero-copy)
  • How to Learn:
    • read/write 기반 서버와 sendfile 기반 서버의 CPU 점유율 및 네트워크 대역폭 물리 데이터 비교 실습
    • DMA 장치가 페이지 캐시를 거치지 않고 직접 작동할 때의 메모리 일관성(Coherence) 문제 연구
  • Implement: 파일 데이터를 복사 없이 소켓으로 직접 전달하는 고성능 파일 전송 엔진

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
Page Cache 디스크로부터 읽어온 파일 데이터를 물리 메모리 페이지에 상주시켜 재사용하는 커널의 저장소입니다. 기본 속도 완충 Cache / Buffer Cache Memory L1/L2 하드웨어 캐시 아님 P1:CS2023 core
I/O Stack 파일 요청이 앱에서 하드웨어까지 도달하기 위해 거치는 OS 내의 소프트웨어/하드웨어 계층 구조입니다. 기본 데이터 통로 VFS / Block Execution Path '단순한 함수 호출'보다 복잡함 P1:CS2023 core
Dirty Page 메인 메모리에서 내용이 수정되었으나 아직 디스크로 물리적 쓰기가 완료되지 않은 페이지입니다. 추천 쓰기 대기 Write-back / Sync Clean Page '망가진 데이터'라는 뜻 아님 Industry VM core
Zero-copy 유저 공간과 커널 공간 사이의 불필요한 데이터 복사를 하드웨어적/논리적으로 제거하는 성능 기법입니다. 실무 고성능 통신 sendfile / DMA Copy-on-Write '복사가 0번'은 아님(물리 전송 존재) Industry Perf core

8. References

Primary

Secondary

  • [Linux Kernel Development] Robert Love — The Page Cache and Page Writeback.
  • [Understanding the Linux Virtual Memory Manager] Mel Gorman — Buffer/Page management.

Industry

  • [Kernel.org: The Linux I/O Stack Diagram] — De-facto industry standard map.
  • [PostgreSQL Documentation: Reliability and the Write-Ahead Log] — Flush mechanics in practice.

9. Final Checklist

Primary

  • '페이지 캐시'가 왜 CPU 캐시와 달리 '운영체제'에 의해 관리되는 소프트웨어적 물리 공간인지 설명 가능한가? (P1)
  • 입출력 요청이 VFS를 거쳐 실제 장치 드라이버로 도달하기까지의 '물리적 계층 전이' 과정을 소묘할 수 있는 가? (P1)

Secondary

  • '지연 쓰기(Write-back)' 방식이 시스템 성능을 높여주는 수리적 이점과, 데이터 손실 위험 사이의 물리적 상충 관계를 소통 가능한가?
  • 페이지 캐시가 가득 찼을 때, OS가 어떤 물리적 기준으로 기존 캐시를 비우고 새 데이터를 채우는지(Replacement) 도출할 수 있는 가?

Industry

  • 고성능 웹 서버 설계 시, sendfile()이나 mmap()이 사용자/커널 간 물리적 복사를 어떻게 제거하여 TPS를 높이는지 제안할 수 있는 가? (SFIA)
  • SSD 환경에서 블록 계층의 '입출력 스케줄러'가 HDD 시절의 알고리즘과 왜 물리적으로 다르게 설정되어야 하는지 기술할 수 있는 가?