SLAB

Category
아이템: SLAB(9)
포스트 갯수9

[리눅스커널] 메모리 관리: kmalloc 캐시 슬럽 오브젝트 할당 커널 함수 분석하기

By Guillermo Austin Kim | 2019년 9월 1일 | 
우리는 'kmalloc() 함수를 호출하면 동적 메모리를 할당할 수 있다.'란 사실을 알고 있습니다. 하지만 kmalloc() 함수에서 호출하는 커널 내부 함수는 거의 분석하지는 않는 듯 합니다. 이번 시간에는 kmalloc() 함수와 이 함수에서 호출하는 다음 함수를 분석합니다.kmalloc_index()kmem_cache_alloc_trace()slab_alloc()slab_alloc_node() kmalloc() 함수 분석하기 우리가 드라이버 드라이버에서 동적 메모리를 할당할 때 주로 사용하는 함수는 kmalloc()입니다. 그런데 kmalloc() 함수는 생각보다 분석하기 어렵습니다.  슬랩 캐시와 슬럽 오브젝트의 개념을 알고 있어야 분석이 가능하기 때문입니다. 이어서

[리눅스커널] 메모리관리: 슬랩(Slab) 메모리 할당자를 이루는 주요 개념

By Guillermo Austin Kim | 2019년 7월 30일 | 
리눅스 커널 메모리 서브 시스템 개발자들은 다음과 같은 목표로 메모리 성능 개선을 해왔습니다.- 메모리 할당 속도- 메모리가 파편화 최소화 물론 메모리을 빨리 할당하고 되도록 잔여 메모리를 많이 남기려는 목적입니다. 슬랩(Slab)이란 필자가 언급했듯이 커널 메모리 관리의 핵심 중 하나인 '슬랩(Slab)의 개념'은 매우 어렵습니다. 그래서 이해를 돕기 위해 구내 식당을 예를 들면서 '슬랩(Slab)'을 설명하겠습니다. 구내 식당에 온 사람들은 먼저 무엇을 먹을지 선택합니다. 일일이 메뉴를 지정해 알려주면 식당은 이에 맞게 음식을 준비했습니다. 그런데 문제가 생겼습니다. 점심 시간에 손님이 많이 몰려오면 음식을 준비하는 시간이 오래 걸렸기 때문입니다. 그래서 식당 관리자들이 다음과 같은 주제로 궁

[Kernel] 슬랩 페이지(slab page)가 관리하는 슬랩 오브젝트 갯수

By Guillermo Austin Kim | 2018년 4월 25일 | 
슬랩 페이지 디스크립터가 관리하는 슬랩 오브젝트의 실제 메모리 덤프를 어떻게 접근할까요? 예를 들어 현재 페이지 디스크립터 주소가 0xEC778540 이라고 가정하겠습니다.그리고 각 멤버는 다음과 같구요. 눈으로 잠깐 봐도 kmalloc-64 타입의 슬랩 페이지임을 알 수 있겠죠. (struct page *) (struct page*)0xEC778540 = 0xEC778540 -> ( (long unsigned int) flags = 0x80, (struct address_space *) mapping = 0x0, (void *) s_mem = 0x0, (long unsigned int) index = 0xC518EC00, (void *) freelist = 0xC518E

[Kernel] slab object 자료구조 - 페이지, 슬랩 캐시

By Guillermo Austin Kim | 2018년 4월 23일 | 
이번 시간에는 코어 덤프에서 페이지 디스크립터와 슬랩 오브젝트 자료구조를 알아 봅니다. 우선 다음과 같은 페이지 디스크립터가 있습니다.(struct page *) (struct page*)0xEC778540 = 0xEC778540 -> ( (long unsigned int) flags = 128 = 0x80, //<<--[1] (struct address_space *) mapping = 0x0, (void *) s_mem = 0x0, (long unsigned int) index = 3306744832 = 0xC518EC00, (void *) freelist = 0xC518EC00, //<<--[2] (bool) pfmemalloc = FALSE, (unsign