스와핑 (Swapping)

핵심 인사이트 (3줄 요약)

  1. 본질: 스와핑 (Swapping)은 메모리 부족 시 실행 중인 프로세스 전체(또는 페이지 단위)를 디스크의 백킹 스토어 (Backing Store)로 이동시켜 메모리를 확보하는 OS 메모리 관리 기법이다.
  2. 가치: 스와핑은 물리 메모리를 초과하는 총 프로세스 메모리를 실행 가능하게 하는 다중 프로그래밍 (Multiprogramming)의 핵심 메커니즘으로, 물리 메모리 한계를 SW적으로 초월한다.
  3. 융합: 현대 OS는 전체 프로세스 스와핑 대신 **페이지 단위 스와핑 (Paging-based Swapping)**을 사용하며, 스왑 공간, 스왑 데몬 (kswapd), OOM Killer와 연동하여 메모리 압박을 자동으로 관리한다.

Ⅰ. 개요 및 필요성

물리 메모리 (DRAM) 크기는 유한하다. 동시에 실행되는 프로세스들의 총 메모리 요구량이 물리 메모리를 초과하면, OS는 일부 프로세스를 디스크로 내보내야 한다.

💡 비유: 작은 책상(RAM)에 올려둔 책(프로세스)들이 너무 많으면, 지금 안 보는 책은 서랍(디스크 스왑 영역)에 잠시 넣는 것.

┌──────────────────────────────────────────────────────────────┐
│         스와핑 동작 흐름                                     │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  [메모리 부족 감지]                                          │
│       │                                                      │
│       ▼                                                      │
│  [스왑 아웃 (Swap Out)]                                      │
│  ● OS가 희생 프로세스(Victim) 선택                           │
│  ● 프로세스 메모리 전체를 디스크 스왑 공간으로 복사          │
│  ● 해당 프레임들을 비워 다른 프로세스에 할당                 │
│                                                              │
│  [실행 준비된 스왑 아웃 프로세스]                            │
│       │                                                      │
│       ▼                                                      │
│  [스왑 인 (Swap In)]                                         │
│  ● 스왑 공간에서 프로세스를 메모리로 복원                    │
│  ● 주소 바인딩 재수행 (실행 시간 바인딩 필요)                │
│  ● CPU 스케줄러가 레디 큐에 배치                             │
│                                                              │
│  스왑 오버헤드 (HDD 기준):                                   │
│  100MB 프로세스 스왑 아웃: 100MB / 50MB/s = 2초              │
│  스왑 인: 추가 2초 → 총 4초 오버헤드!                        │
│  (NVMe SSD: ~200ms로 단축)                                   │
└──────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: 스와핑은 좁은 주방(RAM)에서 지금 안 쓰는 냄비(프로세스)를 창고(디스크)로 잠시 옮기는 것 — 새 냄비를 올릴 공간이 생기지만, 다시 꺼내오는 데 시간이 걸립니다.


Ⅱ. 아키텍처 및 핵심 원리

표준 스와핑 vs 페이징 기반 스와핑

항목표준 스와핑 (전체 프로세스)페이징 기반 스와핑 (현대)
단위전체 프로세스페이지 (4KB)
I/O 크기수십~수백MB최소 4KB
오버헤드매우 큼작음
유연성낮음높음 (워킹 셋 유지)
현대 OS거의 사용 안 함기본 사용

Linux kswapd 데몬 동작

┌──────────────────────────────────────────────────────────────┐
│         Linux 메모리 회수 흐름 (kswapd + OOM Killer)         │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  메모리 사용량 임계값:                                       │
│  ● min / low / high 워터마크                                 │
│                                                              │
│  [high 이상]: 정상 운영                                      │
│  [low ~ high]: kswapd 백그라운드 회수 시작                   │
│    ● 파일 캐시(file-backed) 페이지 먼저 제거                 │
│    ● 익명(anonymous) 페이지는 스왑 공간으로                  │
│  [min 미만]: 직접 회수 (Synchronous Direct Reclaim)          │
│    → 메모리 할당 요청 스레드가 직접 페이지 회수              │
│    → 심각한 레이턴시 유발                                    │
│  [완전 고갈]: OOM Killer 발동                                │
│    → oom_score 기반으로 희생 프로세스 선택 후 SIGKILL        │
│                                                              │
│  명령어:                                                     │
│  swapon -s           # 스왑 사용 현황                        │
│  free -h             # RAM·스왑 전체 현황                    │
│  vmstat 1            # 스왑 인/아웃 속도 모니터링            │
└──────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: kswapd는 청소부 — 방(메모리)이 너무 꽉 차기 전에 미리 안 쓰는 물건을 창고(스왑)로 옮겨요. OOM Killer는 창고마저 꽉 찼을 때 가장 큰 짐을 들고 있는 사람(프로세스)에게 나가달라고 하는 보안 요원이에요.


