티스토리 뷰
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 -> 이 값 미만이 되는 경우 페이지 할당시 먼저 직접 페이지 회수 작업 등을 수행
'개발 > 코드로 알아보는 ARM 리눅스 커널 TIL' 카테고리의 다른 글
20241109 4.7.4 kmem 캐시 생성 (p426) (0) | 2024.11.21 |
---|---|
241102 메모리 관리 (p394) & 4.7 슬랩 할당자 (p410) (2) | 2024.11.21 |
20241019 4.6 페이지 할당자 (p356) (0) | 2024.11.20 |
20241012 4.4.4 버디 시스템의 페이지 해제 (p336) ~ 4.5 pcp (355) (0) | 2024.11.20 |
20241005 4.4.3 버디 시스템의 페이지 할당 (p322) (0) | 2024.11.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- chrome-extension
- 클래스 맴버 변수 출력하기
- vr핏
- Quest2
- 코어 남기기
- Obstacle Avoidance
- shared_from_this
- red underline
- 에러 위치 찾기
- print shared_ptr class member variable
- hole-punching
- mysql
- SuffixArray
- set value
- RVO
- 봄날에 스케치
- 영상 픽셀화 하기
- 잘못된 빨간줄
- boost
- it's called a vrpit
- C++
- 카카오
- Visual Studio
- vrpit
- 면접
- ad skip
- Reciprocal n-body Collision Avoidance
- Golang
- 우리는 vr핏이라고 부릅니다
- cockroach db
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함