x86-8 / linux-3.2

iamroot.org linux study x86 8th
Other
4 stars 1 forks source link

3가지 메모리 모델이 있군요 #2

Open Minq opened 11 years ago

Minq commented 11 years ago

Contigmem 메모리 모델 Discontigmem 메모리 모델 Sparsemem 메모리 모델

이렇게 언급되는 모델이 있습니다. Hole이라고 언급되는 부분이 가상메모리의 홀보다는 이 불연속적인(Discontigmem, Sparsemem)부분이 포함된 모델의 끊어진 부분을 Hole이라고 언급이 될꺼라고 추측 합니다. 자세한것은 스터디때 이야기 해봐요. :clock3:

Minq commented 11 years ago

Contigmem 이라고 부르지 않고 Flatmem이라고 부르는군요. 이곳에 좀더 자세한 내용이 언급되어 있습니다.

hwiorn commented 11 years ago

sparsemem는 프로세서의 주소 공간이 서로 다른 메모리 뱅크로 이루어져 중간 중간 마다 hole이 존재할 수 있는, 비-연속 물리적 메모리를 지원하는 모델인 것 같네요.

전체 물리 메모리를 각 SECTION_SIZE 크기로 나누어 section들로 관리하는데, 해당 section들은 메모리 물리적 유효성에 따라 유효(online)하거나 유효(offline)하지 못한 상태를 갖을 수 있다고 합니다(http://mytechkorner.blogspot.kr/2010/12/sparsemem.html)

page->flag에 section 번호가 저장되어 사용된다고 하는데, 32비트에서는 저장할 수 있는 비트가 제약이 있어, page->flag의 크기를 늘려야 한다고 하네요. 해당 section 번호는 한번 저장되면 더 이상 NUMA NODE 정보가 저장될 필요없다고 하는데 이 부분은 소스를 살펴봐야 할 것 같습니다. (저장된 section번호는 NODE에서 메모리 접근시 사용될 것으로 보입니다)

저번 주 스터디 때 보았던 NODE_NOT_IN_PAGE_FLAGS 가 좀 헷갈리게 했었는데... 아마도 해당 page->flag에 section 번호를 저장하지 못하는 머신들을 위해 있는게 아닐까 생각됩니다. (NODE_WIDTH가 없을때 NODE_NOT_IN_PAGE_FLAGS 선언됨)

hwiorn commented 11 years ago

x86_64에서는 sparsemem 이 기본입니다.

flatmem과 discontigmem 그리고 sparsemem의 할당 속도 비교인데, 내용을 보면, discontigmem보다 sparsemem 이 속도가 빨리 나오고, flatmemsparsemem보다 월등히 빠르지 않다는 점을 이유로 discontigmem대신 sparsemem이 기본으로 활성화 되었습니다.

sparsemem이 x86_64에서 속도가 빠를 수 있었던 것은 vmemmap(x86_64에서 사용가능)과 TLB를 사용 해서 라고 합니다(이 부분은 찾다가 얼핏 읽은 부분이라 어떤 방식으로 빠른지는 모르겠습니다)

재밌는 건, 기존에 discontigmem이 NUMA 일 때만 사용 가능 했었는데, sparsemem은 NUMA가 아닐 때도(UP, SMP) 가능하게 수정되어 있군요. 현재는 CONFIG_ARCH_SPARSEMEM_ENABLE이 x86_64, NUMA, x86_32(비 표준) 에서 사용 가능 합니다.