Ⅲ. 융합 비교 및 다각도 분석

스왑 공간 종류

종류특성설정
스왑 파티션전용 디스크 파티션, 빠름/dev/sda2 swap
스왑 파일일반 파일시스템 파일, 유연fallocate + swapon
zRAMRAM을 압축해 스왑 공간으로modprobe zram
zswap압축 후 스왑 파티션으로쓰기 전 압축 캐시

zRAM은 Android 스마트폰에서 널리 사용. 실제 디스크 I/O 없이 RAM 내 압축 공간을 스왑으로 사용하여 빠른 스와핑을 지원한다.

📢 섹션 요약 비유: zRAM은 서랍에 진공 압축팩으로 옷을 넣는 것 — 작은 서랍에 더 많은 옷(프로세스)을 넣을 수 있어요.


Ⅳ. 실무 적용 및 기술사적 판단

실무 시나리오:

  1. SSD 기반 서버: NVMe SSD로 스왑하면 HDD 대비 10~50배 빠름. 단, SSD 수명(TBW) 소모 주의.
  2. 클라우드 VM 메모리 과도할당: Hypervisor가 VM들의 총 메모리를 물리 메모리보다 많이 할당하고 스와핑으로 관리 (Balloon Driver + Swap).

안티패턴:

  • 스왑 없는 서버: OOM 상황에서 즉시 프로세스 종료 위험. 작은 스왑 버퍼(2~4GB)라도 유지 권장.
  • 과도한 스와핑 (Thrashing): 프로세스가 실행될 때마다 스왑 인/아웃이 반복되어 CPU가 스와핑에만 95% 소비 → 전체 처리량 급락.

📢 섹션 요약 비유: 스래싱(Thrashing)은 좁은 책상에 책을 계속 서랍에서 꺼내고 넣기를 반복하다 실제 공부는 못 하는 상황 — 이사 자체가 일이 돼버린 비효율입니다.


Ⅴ. 기대효과 및 결론

구분스와핑 없음스와핑 적용
다중 프로그래밍 수준물리 메모리에 제한물리 메모리 초과 실행 가능
메모리 부족 시즉시 OOM/크래시스왑으로 완충
I/O 오버헤드없음스왑 I/O 레이턴시

스와핑은 OS의 메모리 초과 할당을 가능하게 하는 필수 메커니즘이다. 현대에는 페이지 단위 스와핑+zRAM으로 오버헤드를 최소화하며, kswapd의 선제적 회수와 OOM Killer의 최후 방어선으로 메모리 관리 안전망을 구성한다.


📌 관련 개념 맵

개념관계
백킹 스토어 (Backing Store)스왑 아웃된 데이터를 저장하는 디스크 공간
요구 페이징 (Demand Paging)페이지 단위 스와핑의 발전 형태
kswapdLinux 커널 스왑 데몬
OOM Killer메모리 완전 고갈 시 프로세스 종료
스래싱 (Thrashing)과도한 스와핑으로 처리량이 급감하는 현상

👶 어린이를 위한 3줄 비유 설명

  1. 스와핑은 책상(RAM)이 꽉 찼을 때 안 보는 책(프로세스)을 서랍(디스크)에 잠깐 넣는 것이에요.
  2. 나중에 그 책이 필요하면 서랍에서 다시 꺼내서 책상 위에 올리는데 — 이게 스왑 인이에요!
  3. 서랍이 너무 느려서 책 넣었다 꺼냈다만 반복하면 공부(연산)는 하나도 못 해요 — 이를 스래싱이라고 해요!