티스토리 뷰

개발/Linux

vmalloc 영역... [가설]

Jaeyeon Baek 2011. 10. 28. 08:38


연속적이지 않은 메모리 공간을 사용할 수 있고, 물리 메모리의 크기와 관계없이 큰 주소 공간을 제공 받는 가상 메모리, vmalloc은 메모리의 어떤 영역을 차지하는지에 대한 궁금증이 생겼습니다. 우선 x86 System의 메모리 공간은 아래와 같이 나뉩니다 (절대적인 것은 아닙니다)

 ZONE_DMA  0~16M
 ZONE_NORMAL  16~896M
 ZONE_HIGHMEM  896 ~ end

ZONE_NORMAL 영역이 896M까지인 이유는 vmalloc이 default 로 128M (상위 메모리 페이지 프레임을 매핑하기 위한 전용) 잡고 있기 때문, vmalloc을 kbyte단위로
너무 작게 설정할 경우 application영역의 메모리 size가 상대적으로 줄어 정상적인 kernel 부팅이 되지 않을수 있습니다.


zone에 대한 정보는 /proc/zoneinfo 를 통해 확인할 수 있으며, 이제 본격적인 테스트를 진행합니다. 테스트에 사용된 장비는 x86 System, physical memory 8G 정도의 스펙. 최초 vmalloc의 Total size를 128M로 설정 했을 경우 HighMem의 start_pfn은 753664 와 같았습니다. (PAGE 4096을 곱셈하면 메모리가 계산됩니다 - 32bit 머신의 경우 PAGE size는 4096)

두번째 테스트는 vmalloc의 Total size를 256M로 설정, 이때에 HighMem의 start_pfn은 720896. HighMem의 start_pfn PAGE가 줄어들었음을 확인 할 수 있습니다. 이것은 상대적으로 Normal zone의 영역이 줄어 들었다는 것을 의미합니다.

간단한 테스트를 통해 vmalloc 영역이 Normal zone에 해당하는것에 대한 어느정도의 입증을 마쳤습니다. 그렇다면, vmalloc의 영역은 Kernel에서 침범(?)할 수 있을까요? 이를테면, Kernel에서 메모리 부족 발생시에 이 영역을 사용할 수 있을까 하는 의문이 듭니다. 지금 상태의 가설대로라면 영역 자체가 다르기 때문에 사용할 수 없다는 결론을 내리고 싶지만, 이에 따른 테스트를 통해 정확히 입증을 하겠습니다. 하지만, 그 테스트는 다음에...


※ 주관적인 내용으로 아직 가설에 해당하는 내용입니다.


'개발 > Linux' 카테고리의 다른 글

for_each_possible_cpu  (0) 2011.11.01
dmesg Option  (0) 2011.10.31
RPC Packet header에 대한 짧은 참고의 글..  (0) 2011.10.13
sleep_on(), wake_up()  (0) 2011.10.10
lighttpd.conf [cipher-list]  (0) 2011.10.10
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday