티스토리 뷰

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_section

sparse_early_mem_map_alloc -> sparse_mem_map_populate -> if (vmemmap_populate(start, end, nid))

// sparse vmem 을 사용한다면, 할당한 map 이 아니라 vmemmap 에다가 할당해서 바로 mem_map 을 쓰는구나

 

 

bootmem_init -> {sparse_init, zone_sizes_init}

zone_siezs_init -> zone 사이즈 제고, 실제 reg 있는거 를 뻬면 남은거니까 이게 hole

https://elixir.bootlin.com/linux/v4.9.337/source/arch/arm64/Kconfig#L202
일단 기본으로 ZONE_DMA 는 켜있음

 


4.3 존

존과 노드

노드는 각각 MOVABLE 존을 하나씩 가질 수 있는걸로 보임

movable node 가 켜져있을때 -> 노드가 아예 Movable 만 사용

mirrored_kernelcore -> 미러링이 되어있지 않은 memblock 을 movable 에서 사용. 다른 노드에서 똑같은 물리 페이지를 복사해서 가지고 있고, 변경되면 업데이트 되는걸 말하는 듯함. 그래서 미러링 되지 않은 페이지는 안정적이지 않다고 생각해서 movable 로 사용

required_movablecore -> 비율에 맞춰 movable 사용

 

memory_model.h - include/asm-generic/memory_model.h - Linux source code v4.9 - Bootlin Elixir Cross Referencer

/ include / asm-generic / memory_model.h

elixir.bootlin.com

 

 

memory_model.h - include/asm-generic/memory_model.h - Linux source code v4.9 - Bootlin Elixir Cross Referencer

/ include / asm-generic / memory_model.h

elixir.bootlin.com

 

 

댓글