본문 바로가기 메뉴 바로가기

두찡의 일상

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

두찡의 일상

검색하기 폼
  • 분류 전체보기 (129)
    • 개발 (119)
      • 알고리즘 (6)
      • 일상 (50)
      • 병렬프로그래밍 (8)
      • 도트도전기 (12)
      • 코드로 알아보는 ARM 리눅스 커널 TIL (33)
      • arm64 linux 6 분석 (10)
    • 게임근황 (6)
    • 개발 외 일상 (2)
  • 방명록

분류 전체보기 (129)
20241123 4.7.6 슬랩 객체 할당 (p449) & 4.7.7 슬랩 객체 해제

4.7.6 슬랩 객체 할당 (p449)4-137 p464 new_slab_objectsnode 의 partial list 를 cpu 캐시로 옮겨온다, 없는 경우 버디 시스템에서 할당 받는다.slub 에서 node 는 partial list 만 갖고 있고, cpu cache 에서는 freelist, page, partial 로 관리된다.freelist = get_partial() // cpu 캐시로 노드의 partial list 에서 가져오기if (freelist) return freelist;page = new_slab(s, flags, node); // 없는 경우 버디시스템에서 할당freelist = page->freelist // 첫 객체return freelist4-138 p467 get_parti..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 30. 15:04
20241116 4.7.5슬랩 페이지와 슬랩 객체 할당 (p442)

4.7.5 p442 슬랩 페이지 할당slab 용으로 페이지를 할당받고, 슬랩 페이지로 사용할 수 있도록 초기화4-125 p443 mm/slub.c new_slab()새 페이지 할당 요청// allocate_slab 을 부를때 최초 생성할 수 있도록 플래그를 추가해서 요청allocate_slab(s, flags & (GFP_RECLAIM_MASK | GFP_CONSTRAINT_MASK), node);4-126 p444 mm/slub.c allocate_slab() 페이지 획득시 권장 order 로 시도후 실패시 최소 order 로 시도// kmem_cache 구조체의 order_objects 인 oo 에는, 권장 order 와 객체수가 담겨있다.s->oo;첫번째 요청시에는 warning 과 retry 플래..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 21. 00:05
20241109 4.7.4 kmem 캐시 생성 (p426)

4-114create_kmalloc_cacheskmalloc 캐시를 CACHE_BYTES 부터 배수로 미리 생성3 부터 2의 배수로 사용하고 0,1 은 96, 192 사이즈KMALLOC_MIN_SIZE : 캐시 라인 크기4-115create_kmalloc_cachekmem_cache_zalloc: zalloc 은 0으로 모두 set 한다는 의미 -> 452 페이지에서 다시 나옴kmem_cache 구조체를 할당하기 위한 kmem_cache 객체를 사용. 이것 또한 keme_cache 를 받는 slab 에서 받아오는 것4.7.4 kmem 캐시 생성 (p426)4-116kmem_cache_createkmem 캐시를 생성4-117_kmem_cache_alias이전에 만들어둔 kmem 캐시와 병합이 가능하다면 해..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 21. 00:02
241102 메모리 관리 (p394) & 4.7 슬랩 할당자 (p410)

4-101, 102kswapd 는 페이지를 회수하는데, watermark_high 보다 올라가면 잠들고, low 보다 낮아지면 깨어나서 회수를 시작한다.min_free_kbytes 보다 높아질때까지 kswapd 는 메모리를 확보하고, min 보다 낮아지는 경우는 kswapd 에 의존하기만 하지 않고, 직접 페이지 수행을 시도해본다page_alloc.c __zone_watermark_okalloc_harder = highautomic 용도로 사용되는 reserve 페이지 블록에서도 할당free_pages 로 들어온 인자는 밖에서 zone_page_stage(z_ NR_FREE_PAGES)) 로 넘어온 값min = ? 여기에서 min 의 의미가 뭘까? -> 할당 성공률을 높인다고는 하는데,,min = mar..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 21. 00:01
20241026 4.6.9 slowpath 페이지 할당 (p388)

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 도 없다 (전체 노드에 대한..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 20. 23:59
20241019 4.6 페이지 할당자 (p356)

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..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 20. 23:53
20241012 4.4.4 버디 시스템의 페이지 해제 (p336) ~ 4.5 pcp (355)

__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 인지 검사하기 때문 ┌────────────────────┐└──▲──────────▲──────┘┌──┼──────┐┌──┼──────..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 20. 23:46
20241005 4.4.3 버디 시스템의 페이지 할당 (p322)

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..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 20. 23:43
20240928 4.4 버디 시스템 (p309)

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) 개씩 관리 - 자주 사용되는 페이지..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 16. 15:32
20240921 4.3.3 vmemmap 을 사용하는 sparse 메모리 모델 (p277)

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/* * ..

개발/코드로 알아보는 ARM 리눅스 커널 TIL 2024. 11. 16. 15:30
이전 1 2 3 4 5 6 7 ··· 13 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
  • 링크드인
  • 깃허브
TAG
  • hole-punching
  • 코어 남기기
  • 에러 위치 찾기
  • 클래스 맴버 변수 출력하기
  • chrome-extension
  • Quest2
  • C++
  • ad skip
  • 면접
  • Reciprocal n-body Collision Avoidance
  • mysql
  • Obstacle Avoidance
  • vr핏
  • 카카오
  • it's called a vrpit
  • vrpit
  • cockroach db
  • 우리는 vr핏이라고 부릅니다
  • Visual Studio
  • set value
  • SuffixArray
  • red underline
  • 잘못된 빨간줄
  • print shared_ptr class member variable
  • boost
  • 봄날에 스케치
  • RVO
  • Golang
  • 영상 픽셀화 하기
  • shared_from_this
more
«   2025/06   »
일 월 화 수 목 금 토
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
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바