페이지 프레임 회수

sungho·2024년 12월 11일
0

가상 메모리

목록 보기
11/11

운영체제에서 메모리 관리는 시스템 성능과 안정성에 매우 중요한 역할을 합니다. 메모리가 부족할 때 효율적으로 메모리를 회수하는 페이지 프레임 회수(Page Reclaim)는 핵심적인 기술입니다.

1. 페이지 프레임 회수의 개념

  • 페이지 프레임 회수는 물리적 메모리가 부족할 때 사용되지 않는 페이지를 해제하거나 스왑 영역으로 이동시켜 새로운 메모리 요청을 처리할 수 있도록 하는 과정
    • ACTIVE 리스트
      • 최근 자주 사용된 페이지
    • INACTIVE 리스트
      • 덜 사용되거나 오래된 페이지

2. LRU 리스트 구조와 기능

  • 운영체제는 참조 플래그(PTE.accessed)와 페이지 상태를 기반으로 페이지를 ACTIVE와 INACTIVE 리스트 간에 이동시키며 필요 시 비활성 리스트에서 희생 페이지(victim page)를 선택해 회수

익명 페이지(Anonymous Pages)

  • ACTIVE_ANON
    • 최근 참조된 익명 페이지
  • INACTIVE_ANON
    • 덜 참조된 익명 페이지로 필요 시 스왑 영역으로 이동

파일 기반 페이지(File-backed Pages)

  • ACTIVE_FILE
    • 최근 참조된 파일 매핑 페이지
  • INACTIVE_FILE
    • 덜 참조된 파일 매핑 페이지로 필요 시 디스크에 기록 후 제거

Swappiness

  • 익명 페이지와 파일 기반 페이지의 회수 우선순위를 조정하는 매개변수
    • Swappiness 값이 높으면 익명 페이지를 더 빨리 스왑 영역으로 전송
    • 값이 낮으면 파일 기반 페이지를 더 빨리 회수

3. 알고리즘

Clock-based Second Chance Algorithm

  • LRU 근사 알고리즘으로 참조된 희생 페이지는 삭제하지 않고 유지하며 효율성을 높임

Working-set 개념

  • LRU 리스트를 ACTIVE와 INACTIVE로 나누어 워킹 세트(working set)를 관리
  • 자주 사용되는 "핫" 페이지는 ACTIVE 리스트에 유지되고 덜 사용되는 "콜드" 페이지는 INACTIVE 리스트로 이동

Swappiness

Swappiness 값은 익명 페이지와 파일 기반 페이지의 회수 우선순위를 조정

  • 높은 값
    • 익명 페이지를 더 빨리 스왑
  • 낮은 값
    • 파일 기반 페이지를 더 빨리 회수

4. Refault Distance

  • 페이지가 메모리에서 제거되었다가 다시 참조(refaulted)될 때 계산되는 거리

Refault Distance 계산 공식

  • Refault Distance=size INACTIVE +R−ERefault Distance=size INACTIVE +RE
    • EE: 페이지가 메모리에서 제거될 당시의 nonresident_age
    • RR: 페이지가 다시 참조(refaulted)될 당시의 nonresident_age
    • size(INACTIVE)size(INACTIVE)
      • 비활성 리스트의 크기

5. 페이지 회수방법

try_to_free_pages()(동기적 Reclaim)

  • 목적
    • 메모리 부족으로 인해 특정 영역(zone)이 최소 워터마크(min watermark) 아래로 떨어졌을 때 사용
  • 특징
    • 필요하면 디스크에 데이터를 기록(write-back I/O)하여 메모리를 확보
    • kswapd와 유사하게 영역을 줄이는(shrinking) 작업을 수행하지만 설정된 목표(nr_to_reclaim)가 충족되면 중단
    • 함수 호출 흐름
      • shrink_zones() → shrink_node() → shrink_node_memcgs()

kswapd(비동기적 Reclaim)

  • 목적
    • 메모리 부족으로 인해 특정 영역이 낮은 워터마크(low watermark) 아래로 떨어졌을 때 트리거
  • 특징
    • 모든 영역(zone)을 "균형 상태(balanced)"로 만들려고 시도
    • 노드에 대해 balance_pgdat()를 호출하며 shrink_node_memcgs()를 호출
    • 균형 상태의 정의
      • 사용 가능한 페이지 수(nr_free)가 WMARK_HIGH 이상
      • 요청된 페이지의 크기(order)를 충족할 수 있는 적절한 페이지 필요
    • 균형 상태가 아니면 우선순위를 조정하여 재시도

node_reclaim()(sysctl → zone_reclaim_mode)

  • 목적
    • 다른 메모리 노드에 부담을 주지 않도록 로컬 노드에서 파일 페이지를 회수
  • 특징
    • 설정 가능한 매개변수를 통해 동작을 조정

shrink_node()

  • 메모리 부족 시 특정 노드에서 비활성화된 페이지를 회수하는 함수
  • 메모리 그룹(memcg)에 대해 작업을 수행하며 LRU 벡터에서 비활성 리스트를 스캔하고 필요 시 캐시나 더티 데이터를 정리

shrink_lruvec()

LRU 벡터에서 비활성 리스트의 페이지를 스캔하고 참조 여부에 따라 다음 상태로 분류

  • 유지(KEEP)
  • 활성화(ACTIVATE)
  • 회수(RECLAIM)

shrink_page_list()

비활성 리스트에서 선택된 페이지의 상태를 분석

  • 스왑 캐시에 추가
  • 디스크에 기록 후 제거
  • 활성화 또는 유지

6. Unevictable Pages(비회수 가능한 페이지)

회수가 불가능한 Unevictable Pages는 별도의 리스트에 저장

  • 잠긴 메모리(mlock() 호출)
  • RAM 파일 시스템 데이터
  • 프로세스 간 잠긴 공유 메모리 영역 등

7. 결론

페이지 프레임 회수는 운영체제가 물리적 메모리를 효율적으로 관리하기 위한 필수적인 기술입니다. Linux 커널은 LRU 기반 알고리즘을 통해 자주 사용되는 데이터를 메모리에 유지하고 덜 중요한 데이터를 제거하여 성능을 최적화합니다. Refault Distance 계산은 이러한 과정에서 중요한 역할을 하며 시스템 안정성을 보장합니다.

0개의 댓글