Выделяет ли alloc_pages () огромную страницу размером 2 МБ? - PullRequest
0 голосов
/ 22 ноября 2011

Я обнаружил, что alloc_pages () вызывается alloc_fresh_huge_page_node () для выделения одной огромной страницы, просто хочу подтвердить, выделяет ли она одну физическую огромную страницу и также строит отображение памяти?

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;
}

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Ну, нет, alloc_pages () может дать вам огромные страницы только при включенном PAE, что означает, что огромные страницы прозрачны для звонящих.Но для вашего случая используется hugetlb, alloc_pages () не может этого сделать, alloc_fresh_huge_page_node () вызывает alloc_pages () для выделения нескольких смежных страниц и управления ими в целом с помощью распределителей hugetlb.

1 голос
/ 22 ноября 2011

Alloc_pages () выделяет любой возможный размер страницы, для которого вы его используете. 2 МБ - это один из вариантов (обычно при использовании PAE), остальные - в ядре 2.6 - 4 КБ и 4 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...