2011-11-22 21 views
0

我發現alloc_pages()被alloc_fresh_huge_page_node()調用來分配一個巨大的頁面,只是想確認它是否分配一個物理巨大的頁面,也建立內存映射?是否alloc_pages()分配2MB大頁面?

static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid) 
{ 
    struct page *page; 

    if (h->order >= MAX_ORDER) 
     return NULL; 

    page = alloc_pages_exact_node(nid, 
     htlb_alloc_mask|__GFP_COMP|__GFP_THISNODE| 
         __GFP_REPEAT|__GFP_NOWARN, 
      huge_page_order(h)); 
    if (page) { 
     if (arch_prepare_hugepage(page)) { 
      __free_pages(page, huge_page_order(h)); 
      return NULL; 
     } 
     prep_new_huge_page(h, page, nid); 
    } 

    return page; 
} 

回答

1

Alloc_pages()分配您使用它的任何可能的頁面大小。 2MB是一種選擇(通常在使用PAE時),其他的是2.6內核上的4kb和4MB。

1

嗯,不,alloc_pages()只有在啓用PAE時纔會給你巨大的頁面,這意味着巨大的頁面對於調用者是透明的。但是對於你的情況,使用hugetlb,alloc_pages()不能做到這一點,alloc_fresh_huge_page_node()調用alloc_pages()來分配一些連續的頁面,並通過hugetlb分配器整體管理它們。

相關問題