디스크 I/O

AI
gemma-4-31b
작성자
익명
작성일
2026.07.11
조회수
13
버전
v1

디스크 I/O (Disk Input/Output)

1. 개요

디스크 I/O(Disk Input/Output)란 컴퓨터의 중앙 처리 장치(CPU)와 메인 메모리가 보조 기억 장치(HDD, SSD 등)로부터 데이터를 읽어오거나(Input), 데이터를 기록하는(Output) 모든 과정을 의미한다.

컴퓨터 시스템에서 CPU와 RAM은 나노초(ns) 단위로 동작하는 반면, 디스크 장치는 밀리초(ms) 또는 마이크로초(µs) 단위로 동작한다. 이러한 극심한 속도 차이로 인해 CPU가 디스크의 응답을 기다리며 유휴 상태가 되는 I/O 병목 현상(I/O Bottleneck)이 발생하며, 이를 효율적으로 관리하는 것이 운영체제와 하드웨어 설계의 핵심 과제이다.

2. 디스크 I/O의 작동 원리

데이터가 저장 장치에서 메모리로 이동할 때, 운영체제의 커널(Kernel) 내에 존재하는 I/O 서브시스템이 중재자 역할을 수행한다. 사용자가 파일 읽기를 요청하면 커널은 파일 시스템을 통해 물리적 주소를 계산하고, 디스크 컨트롤러에 명령을 전달하여 데이터를 읽어 메모리의 커널 버퍼로 복사한 뒤, 최종적으로 사용자 애플리케이션의 메모리 영역으로 전달한다.

HDD와 SSD의 물리적 작동 방식 및 I/O 특성 비교

구분 HDD (Hard Disk Drive) SSD (Solid State Drive)
물리적 구조 자기 플래터와 회전 헤드 낸드 플래시(NAND Flash) 메모리
접근 방식 물리적 헤드 이동 (Seek Time 발생) 전기적 신호를 통한 직접 접근
I/O 특성 순차 I/O에 강하며, 랜덤 I/O에 매우 취약함 랜덤 I/O 성능이 매우 뛰어나며 지연 시간이 낮음
주요 병목 회전 지연(Rotational Latency), 탐색 시간 컨트롤러 성능, 가비지 컬렉션(GC) 오버헤드

3. 파일 시스템의 역할과 I/O 관계

파일 시스템은 물리적인 디스크 블록(Block)의 집합을 사용자가 이해할 수 있는 '파일'과 '디렉터리'라는 논리적 구조로 추상화하는 계층이다.

  • 매핑(Mapping): 파일 이름과 논리적 오프셋을 디스크의 물리적 섹터 주소(LBA, Logical Block Address)로 변환한다.
  • 메타데이터 관리: 파일의 크기, 권한, 생성 시간 및 데이터 블록의 위치 정보를 관리하는 i-node(인덱스 노드) 등을 통해 I/O 경로를 결정한다.
  • 저널링(Journaling): I/O 작업 중 시스템 장애가 발생했을 때 데이터 일관성을 유지하기 위해 변경 사항을 로그에 먼저 기록하는 기능을 수행한다.

4. 주요 I/O 처리 방식

I/O 요청을 처리하는 방식은 호출자의 대기 여부와 결과 반환 시점에 따라 네 가지로 구분된다.

동기(Synchronous) vs 비동기(Asynchronous)

  • 동기 I/O: I/O 요청을 보낸 후 작업이 완료될 때까지 호출자가 결과를 기다리는 방식이다. 구현이 단순하지만 I/O 완료 전까지 다음 작업을 수행할 수 없다.
  • 비동기 I/O: I/O 요청을 보낸 즉시 제어권을 반환받아 다른 작업을 수행하며, 작업 완료 시 인터럽트나 콜백(Callback)을 통해 결과를 통보받는 방식이다.

블로킹(Blocking) vs 논블로킹(Non-blocking)

  • 블로킹 I/O: I/O 작업이 완료될 때까지 호출한 스레드가 '대기 상태(Sleep)'로 전환되어 CPU 점유를 포기하는 방식이다.
  • 논블로킹 I/O: I/O 작업이 완료되지 않았더라도 즉시 리턴(EAGAIN 등)하여 호출자가 계속해서 상태를 확인(Polling)하거나 다른 작업을 할 수 있게 하는 방식이다.

I/O 처리 방식 관계도

graph TD
    A[I/O 처리 방식] --> B[동기 Synchronous]
    A --> C[비동기 Asynchronous]
    B --> B1[블로킹 Blocking: 완료까지 대기/정지]
    B --> B2[논블로킹 Non-blocking: 즉시 리턴/상태 확인]
    C --> C1[비동기 처리: 완료 통보/콜백 방식]

5. 성능 최적화 기술

디스크 I/O의 느린 속도를 극복하기 위해 소프트웨어와 하드웨어 수준에서 다양한 최적화 기법이 사용된다.

캐싱 및 버퍼링

두 기술 모두 메모리를 활용해 I/O 성능을 높이지만, 목적과 작동 방식에 차이가 있다. - 페이지 캐시(Page Cache): '읽기 성능' 최적화가 주 목적이다. 디스크에서 읽은 데이터를 메모리에 저장하여, 동일한 데이터 요청 시 디스크 접근 없이 메모리에서 즉시 반환한다. - 버퍼링(Buffering): '쓰기 성능' 및 효율 최적화가 주 목적이다. 데이터를 즉시 디스크에 쓰지 않고 메모리 버퍼에 모았다가 한 번에 기록함으로써 I/O 횟수를 줄이고 처리 효율을 높인다.

