Linux

Dirty Page

studioesso 2025. 12. 16. 16:21

디스크에서 파일을 불러올 때 커널은 메모리의 page cache를 먼저 조회하게 되는데, 이 때 page cache에 원하는 데이터가 없으면 디스크를 조회하고 page cache에 저장한다. 이를 통해 디스크 io 대신 메모리의 page cache 접근으로 i/o 성능에 도움을 준다.

 

만약 읽기 작업뿐만 아니라 쓰기 작업이 있으면 추가적인 고려 사항이 있다.

page cache의 내용이 변경되서 디스크의 내용과 달라지면 dirty bit를 활성화시킨다.

이 때 서버의 전원이 갑자기 내려가거나 하면 정합성이 깨지게 된다. 그렇기 때문에 디스크 <-> page cache간 데이터 동기화가 주기적으로 이루어져야 하는데, 이를  page writeback이라고 한다.

 

page writeback이 너무 자주 이루어지면 디스크 i/o에 안 좋은 영향을 주기 때문에 이를 조정하는 튜닝 옵션이 있다.

 

1. vm.dirty_background_ratio

- 전체 메모리 대비 dirty page의 비율이 해당 값%를 넘으면 동기화

 

2. vm.dirty_background_bytes

- 전체 메모리 대비 dirty page의 비율이 해당 값bytes를 넘으면 동기화

 

3. vm.dirty_ratio

- 전체 메모리 대비 dirty page의 비율이 해당 값%를 넘으면 동기화하되, 1번과 차이는 해당 값이 넘으면 실행중인 프로세스의 I/O 작업을 모두 중지하고 바로 동기화 진행.

 

4. vm.dirty_bytes

- 전체 메모리 대비 dirty page의 비율이 해당 값bytes를 넘으면 동기화하되, 1번과 차이는 해당 값이 넘으면 실행중인 프로세스의 I/O 작업을 모두 중지하고 바로 동기화 진행.

 

5. vm.dirty_writeback_centisecs

- 해당 값을 100으로 나누면 초(seconds)인데, flush 커널 스레드를 깨우는 주기이다. flush 커널 스레드가 실행되면 page writeback을 진행한다.

 

6. vm.dirty_expires_centisecs

해당 값을 100으로 나누면 초(seconds)인데, 5번에서 flush 커널 스레드가 page writeback을 할 때 dirty page를 싱크 시키는 기준이 되는 값이다. 예를 들어 dirty page로 전환되고 해당 값의 초만큼  시간이 지났는데도 디스크로 동기화가 되지 않았으면 동기화를 진행한다. 

'Linux' 카테고리의 다른 글

I/O 스케줄러  (1) 2025.12.19
rrqm과 wrqm  (0) 2025.12.18
[linux] 프로세스 상태 및 명령어  (0) 2025.05.29
[Linux] VIM 편집기 활용  (0) 2025.05.15
[Linux] 패턴을 이용한 파일 선택 방법  (0) 2025.04.29