[정리] 3/22 스터디( kmem_cache_init )

조회 수 1699 추천 수 63 2008.03.23 16:16:49
박은병 *.189.127.118
setup_arch이후로 간만에 강력한 녀석을 만난것 같군요..^^ㅋ

여튼 나름 슬랩에대한 전체적인 그림을 그릴수 있었던 시간이였던 것 같습니다.

slub으로 최신 커널에서는 약간 개선 되었다고 하는데 자세한것은 잘 모르겠군요~

간략히 정리해보면

struct kmem_cache 구조체가 슬랩의 핵심 자료구조이다.

모든 슬랩당 하나의 kmem_cache 자료구조를 가지고 있다.

그러면 kmem_cache 구조체 조차도 메모리를 차지할텐데 이녀석의 슬랩을 담당하는 것이
cache_cache전역 변수이다. 이녀석또한 kmem_cache 자료형이다.

kmem_cache 구조체안에 struct array_cache 자료형을 멤버 변수로 가지고 있다. 실제 버디 시스템에서 메모리를 미리 할당받아서 array_cache 구조체의 entry멤버 변수에 메모리를 가져다 놓고 여기서 사용자가 슬랩에 메모리를 요청할때마다 가용한 메모리를 떼어다 주게 된다.

struct kmem_list3와 struct slab 자료구조도 있는데 아직 정확히 어떻게 사용되는지 파악 중이다.^^;..

일단 kmem_cache_init에서
1. cache_cache를 만든다. kmem_cache 자료구조를 위한 슬랩을 생성한다.

2+3. kmalloc 를 위한 kmem_cache를 만든다. 이때 cache_cache슬랩에서 kmem_cache구조체의 메모리를 할당받는다. 이때 사용되는 함수가 kmem_cache_create()함수이다. 간략히 cache_cache로부터 kmem_cache메모리를 할당받고 구조체의 내용을 채워주는 역할을 한다. 다음주에 세세히 분석할 예정이다.
malloc_sizes 와 cache_names 에 해당하는 kmem_cache구조체를 만든다. 즉 kmalloc()를 위함 슬랩을 생성하는 것이다. 32,64,96,128,.....등등 아키텍쳐별로 15~20정도를 만들게 된다. 따라서 우리가 kmalloc()를 호출하여 메모리를 얻어오는 것은 이 해당하는 크기의 메모리의 슬랩에서 가져오는 것과 마찬가지이다. 만약 슬랩에 메모리가 부족하다면 버디시스템으로부터 메모리를 확장시키게 되는데 이를 수행하는 함수가 cache_grow함수정도가 되겠다. 아직 어느정도로 확장시키는지 하는 정책은 확인되지 않았다.

4+5. 사실상 제대로 슬랩에서 메모리를 할당하기 위해서는 kmem_list3 구조체와 array_cache 자료구조또한 메모리가 할당되어 있어야 한다. 하지만 초기에는 이런것들이 없으므로 전역변수로 초기화에 필요한 녀석들만 init섹션으로 정의가 되어 있다. 따라서 이런녀석들을 kmalloc으로 할당받아 대치시킨다. 나중에 init섹션은 없어져 버리기 때문이다. 현재 전역변수로 정의되어 있는 kmem_list3와 array_cache는 (cache_cache용과 kmalloc용( sizeof(kmem_list3), sizeof(array_cache) 이 정의 되어 있다.) 따라서 현재 상태에서 kmalloc으로 이 두 구조체의 메모리를 할당 할 수 있다. 다른 크기의 메모리는 아직 할당할 수 없다.(이 두구조체가 존재하지 않으므로)

6. 다음주부터..^^..추측상으로는 아직 만들지않은 다른 녀석들의 array_cache와 kmem_list3등을 만들고 뭐 이것저것 하지 않을까추측.

다음주부터는 슬랩 나머지를 분석하구..kmem_cache_create()차근차근 분석해보고 메모리를 할당하는 정책(estimate)등을 분석하도록하기로 했었죠?? 시간되면 kmem_cache_alloc()도 함 분석하도록 합시다~~~

p.s 간단히 쓸려고 했는데 이거 쓰다보니까 말이 많아졌네요..ㅜㅜ

이백

2008.03.24 08:30:22
*.120.109.21

네.. 모두 수고하셨습니다.

이백

2008.03.24 08:30:51
*.120.109.21

참.. 스터디 시간을 변경하고자 하는 의견이 다수 있는데, 이번주에 논의해 봅시다.
List of Articles
번호 제목 글쓴이 날짜 조회 수
117 [문서] 커널 분석 문서입니다. file 이백 2008-11-10 1466
116 [공지]스터디 일정 [1] 김재호 2008-06-07 1560
115 [공지사항] ARM11 스터디 분석 종료 [1] 이수연 2008-05-17 1733
114 [잡담] 이쿠 지송합니다. [1] 이백 2008-05-14 1400
113 [공지] 5/2 스터디 박은병 2008-05-02 1449
112 [정보] 서버 ip 모르시는 분들을 위해 알려드립니다. [1] 이정우 2008-04-29 1566
111 [공지] 4/26 스터디 [1] 박은병 2008-04-25 1243
110 [의문] 이번주 스터디 진행하나요? [4] 이수연 2008-04-23 1250
109 [잡담] 4월 19일 스터디 불참 [5] 이백 2008-04-16 1377
108 [잡담] 금일 스터디와 이것저것.. [4] 박은병 2008-04-13 1477
107 java virtual machine 에 관심있으신 분 계신가염? [6] 이수연 2008-04-04 1708
106 [잡담] O(1) 스케쥴러에서 [5] 박은병 2008-04-02 1922
105 [토의] 스터디 진행 [11] 이백 2008-03-31 1547
104 [정리] 3/29 스터디 초간단 정리 @ㅁ@;; 이수연 2008-03-30 1604
103 [정리] 3/29 스터디~~ 박은병 2008-03-30 1462
102 [문의] linux device driver 개정 3판 가지고 계신분? [6] 이백 2008-03-27 1701
» [정리] 3/22 스터디( kmem_cache_init ) [2] 박은병 2008-03-23 1699
100 [slab참고문서] 문경원 2008-03-22 1480
99 [공지] 3/22 의 스터디. [3] 김성준 2008-03-21 1568
98 (진행중) 2008-03-15일 진도 내용..이번주 했던 내용 정리입니다. [1] 문경원 2008-03-16 1679



XE Login