Delayed Write
- 지연 쓰기(Delayed Write)는 운영체제에서 디스크 쓰기 작업을 효율적으로 처리하기 위해 사용되는 기술로, 데이터를 즉시 디스크에 기록하지 않고 메모리에 임시로 저장한 후 나중에 한 번에 기록하는 방식입니다. 이 방식은 주로 배치 작업(Batch Operation)으로 처리되며, 여러 쓰기 요청을 모아서 디스크 I/O를 최소화하고 시스템 성능을 높이는 역할을 합니다.
지연 쓰기의 내부 로직
1. 데이터 쓰기 요청 발생
- 애플리케이션이 파일에 데이터를 쓰려는 요청을 보냅니다. 이 때, 운영체제는 디스크 I/O 작업을 바로 실행하지 않고, 데이터를 먼저 메모리 캐시(Page Cache)에 저장합니다.
- 이 메모리 캐시는 페이지 캐시 또는 버퍼 캐시라고 하며, 자주 접근하는 데이터를 저장해 두어 I/O 성능을 최적화합니다.
2. 메모리 캐시에 데이터 저장
- 운영체제는 파일에 대한 데이터를 메모리 캐시에 임시 저장합니다. 이렇게 하면 디스크에 직접 쓰지 않기 때문에 디스크 I/O 비용이 발생하지 않고, 메모리에 데이터를 기록하는 것이 훨씬 빠르기 때문에 쓰기 속도가 빨라집니다.
- 메모리 캐시에는 데이터의 변경 사항을 관리하기 위해 더티 페이지(Dirty Page)라는 개념이 사용됩니다. 더티 페이지는 메모리 캐시에 저장된 데이터 중에서 아직 디스크에 기록되지 않은 변경된 데이터를 의미합니다.
3. 배치 작업 준비
- 시간이 지나면서 여러 쓰기 작업이 발생하면, 운영체제는 메모리 캐시에 있는 여러 데이터 변경 사항을 한꺼번에 디스크에 기록하기 위해 배치 작업을 준비합니다.
- 이러한 배치 작업은 운영체제의 쓰기 정책(Write-back Policy)에 따라 수행됩니다. 일반적으로는 일정 시간이 경과하거나, 캐시의 공간이 부족해질 때 배치 작업이 수행됩니다.
4. 쓰기 정책 (Write-back Policy)
- 운영체제는 데이터를 언제 디스크로 쓸지 결정하는 쓰기 정책을 가지고 있습니다. 주요 쓰기 정책은 다음과 같습니다:
- 지연 쓰기 (Delayed Write): 데이터를 바로 디스크에 기록하지 않고, 나중에 배치로 기록합니다. 이는 디스크 I/O 성능을 높이기 위한 정책입니다.
- 강제 쓰기 (Write-through): 데이터가 캐시에 기록되는 동시에, 즉시 디스크에도 기록하는 방식입니다. 지연 쓰기와 달리 데이터의 무결성을 보장하지만, 성능은 다소 떨어집니다.
- 지연 쓰기는 일반적으로 시간 기반 또는 이벤트 기반으로 디스크에 기록됩니다:
- 시간 기반: 일정 시간이 지나면 운영체제가 더티 페이지들을 디스크로 기록합니다.
- 이벤트 기반: 캐시가 가득 차거나, 시스템 종료 요청이 발생할 때, 또는
fsync()
함수와 같은 명시적인 요청이 있을 때 캐시된 데이터를 디스크에 기록합니다.
5. 배치 작업 실행
- 배치 작업이 시작되면, 운영체제는 캐시에 있는 더티 페이지를 디스크에 쓰기 시작합니다. 이때 여러 페이지를 한꺼번에 디스크로 기록하므로, 개별적으로 디스크에 쓰는 것보다 더 효율적입니다.
- 운영체제는 디스크의 블록 단위로 데이터를 기록하므로, 각 쓰기 작업이 디스크 스케줄러에 의해 최적화되어 순차적으로 기록됩니다. 이 과정에서 디스크 병목 현상을 줄이고, I/O 성능을 최대화할 수 있습니다.
6. 더티 페이지 클리어
- 더티 페이지가 디스크에 기록된 후, 운영체제는 해당 페이지를 더티 상태에서 깨끗한 상태(Clean Page)로 변경합니다.
- 이제 이 페이지는 디스크에 안전하게 기록되었으므로, 다시 더티 페이지로 설정될 때까지 추가적인 디스크 쓰기 작업은 필요하지 않습니다.
지연 쓰기의 동작 예시
- 파일 쓰기 요청: 애플리케이션이 파일에 1MB의 데이터를 쓰려고 할 때, 이 데이터를 운영체제는 디스크에 바로 기록하지 않고 메모리 캐시에 기록합니다.
- 배치 작업 대기: 여러 개의 쓰기 작업이 발생하면, 이 모든 쓰기 요청이 캐시에 저장된 상태로 있습니다.
- 배치 쓰기 실행: 일정 시간이 지나거나, 캐시가 가득 차게 되면 운영체제는 더티 페이지들을 모아서 한 번에 디스크에 기록합니다.
- 캐시 비우기: 배치 작업이 완료되면, 더티 페이지는 클린 페이지로 변환되고, 메모리 캐시가 비워집니다.
지연 쓰기의 장점
- 디스크 I/O 감소:
- 지연 쓰기는 여러 개의 쓰기 요청을 한 번에 처리하므로, 디스크 I/O 횟수를 크게 줄일 수 있습니다. 디스크에 데이터를 개별적으로 기록하는 대신, 배치 작업으로 묶어서 처리하기 때문에 디스크 성능이 크게 향상됩니다.
- 쓰기 성능 향상:
- 메모리 캐시에 데이터를 저장하고 빠르게 쓰기 작업을 완료할 수 있으므로, 쓰기 작업의 응답 속도가 매우 빨라집니다. 이로 인해 애플리케이션의 성능이 향상됩니다.
- 디스크 수명 연장:
- SSD와 같은 저장 매체는 쓰기 횟수가 많을수록 수명이 짧아집니다. 지연 쓰기를 통해 쓰기 횟수를 줄일 수 있어 디스크 수명을 연장할 수 있습니다.
지연 쓰기의 단점
- 데이터 무결성 문제:
- 지연 쓰기는 데이터를 메모리에 먼저 기록하고, 디스크에는 나중에 기록하기 때문에, 시스템 충돌이나 전원 장애가 발생할 경우 데이터 손실이 발생할 수 있습니다.
- 이를 방지하기 위해 fsync() 같은 명시적 동기화 요청이 필요하며, 중요한 데이터의 경우 강제 쓰기 방식을 사용할 수 있습니다.
- 메모리 오버헤드:
- 많은 데이터를 메모리 캐시에 저장하므로, 시스템의 메모리 자원을 많이 사용할 수 있습니다. 메모리가 부족해지면 스왑(swap)을 사용해야 하며, 이는 성능 저하로 이어질 수 있습니다.
- 동기화 문제:
- 여러 프로세스가 동일한 파일을 동시에 쓰거나 읽는 경우, 지연된 쓰기 작업이 동기화되지 않으면 데이터 일관성 문제가 발생할 수 있습니다. 이를 해결하기 위해 락(lock)이나 다른 동기화 메커니즘이 필요합니다.
지연 쓰기의 일반적인 사용 사례
- 파일 시스템:
- Ext4, NTFS와 같은 파일 시스템에서는 성능 향상을 위해 지연 쓰기를 사용하여 디스크에 데이터를 빠르게 기록하고 나중에 실제 쓰기 작업을 배치로 처리합니다.
- 데이터베이스:
- 데이터베이스 시스템에서 트랜잭션 로그나 임시 파일을 지연 쓰기로 처리하여 성능을 최적화합니다. 그러나 데이터베이스는 데이터 무결성이 매우 중요하기 때문에, 중요 데이터는 지연 쓰기 대신 즉시 디스크에 기록하는 방법을 병행합니다.
- SSD 성능 최적화:
- SSD는 쓰기 작업이 많아지면 성능이 저하될 수 있는데, 지연 쓰기를 통해 쓰기 횟수를 줄이고 블록 정렬 최적화를 할 수 있습니다.
요약
- 지연 쓰기(Delayed Write)*는 데이터를 메모리 캐시에 임시 저장하고, 나중에 배치로 디스크에 기록하는 방식입니다. 이를 통해 디스크 I/O를 최적화하고 시스템 성능을 높일 수 있습니다.
- 배치 작업은 여러 개의 쓰기 작업을 모아서 한 번에 디스크에 기록하는 것으로, 디스크 접근 빈도를 줄이고 성능을 향상시킵니다.
- 그러나 데이터 무결성과 전원 장애와 같은 문제가 발생할 수 있어, 중요 데이터에 대해서는 명시적인 동기화가 필요합니다.
지연 쓰기는 시스템 성능을 높이는 데 중요한 기술이지만, 데이터 안전성을 보장하기 위해 적절한 동기화 메커니즘을 함께 사용해야 합니다.
'Interview > OS' 카테고리의 다른 글
OS Critical Section 임계 구역 (0) | 2024.09.28 |
---|---|
OS Disk Swap 디스크 스왑 (0) | 2024.09.28 |
OS 페이징과 캐시 (0) | 2024.09.28 |
Multiprocess간 IPC 중 메모리 매핑 파일 (1) | 2024.09.28 |
Multiprocess간 IPC 중 공유 메모리 (0) | 2024.09.28 |