디스크에서 파일을 불러올 때 커널은 메모리의 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 |