일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Network
- NDK
- mm_struct
- lruvec
- slub
- spinlock
- fastpath
- kmalloc
- multiqueue
- vm_area_struct
- vmalloc
- Linux
- Kernel
- slab
- page
- devicedriver
- pmap
- strex
- memory
- slowpath
- kafka
- Android
- buddy_system
- blk-mq
- allocator
- proc
- Apache
- BLOCK
- commit
- 카프카
- Today
- Total
목록IT (43)
Art of Pr0gr4m
1. Slub Page 할당 저번 포스트의 Slow-path Slub Object 할당에서 new_slab_objects에서 buddy system으로부터 새로운 free object를 할당받는다고 하였다. new_slab_objects의 내부에서는 new_slab -> allocate_slab 함수를 호출하여 새로운 slab page를 할당받는다. static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) { struct page *page; struct kmem_cache_order_objects oo = s->oo; gfp_t alloc_gfp; void *start, *p, *next; int idx; bool sh..
1. Basis 슬랩은 자주 사용하는 메모리 타입을 부팅 시 미리 할당하여 동적 메모리 할당/해제의 비용과 메모리 fragmentation을 최소화하는 일종의 캐시다. `# cat /proc/slabinfo` 명령의 결과로 아래와 같이 슬랩 할당자의 정보를 볼 수 있다. 친숙한(?) task_struct 구조체나, 이 전 포스트들에서 공부했던 request_queue, blkdev_requests, vm_area_struct, mm_struct, anon_vma(_chain) 등이 보인다. 즉, 슬랩은 이렇게 자주 사용하는 데이터 컨테이너를 미리 할당해두고 해당 데이터 할당 요청 시 할당 오버헤드를 최소화한다. Slab Allocator의 최소 할당 단위는 slab object이다. 그리고 slab ob..
이번 포스트에서는 리눅스 커널의 메모리 할당 정책 중 버디 시스템에 대해 알아본다. 1. Basic Concept 이 전 NUMA와 Memory Zone 포스트에서 NUMA 노드마다 Zone들이 있고, Zone에는 free_area 배열이 있는 것을 보았다. Buddy System은 이 free_area를 이용하여 Zone 별로 구현한다. Buddy System은 메모리를 페이지 단위의 2의 승수로 나눠서 메모리 할당과 반환을 수행한다. free_area[0]은 전체 메모리를 4K(1 페이지)로 나눈 목록을 관리한다. free_area[1]은 마찬가지로 8K(2 페이지)로 나눈 목록을 관리하며, 마지막 원소인 free_area[MAX_ORDER - 1]은 4K * 2^(MAX_ORDER - 1)의 사이즈..
NUMA는 Non-Uniform Memory Access의 약자로, 멀티 프로세서 시스템에서 메모리에 접근하는 시간이 메모리와 프로세서간의 상대적 위치에 따라 달라지는 메모리 설계 방법이다. CPU의 속도가 메모리 접근 시간에 비해 월등히 빠르기 때문에, 자연스레 data starvation 현상이 나타난다. NUMA는 시스템 상의 모든 CPU가 같은 메모리에 접근하는 대신, 각 CPU별로 접근할 수 있는 메모리 영역을 나누어 자신이 이용할 수 있는 메모리 공간에 대해서 다른 CPU의 메모리 접근에 관계없이 빠르게 접근하여 이를 개선한다. NUMA의 concept에 대한 더 자세한 내용은 다음 링크들을 참고하고, 이번 포스트에서는 리눅스에서 NUMA를 어떻게 구현하고 있는지 알아본다. https://ko..