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-100cpuset 이 꺼저있는데, nodemask 도 없다 (전체 노드에 대한..
4.6 페이지 할당자 (356P) 노드별 활성화 된 존에서 페이지 할당이 실패한 경우에 대비해 fallback 에 대한 후보 존 리스트를 만든다. 4.6.2 NUMA 메모리 정책 (358P) Interleave: 해당 태스크에 구성된 노드 세트에서 순서대로 할당을 수행함 .. bind preferred default 4-81__build_all_zonelists -> 최초 실행시 모든 노드에 생성, 각 cpu 별 per-cpu 프레임 캐시 환경 구성 4-82 build_zonelists 모든 zone 을 돌면서 zone list 를 초기화 다른 노드를 순회하기 위해 비트마스킹으로, while 순회 * void nodes_clear(mask) clear all bits * node_order 에 node..
__free_one_page - 여기서 해제시 머지하는 부분은 이해가 됐음, - *다만 max_order, MAX_ORDER, pageblock_order 의 이해가 명확하지 않음* - buddy 할당자에서 struct page 의 Privatge 은 order 값으로 사용. (2^order 사이즈) - 상위 슬롯에서 버디를 발견하면 cold (뒤로 넣는다) static inline int page_is_buddy(struct page *page, struct page *buddy,unsigned int order) -> 이게 buddy 만 실제 buddy 로 Free 인지 검사하기 때문 ┌────────────────────┐└──▲──────────▲──────┘┌──┼──────┐┌──┼──────..
Page: 가상 메모리에서 사용되는 단위. Page Frame: 물리 메모리에서 사용되는 단위. PageDescriptor : PageFrame 의 상태 정보. memmap 으로 사용 페이지 지울때 static inline void rmv_page_order(struct page *page){__ClearPageBuddy(page);set_page_private(page, 0);}static inline void __ClearPageBuddy(struct page *page){VM_BUG_ON_PAGE(!PageBuddy(page), page);atomic_set(&page->_mapcount, -1);}page 의 private 변수는 여러 용도로 쓰이지만 버디에서는 이렇게 사용 - 버디 시스템에서 p..
memblock 이랑 vmemmap 을 까먹었다 memblock ->부팅 초기에 사용, vmemmap -> 가상 메모리 맵 이제 page 별로 어떤 zone 이랑 노드에 들어가는지 알기 때문에, 이 페이지에 정보를 설정해줌 __init_single_page 노드, 존, 참조카운트, 테이블 매핑 카운트, 마지막 접근 cpu pid 등을 기록 update_defer_init - 저주소인경우에는 지연시킬 수없음 - if (zone_end spanned count 가 movable 포함안시키니깐. - 섹션에 대해서 처리 - (pfn & (PAGES_PER_SECTION - 1)) == 0) { 버디 시스템 - order 는 2의 배수, 페이지는 2^(order - 1) 개씩 관리 - 자주 사용되는 페이지..
node_spanned_pages -> 노드 전체 페이지 수 node_present_pages -> 노드에 실제 페이지수 zone_spanned_pages_in_node -> 노드의 존에 전체 페이지수 zone_absent_pages_in_node -> 노드의 홀(빈) 페이지 리눅스의 워터마크 = 어떤 제한값 정도인가? migratetype 존 안의 페이지를 타입별로 관리 mmzone.henum {MIGRATE_UNMOVABLE,MIGRATE_MOVABLE,MIGRATE_RECLAIMABLE,MIGRATE_PCPTYPES, /* the number of types on the pcp lists */MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,#ifdef CONFIG_CMA/* * ..
vmap 은 주로 비연속적(non-contiguous)인 물리 페이지들을 연속적인 가상 주소 공간으로 매핑. 그러나 각 물리 페이지에 tlb 는 하나씩 mem_map 으로는 원래 두번 테이블을 타야했는데, vmemmap 으로 64비트에서는 조금더 빠르게 하는 것 같다 https://elixir.bootlin.com/linux/v4.9/source/include/asm-generic/memory_model.h#L53 sparse.c:sparse_init -> sparse_early_mem_map_alloc (each_section) -> sparse_init_one_sectionsparse_early_mem_map_alloc -> sparse_mem_map_populate -> if (vmemmap_pop..
sparse init P.269 pageblock_order가 큰 경우, 같은 타입의 페이지를 더 큰 블록 단위로 한꺼번에 할당하고, 이들을 물리 메모리에서 연속적인 공간에 몰아두려는 의도입니다. 이렇게 함으로써 여러 가지 이점이 있습니다. // 각 SECTION 수마다 만드네.size = sizeof(unsigned long *) * NR_MEM_SECTIONS;usemap_map = memblock_virt_alloc(size, 0);// section->section_mem_map 은 속성을 플래그로 가지고 있다.#define SECTION_MARKED_PRESENT (1ULsection_mem_map & SECTION_MARKED_PRESENTsection->section_mem_map & S..
3.4 I/O 메모리 매핑 paging init 이 되기전에 io mapping 이 되야 하는 경우? ACPI 테이블, EFI 테이블, 일부 디바이스 에 접근해서 설정 정보를 가져와야 하는 경우 early ioremap : early IO 매핑하기 IO mapping 전 먼저 처리 위해 fixmap 영역을 사용하는 early io mapping -> FIX_PAGE_IO early memremap: early 메모리 매핑하기 IO 가 아닌 normal 메모리인데, fixmap 영역을 사용 -> FIX_PAGE_NORMAL 4.1 early 메모리 할당자: memblock 커널의 메모리 할당 - memblock: 메인 메모리 할당자가 초기화 되기 전 사용 - 페이지 할당자 : 페이지 단위 할당 - 메모리 ..
tcr : translation control registert0sz : tfanslation table 0 size1:1 매핑 위해서 가상 메모리에서 쓰는 비트수 조정 ttbr 의 asid 와 페이지- https://developer.arm.com/documentation/ddi0406/cb/System-Level-Architecture/System-Control-Registers-in-a-VMSA-implementation/VMSA-System-control-registers-descriptions--in-register-order/TTBR0--Translation-Table-Base-Register-0--VMSA?lang=en extern pgd_t swapper_pg_dir[PTRS_PER_PGD..
- Total
- Today
- Yesterday
- Quest2
- cockroach db
- SuffixArray
- chrome-extension
- 에러 위치 찾기
- vrpit
- C++
- 잘못된 빨간줄
- set value
- 클래스 맴버 변수 출력하기
- 봄날에 스케치
- RVO
- Visual Studio
- print shared_ptr class member variable
- it's called a vrpit
- Reciprocal n-body Collision Avoidance
- 카카오
- mysql
- red underline
- Obstacle Avoidance
- 코어 남기기
- 영상 픽셀화 하기
- 면접
- vr핏
- Golang
- boost
- shared_from_this
- 우리는 vr핏이라고 부릅니다
- hole-punching
- ad skip
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |