306. PFF (Page Fault Frequency)

핵심 인사이트 (3줄 요약)

  1. 본질: PFF (Page Fault Frequency)는 프로세스의 페이지 부재 발생 빈도를 실시간으로 측정하여, 부재가 잦으면 프레임을 더 주고 부재가 드물면 프레임을 회수하는 피드백 기반의 동적 할당 기법이다.
  2. 가치: 워킹 셋 모델처럼 복잡하게 모든 참조 패턴을 감시할 필요 없이, 오직 '결과(페이지 폴트)'만 보고 자원을 조절하므로 구현 오버헤드가 낮고 직관적인 시스템 최적화를 가능케 한다.
  3. 융합: 상한선(Upper Bound)과 하한선(Lower Bound)이라는 임계치 설정을 통해 시스템을 스래싱(Thrashing)의 위험으로부터 보호하고 물리 메모리 이용률을 극대화한다.

Ⅰ. 개요 및 필요성

  • 개념: 페이지 부재 빈도(PFF) 모델은 프로세스별로 페이지 폴트가 발생하는 간격(Interval)을 모니터링한다. 폴트 사이의 시간이 너무 짧으면(빈도가 높으면) 메모리가 부족하다는 신호로 보고 프레임을 추가 할당한다.

  • 필요성: 모든 프로그램의 필요한 메모리 양은 실행 중에 계속 변한다. 어떤 때는 1MB만 있어도 되지만, 복잡한 루프를 돌 때는 10MB가 필요할 수도 있다. PFF는 프로세스에게 **"딱 필요한 만큼의 땅(RAM)"**만 빌려주어, 시스템 전체에 남는 땅이 없도록 관리하기 위해 탄생했다.

  • 💡 비유: 자녀에게 용돈(프레임)을 줄 때, 매번 어디에 쓰는지 감시(워킹 셋)하기는 힘듭니다. 대신 "돈 떨어졌어요!"라고 말하는 횟수(PFF)를 봅니다. 너무 자주 달라고 하면 용돈을 올려주고, 한 달 내내 조용하면 용돈이 남는다고 판단해 줄이는 합리적인 배분 방식입니다.

  • 등장 배경: 워킹 셋 모델은 이론적으로 훌륭하지만, 하드웨어가 매 메모리 참조마다 윈도우를 계산해야 하는 부담이 컸다. 엔지니어들은 훨씬 가벼운 대안을 찾았고, 페이지 폴트가 터졌을 때만(인터럽트 시점) 잠깐 계산하면 되는 PFF 방식이 실무적인 해법으로 각광받게 되었다.

┌──────────────────────────────────────────────────────────────┐
│             PFF (Page Fault Frequency)의 동적 제어 로직               │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  페이지 부재 빈도                                              │
│   ▲                                                          │
│   │   [상한선] ----------------- (프레임 추가 할당 지점)         │
│   │                                                          │
│   │   [안정권] (현상 유지)                                     │
│   │                                                          │
│   │   [하한선] ----------------- (프레임 회수 지점)              │
│   └──────────────────────────────────────────────────▶ 시간   │
│                                                              │
│  * 원리: "아프다고 소리 지르면 약(RAM)을 주고,                  │
│           너무 조용하면 약이 남는 걸로 간주한다."               │
└──────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 에어컨의 '자동 온도 조절' 기능과 같습니다. 실내 온도가 설정치보다 올라가면(PFF 상승) 냉방을 세게 하고, 너무 추워지면(PFF 하락) 냉방을 줄여서 에너지를 아끼는 원리입니다.

Ⅱ. 아키텍처 및 핵심 원리

상한선과 하한선의 밸런싱 (Thresholds)

OS는 프로세스마다 두 개의 임계치를 관리한다.

  1. 상한선 (Upper Bound) 돌파 시:
    • 현재 이 프로세스는 메모리 기근 상태다.
    • 페이지 폴트가 너무 자주 일어나 연산을 못 하고 있다.
    • 즉시 새로운 빈 프레임을 이 프로세스에게 하사한다.
  2. 하한선 (Lower Bound) 미달 시:
    • 현재 이 프로세스는 메모리가 너무 풍족하다.
    • 안 쓰는 프레임을 들고 놀고 있을 확률이 높다.
    • 사용되지 않는 프레임들을 회수하여 시스템 공용 풀로 되돌린다.

구현의 간편함

PFF의 최대 장점은 **'사건이 터졌을 때만 일한다'**는 것이다.

  • 페이지 폴트가 발생하면 OS 커널이 깨어난다.

  • 이때 "마지막 폴트 이후로 시간이 얼마나 흘렀지?"만 체크하면 된다.

  • 평상시(페이지 히트 시)에는 하드웨어나 소프트웨어나 아무런 추가 연산을 하지 않는다.

  • 📢 섹션 요약 비유: 울지 않는 아이에게는 밥을 주지 않는 엄격한 보육 시스템입니다. 아이가 울 때만(폴트 발생) 달려가서 상황을 체크하므로 보육교사(OS)의 일거리가 획기적으로 줄어듭니다.


Ⅲ. 비교 및 연결

PFF vs 워킹 셋 (Working Set)

비교 항목워킹 셋 모델PFF 모델
제어 주체참조 패턴 (미래 예방)부재 빈도 (사후 대응)
오버헤드높음 (매 참조마다 감시)매우 낮음 (폴트 시에만 작동)
정교함매우 정교함실용적이고 거시적임
스래싱 방어선제적 방어 가능발생 직후 즉시 진화

