Можем ли мы выделить физически непрерывную память с помощью mmap ()? - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужна физически непрерывная память в aarch64 Linux 4.15 для экспериментальных целей.

Я догадался, что если требуемый размер меньше размера страницы, выделенная память может быть физически смежной, как показано ниже.

void * p = mmap(0, getpagesize() - 1, PROT_READ | PROT_WRITE, MAP_SHARED, 0, 0);

После выделения я идентифицирую его физический адрес по /proc/self/pagemap.

Однако я не могу найти никакой документации по этому поводу. Можно ли выделить физическую смежную память?

Спасибо.

1 Ответ

0 голосов
/ 05 ноября 2018

У вас очень мало контроля над местами физической памяти. Внутри страницы память будет смежной (это более или менее определение страницы). Но разные страницы, смежные в виртуальном адресном пространстве, не обязательно должны быть смежными в физическом адресном пространстве (а страницы, смежные в физическом адресном пространстве, не обязательно должны быть смежными в виртуальном адресном пространстве).

Если вы не собираетесь работать на самых низких уровнях управления памятью ядра, вы не сможете обнаружить физическую смежность в спешке.

Если память между Linux и чем-то еще портирована, у вас могут быть проблемы, но простое использование mmap() не разрешит их.

...