watermark_boost에 대해

watermark_boost는 리눅스 커널의 zone 워터마크(watermark) 기반 메모리 리클레임 시스템에서 사용되는 메모리 부족 예측에 따른 proactive reclaim 트리거 조절 값이다. 말 그대로 워터마크의 임계값(watermark_high)을 일시적으로 높여, 더 많은 페이지를 reclaim 하도록 시스템을 유도하는 메커니즘이다.

커널의 zone 워터마크

리눅스 커널은 메모리를 관리하기 위해 각 zone에 대해 다음과 같은 워터마크를 설정해 둔다.

워터마크 이름설명
watermark_min절대적 최소 확보 메모리
watermark_lowreclaim 대상이 되는 기준
watermark_high메모리 확보가 완료되는 목표치

page allocator는 할당 실패 시, watermark_low 아래로 떨어지면 리클레임을 수행하고 watermark_high 이상으로 올라가야 stop한다.

watermark_boost란?

struct zone {
	/* Read-mostly fields */

	/* zone watermarks, access with *_wmark_pages(zone) macros */
	unsigned long _watermark[NR_WMARK];
	unsigned long watermark_boost;

    ....

}
  • 동적 reclaim이 끝나는 워터마크를 watermark_high + watermark_boost로 일시 상향 조정함
  • kswapd()가 페이지를 reclaim할 때 더 많은 페이지를 확보하도록 유도
  • 메모리 pressure가 예측될 경우 proactive reclaim 효과를 제공

수식적으로 표현하면:

kswapd_reclaim_target = watermark_high + watermark_boost

사용 목적

목적효과
sudden OOM 방지미리 메모리 확보
높은 burst workload 대응watermark를 보정하여 메모리 부족 완충
kswapd 효율 개선한 번에 많은 페이지 확보, 반복 호출 줄임

관련 sysctl 및 tunable

/proc/zoneinfo 확인

cat /proc/zoneinfo | grep -A10 "Node 0, zone Normal"

출력 예시:

  pages free     123456
  min            4534
  low            5567
  high           6598
  ...
  protection: (0,0,0,0)

/proc/sys/vm/watermark_boost_factor 또는 /sys/module/page_alloc/parameters/watermark_boost

watermark_boost_factor

cat /proc/sys/vm/watermark_boost_factor
  • 이 값은 % 단위 (default: 150)
  • 실제 boost 값은 다음으로 계산됨:
watermark_boost = (high - low) * watermark_boost_factor / 100

예:

echo 200 > /proc/sys/vm/watermark_boost_factor

→ 워터마크 하이(high) – 로우(low)의 200% 만큼 부스팅

watermark_boost (디버깅용 parameter)

cat /sys/module/page_alloc/parameters/watermark_boost
  • 내부 계산된 boost 값을 확인
  • 사용자가 직접 수정하는 인터페이스는 아님

watermark_boost의 동작 타이밍

다음 상황에서 적용됨:

  • kswapd()가 실행 중이고
  • 현재 free pages가 watermark_low보다 작고
  • reclaim이 필요한 페이지 수가 많을 때

이 경우 kswapd()watermark_high + boost까지 메모리를 reclaim하려고 시도함

실제 효과 확인 방법

# watermark 정보 확인
cat /proc/zoneinfo

# kswapd 리클레임 로그 확인
grep kswapd /var/log/kern.log

또는 tracepoints로 다음 이벤트 추적:

# reclaim 시작 및 종료 시점
echo 1 > /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable
echo 1 > /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable

임베디드 환경에서의 적용 사례

많은 모바일 기기에서, high throughput 또는 heavy 앱 실행 중 peak 메모리 사용량을 감안하여 watermark_boost_factor를 다음처럼 조정한다:

echo 300 > /proc/sys/vm/watermark_boost_factor

이는 메모리를 미리 확보해 앱 실행 중 hiccup 없이 동작하도록 보장하기 위함이다.

CMA zone과의 상호작용

CMA가 존재하는 경우:

  • boost된 워터마크가 CMA 영역까지 접근할 수 있음
  • 이는 CMA 사용 가능 페이지 수를 감소시킬 수 있음
  • 모바일/임베디드에서는 balance 중요

⚠️ watermark_boost 값을 너무 키우면, CMA 영역까지 reclaim하여 DMA, 영상 디코딩, 하드웨어 acceleration에 사용되는 메모리 확보 실패로 이어질 수 있다.

요약

항목설명
설정 위치/proc/sys/vm/watermark_boost_factor
기본값150
동작watermark_high + boost 까지 kswapd reclaim
적용 시점kswapd 동작 중
목적sudden OOM 방지, burst 대응, kswapd 효율 향상

참고 링크

답글 남기기