스래싱(Thrashing)과의 연결 고리

PFF는 스래싱을 막는 '자동 브레이크' 역할을 한다. 만약 모든 프로세스가 상한선을 돌파하여 프레임을 요구하는데 시스템에 남는 프레임이 없다면? PFF 알고리즘은 즉시 상위 스케줄러에게 보고하고, 스케줄러는 프로세스 하나를 Swap-out 시켜 스래싱의 고리를 끊어버린다.

  • 📢 섹션 요약 비유: 워킹 셋은 '예측 항해'이고 PFF는 '충격 감지 항해'입니다. 예측 항해는 파도를 미리 피하지만 레이더 비용이 비싸고, 충격 감지는 배가 흔들리면(폴트) 그때 키를 꺾으므로 경제적입니다.

Ⅳ. 실무 적용 및 기술사 판단

실무 시나리오

  1. 리눅스 커널의 메모리 압박 감시 (PSI - Pressure Stall Information) 최신 리눅스 커널은 PFF의 사상을 확장한 PSI 기술을 제공한다. CPU, 메모리, I/O 리소스가 부족하여 프로세스들이 얼마나 지연(Stall)되고 있는지를 수치화한다. 시스템 엔지니어는 /proc/pressure/memory 파일을 보고, 특정 수치 이상으로 지연 빈도가 올라가면 동적으로 컨테이너의 메모리 제한(Cgroup)을 풀거나 워커 노드를 증설하는 자동 스케일링 정책을 짠다.

  2. Windows의 가상 메모리 관리 (Working Set Trimming) 윈도우 작업 관리자에서 메모리 사용량이 갑자기 줄어드는 현상을 본 적이 있을 것이다. 윈도우 OS는 백그라운드 프로세스의 페이지 폴트가 오랫동안 발생하지 않으면, 해당 프로세스가 메모리를 점유만 하고 안 쓴다고 판단하여 프레임을 강제로 뺏어버리는 PFF 하한선 제어를 매우 공격적으로 수행한다.

도입 체크리스트

  • 임계치 설정: 상한선과 하한선 사이의 간격이 너무 좁으면 프레임 할당과 회수가 무한 반복되는 진동(Oscillation) 현상이 발생한다. 워크로드의 변동성을 고려하여 충분한 '데드존'을 두어야 한다.

  • 📢 섹션 요약 비유: 에어컨 온도를 24도로 맞췄는데, 24.1도에 켜지고 23.9도에 꺼지게 설정하면 에어컨이 1초마다 켜졌다 꺼졌다 하며 고장 납니다. 26도에 켜지고 22도에 꺼지게 여유(임계치 간격)를 줘야 합니다.


Ⅴ. 기대효과 및 결론

정량적 기대효과

  • 메모리 활용 스루풋 향상: 잉여 프레임을 즉시 회수하여 다른 바쁜 프로세스에게 전달함으로써 시스템 전체의 작업 처리 속도를 20~30% 끌어올릴 수 있다.
  • 관리 효율성: 복잡한 설정 없이도 프로세스의 성격에 맞는 최적의 메모리 할당량을 시스템이 스스로 찾아가게 만든다.

결론

PFF(Page Fault Frequency)는 "결과가 과정을 증명한다"는 실용주의 아키텍처의 정수다. 데이터가 어디로 튀는지 복잡하게 계산하지 않아도, '페이지 폴트'라는 단 하나의 지표만으로 자원 배분을 훌륭하게 완수해낸다. 비록 워킹 셋보다 한발 늦은 대응일 수 있지만, 그 단순함과 강력함 덕분에 현대의 수많은 동적 자원 관리 시스템의 핵심 철학으로 영원히 살아남아 있다.

  • 📢 섹션 요약 비유: PFF는 컴퓨터의 '자율 신경계'입니다. 우리가 숨 쉬는 걸 일일이 명령하지 않아도 산소가 부족하면(폴트 상승) 알아서 숨을 가쁘게 쉬어 산소를 보충하듯, 컴퓨터도 PFF를 통해 생존에 필요한 메모리를 스스로 쟁취합니다.

📌 관련 개념 맵

개념 명칭관계 및 시너지 설명
페이지 폴트PFF 알고리즘을 가동시키는 유일한 트리거이자 측정 지표.
워킹 셋 모델PFF가 극복하고자 했던 복잡한 오버헤드를 가진 이론적 선배 모델.
상한선/하한선프레임 할당과 회수를 결정짓는 PFF의 양대 기준점.
스래싱PFF 제어에 실패했을 때 도달하게 되는 시스템의 종말.
동적 할당고정된 파이를 나누는 대신, 상황에 따라 파이 크기를 조절하는 PFF의 본질.

👶 어린이를 위한 3줄 비유 설명

  1. PFF는 로봇 친구들에게 간식을 나눠줄 때, "배고파요!"라고 외치는 횟수를 보고 양을 정하는 거예요.
  2. 배고프다는 소리를 자주 하면 간식 주머니를 더 크게 키워주고, 하루 종일 조용하면 간식이 남는 줄 알고 주머니를 작게 줄이죠.
  3. 이렇게 하면 간식을 낭비하지 않고, 진짜 배고픈 로봇 친구들에게 더 많은 간식을 나눠줄 수 있답니다!