watermark_boost는 리눅스 커널의 zone 워터마크(watermark) 기반 메모리 리클레임 시스템에서 사용되는 메모리 부족 예측에 따른 proactive reclaim 트리거 조절 값이다. 말 그대로 워터마크의 임계값(watermark_high)을 일시적으로 높여, 더 많은 페이지를 reclaim 하도록 시스템을 유도하는 메커니즘이다.
커널의 zone 워터마크
리눅스 커널은 메모리를 관리하기 위해 각 zone에 대해 다음과 같은 워터마크를 설정해 둔다.
| 워터마크 이름 | 설명 |
|---|---|
watermark_min | 절대적 최소 확보 메모리 |
watermark_low | reclaim 대상이 되는 기준 |
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 효율 향상 |