티스토리 뷰

4-96 __alloc_pages_slowpath

__GFP_ATOMIC, __GFP_DIRECT_RECLAIM 
ATOMIC 은 저수준으로 sleep 없이 돌고  DIRECT_RECLAIM 은 sleep 하면서 회수를 해야 하는 상반되는 옵션
따라서 ATOMIC 을 제거하고 돌게됨

if (gfp_mask & __GFP_KSWAPD_RECLAIM)
        wake_all_kswapds(order, ac);
이 플래그가 켜져있으면 모든 kswapd를 활성화 시켜서, zonelist 중 허용존의 kswapd 를 모두 깨운다.

alloc flag 를 조절해줌. slow path 에 맞게 ->gft_to_alloc_flags   --> 4-100

cpuset 이 꺼저있는데, nodemask 도 없다 (전체 노드에 대한 요청이다) -> 그러면 권장 존으로 설정

kswapd는 특정 메모리 영역(zone)에서 사용 가능한 페이지가 설정된 임계치 이하로 떨어지면 활성화됩니다

4-97 __alloc_pages_slowpath

WATERMARK

워터마크 수준 (ALLOC_WMARK_MIN, ALLOC_WMARK_LOW, ALLOC_WMARK_HIGH):

각 워터마크는 메모리 부족 정도에 따라 세 가지 수준으로 나뉩니다:
WMARK_MIN: 가장 낮은 워터마크로, 메모리 부족 상황을 나타냅니다. 이 수준에 도달하면 즉시 페이지 회수가 필요할 수 있습니다.
WMARK_LOW: WMARK_MIN보다 높은 워터마크로, 시스템이 메모리를 회수하도록 kswapd와 같은 데몬을 유발합니다.
WMARK_HIGH: 정상적인 메모리 상태를 나타내며, 이 워터마크보다 높다면 메모리가 여유 있는 상태입니다.

ALLOC_WMARK_MIN 워터마크를 설정하고 메모리를 할당하면 가장 강력한 메모리 회수 조건
ALLOC_NO_WATERMARKS는 특수한 상황에서 강제로 메모리를 할당해야 할 때 사용됩니다

PF_MEMALLOC = ProcessFlag MemAlloc  메모리 할당 우선권을 높여주는 플래그. reserve 메모리마저 확보

TIF_MEMDIE = Thread Info Mem Die. 테스크 정지 작업중인 플래그

4-98

int *contended_compaction:

페이지 압축이 경쟁 상태에서 발생한 경우 그 수를 기록하기 위한 포인터입니다. 이는 시스템의 압축 작업을 모니터링하는 데 유용할 수 있습니다.
bool *deferred_compaction:

페이지 압축이 연기된 경우를 나타내는 포인터입니다. 이는 페이지 할당 요청 중 압축이 즉시 수행되지 않고 나중으로 미뤄졌음을 나타냅니다.

PF_KTHREAD는 Linux 커널에서 커널 스레드를 나타내는 플래그로, 사용자 공간에서 실행되는 일반 프로세스가 아닌, 커널 내부에서 생성된 스레드에 설정됩니다

MIGRATE_SYNC_LIGHT는 경량 동기화 마이그레이션 모드로, THP의 동기화 마이그레이션보다 부담이 적습니다.
MIGRATE_SYNC_LIGHT 모드는 페이지 마이그레이션이 완전히 완료될 때까지 기다리지 않으며, 성능 저하를 최소화하면서 필요한 작업만을 수행합니다.

4-99

98 에서 compaction 해봤고 99 에서는 reclaim

#define PAGE_ALLOC_COSTLY_ORDER 3 -> 8페이지를 요청할때부터 많다고 판단

회수된 페이지가 없다면 oom outofmemory 를 발생시킨후 마지막으로 할당을 다시 시도한다.

iff congested에서 "iff"는 "if and only if"의 약자로, **"오직 ~일 경우에만"**이라는 의미입니다. 따라서 wait_iff_congested는 **"자원이 과부하 상태일 경우에만 대기한다"**는 뜻입니다.

책 395 페이지 워터마크 watermark

  • 메모리 부족을 알아내기 위해 설정하는 값
  • MIN -> 이 값 미만이 되는 경우 페이지 할당시 먼저 직접 페이지 회수 작업 등을 수행
댓글