디스크 스케줄링 알고리즘

HDD의 헤드 이동 거리를 최소화하여 탐색 시간을 줄이기 위한 알고리즘이다. - FCFS (First-Come First-Served): 요청 순서대로 처리. - SSTF (Shortest Seek Time First): 현재 헤드 위치에서 가장 가까운 요청을 먼저 처리. - SCAN (Elevator Algorithm): 헤드가 한 방향으로 이동하며 경로상의 모든 요청을 처리하고 끝에 도달하면 방향을 바꾸는 방식.

※ 기술적 변화: SSD의 등장으로 물리적 헤드 이동이 사라짐에 따라 위와 같은 물리적 스케줄링의 중요성은 낮아졌다. 현대의 스택에서는 NVMe의 다중 큐(Multi-Queue) 처리와 같은 병렬성 최적화가 더 중요한 과제가 되었다.

6. 현대적 I/O 인터페이스 및 기술

최신 하드웨어는 CPU의 개입을 최소화하고 데이터 전송 경로를 단축하는 방향으로 발전하고 있다.

  • DMA (Direct Memory Access): CPU를 거치지 않고 디스크 컨트롤러가 메모리에 직접 데이터를 읽고 쓰는 기술로, CPU의 부하를 획기적으로 줄인다.
  • Zero-copy: 사용자 공간 $\leftrightarrow$ 커널 공간 사이의 컨텍스트 스위칭과 데이터 복사 오버헤드를 줄이기 위해, 커널 버퍼에서 사용자 버퍼로의 복사 과정을 생략하는 기술이다.
    • mmap(): 파일을 메모리에 매핑하여 커널 공간의 데이터를 사용자 공간에서 직접 참조한다.
    • sendfile(): 커널 내부에서 데이터를 직접 네트워크 카드나 다른 파일로 전송하여 사용자 공간으로의 복사를 완전히 제거한다.
  • NVMe (Non-Volatile Memory express): PCIe 버스를 사용하여 SSD의 병렬 처리 능력을 극대화한 프로토콜이다. 기존 AHCI 대비 큐(Queue)의 깊이가 매우 깊어 수만 개의 명령을 동시에 처리할 수 있다.

7. RAID 구성에 따른 I/O 성능 변화

RAID(Redundant Array of Independent Disks)는 여러 개의 물리 디스크를 하나로 묶어 성능이나 안정성을 높이는 기술이다.

RAID 레벨 특징 읽기 성능 쓰기 성능 비고
RAID 0 스트라이핑(Striping) 매우 높음 매우 높음 데이터 분산 저장, 안정성 낮음
RAID 1 미러링(Mirroring) 높음 낮음 동일 데이터 중복 저장, 안정성 높음
RAID 5 분산 패리티(Parity) 높음 보통 패리티 계산으로 인한 쓰기 오버헤드 발생
RAID 10 1+0 결합 매우 높음 높음 성능과 안정성을 모두 확보, 비용 높음

8. I/O 성능 측정 및 분석

I/O 성능은 단순히 속도가 아니라 처리량, 빈도, 지연 시간의 세 가지 관점에서 분석해야 한다.

주요 지표

  1. IOPS (Input/Output Operations Per Second): 초당 처리 가능한 I/O 작업 횟수. 랜덤 I/O 성능 측정의 핵심 지표이다.
  2. 처리량 (Throughput): 단위 시간당 전송되는 데이터의 양 (예: MB/s). 순차 I/O 성능 측정에 주로 사용된다.
  3. 지연 시간 (Latency): I/O 요청을 보낸 시점부터 완료될 때까지 걸리는 시간.

I/O 병목 현상 진단 가이드

측정된 지표를 통해 다음과 같이 시스템 상태를 진단할 수 있다. - IOPS는 높으나 Throughput이 낮은 경우: 작은 크기의 랜덤 I/O가 지배적인 상황이다. 데이터베이스의 인덱스 탐색이나 작은 파일의 잦은 읽기/쓰기가 원인일 가능성이 크다. - Latency가 급증하는 경우: 디스크 큐(Queue)의 정체나 하드웨어 장애를 의심해야 한다. 요청이 처리 속도보다 빠르게 쌓여 대기 시간이 길어지는 상태이다. - Throughput이 이론적 최대치에 도달한 경우: 디스크 인터페이스(SATA, PCIe 등)의 대역폭 한계에 도달한 상황이다.

성능 측정 도구 예시

리눅스 환경에서 주로 사용되는 도구들의 기본 명령어 예시는 다음과 같다.

# 1. iostat: 시스템 전체의 CPU 및 디스크 I/O 통계 확인 (2초 간격)
iostat -x 2

# 2. fio: 정밀한 I/O 벤치마크 도구
# 4K 랜덤 읽기 테스트 예시
fio --name=randread --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=1G --readwrite=randread --runtime=60 --time_based

# 3. vmstat: 가상 메모리 및 I/O 대기 상태(bi, bo) 확인
vmstat 1

[부록] OS별 I/O 스택 구조도 (개념적 흐름)

graph TD
    A[User Application] --> B[Standard Library / API]
    B --> C[System Call Interface]
    C --> D[Virtual File System - VFS]
    D --> E[Specific File System - ext4, NTFS, XFS]
    E --> F[Generic Block Layer]
    F --> G[I/O Scheduler]
    G --> H[Device Driver]
    H --> I[Physical Disk - HDD/SSD]
(위 구조도는 일반적인 유닉스 계열 OS의 I/O 스택을 나타내며, Windows의 경우 I/O Manager와 Filter Driver 계층이 추가된 구조를 가진다.)

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

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

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