일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- buddy_system
- Apache
- multiqueue
- Linux
- slowpath
- slub
- blk-mq
- kmalloc
- vm_area_struct
- allocator
- slab
- lruvec
- Kernel
- kafka
- pmap
- vmalloc
- strex
- spinlock
- mm_struct
- devicedriver
- memory
- proc
- Network
- NDK
- fastpath
- commit
- page
- 카프카
- BLOCK
- Android
- Today
- Total
목록Pr0gr4m (45)
Art of Pr0gr4m
NUMA는 Non-Uniform Memory Access의 약자로, 멀티 프로세서 시스템에서 메모리에 접근하는 시간이 메모리와 프로세서간의 상대적 위치에 따라 달라지는 메모리 설계 방법이다. CPU의 속도가 메모리 접근 시간에 비해 월등히 빠르기 때문에, 자연스레 data starvation 현상이 나타난다. NUMA는 시스템 상의 모든 CPU가 같은 메모리에 접근하는 대신, 각 CPU별로 접근할 수 있는 메모리 영역을 나누어 자신이 이용할 수 있는 메모리 공간에 대해서 다른 CPU의 메모리 접근에 관계없이 빠르게 접근하여 이를 개선한다. NUMA의 concept에 대한 더 자세한 내용은 다음 링크들을 참고하고, 이번 포스트에서는 리눅스에서 NUMA를 어떻게 구현하고 있는지 알아본다. https://ko..
이번 포스트에서는 커널의 memory allocator 에 대해 알아본다. 1. Page Allocator 다음은 page allocator를 이용하여 페이지 단위로 메모리를 할당하는 API들이다. static inline void *page_address(const struct page *page); static inline void set_page_address(struct page *page, void *address); static inline struct page * alloc_pages(gfp_t gfp_mask, unsigned int order); #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0) unsigned long __get_free_p..
이번 포스트에서는 메모리 할당 정책의 기반이 되는 메모리 존에 대해서 알아본다. 1. Memory Zone 리눅스 커널은 물리 메모리의 주소 영역을 나눠 Zone으로 관리한다. Zone 타입은 다음과 같다. enum zone_type { /* * ZONE_DMA and ZONE_DMA32 are used when there are peripherals not able * to DMA to all of the addressable memory (ZONE_NORMAL). * On architectures where this area covers the whole 32 bit address * space ZONE_DMA32 is used. ZONE_DMA is left for the ones with smal..
이번 포스트부터는 리눅스의 메모리 모델과 관리 정책들에 대해서 알아본다. 가장 먼저 가상 메모리와 페이징에 대해서 알아볼 것이다. 참고로 세그먼테이션은 추후에 부팅과정에 대해 다룰 때 운영 모드와 함께 다룰 예정이며, 메모리 관리 정책에서는 넘어갈 것이다. 또한, 해당 포스트는 가상 메모리와 페이징의 일반적인 개념을 공부하는 포스트는 아니므로 컨셉에 대한 공부가 필요하다면 아래 링크를 참고하도록 한다. https://en.wikipedia.org/wiki/Virtual_memory flags bits: * * PG_reserved is set for special pages. The "struct page" of such a page * should in general not be touched (e.g..