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
- Speed Buffer: 램을 디스크의 대리인으로 세워 속도를 속이는 '캐싱'의 기틀을 배웁니다.
- The Descent: 유저의 요청이 커널의 여러 층계(Stack)를 내려가 물리 전선에 도달하는 과정을 익힙니다.
- Dirty Tracking: 메모리에서만 수정된 데이터에 '더럽다(Dirty)'는 딱지를 붙여 감시하는 법을 분석합니다.
- 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: 파일 오프셋을 입력하면 캐시 인덱스를 반환하는 시스템 캐시 논리 모델링
Recommended
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: 주기적(), 혹은 임계치 초과 시 발생하는 디스크 동기화 이벤트
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
8. References
Primary
- [P2] SWEBOK v4.0 - Software Construction / Runtime Efficiency (I/O) — Performance context.
- [P1] CS2023 - OS/Operating System Principles (I/O Management) — Core requirements.
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 시절의 알고리즘과 왜 물리적으로 다르게 설정되어야 하는지 기술할 수 있는 가?