At a Glance
page fault
├─ valid mapping, page not resident -> OS brings or prepares the page, then resumes
└─ invalid mapping or permission -> access violation / process errorPage fault 자체는 항상 버그가 아닙니다. Demand paging에서는 처음 접근한 page를 준비하기 위해 정상적으로 발생할 수 있고, 디스크 I/O까지 필요한 hard fault가 반복되면 큰 지연이 생깁니다.
Page 단위 관리
가상 주소 공간과 물리 메모리는 고정 크기 page 단위로 매핑됩니다. Process가 실제로 자주 사용하는 resident page 집합을 working set이라고 합니다. 운영체제는 memory pressure와 접근 패턴에 따라 page를 working set에 넣거나 내보낼 수 있습니다.
처음 allocation한 큰 범위를 실제로 모두 읽지 않았다면 모든 page가 즉시 물리 메모리에 상주할 필요는 없습니다. 반대로 한 번에 working set보다 훨씬 큰 데이터를 무작위 접근하면 page 교체와 cache miss가 함께 늘 수 있습니다.
성능 증상
minor / soft fault: storage I/O 없이 mapping이나 zero page 준비
hard fault: backing storage에서 page를 읽어야 함
invalid fault: 유효하지 않은 주소 또는 권한운영체제마다 명칭과 계측 방식은 다를 수 있습니다. 성능 분석에서는 fault 횟수만 보지 말고 hard fault, disk activity, working set, allocation 변화와 함께 확인합니다.
자주 틀리는 점
- page fault와 application crash를 같은 의미로 쓰지 않습니다.
- RAM이 부족할 때 paging file을 늘리면 모든 성능 문제가 해결된다고 보지 않습니다.
- sequential access와 random access는 같은 데이터 크기에서도 page·cache 동작이 다릅니다.
- page size를 임의 상수로 고정하지 말고 대상 platform API에서 확인합니다.
참고 링크
2 sources