LINUX.ORG.RU

Модуль ядра: максимальный объём доступной памяти.


0

0

Как можно узнать, сколько памяти можно максимально выделить в моём модуле ядра?

Можно ли как-нибудь выделить для моего модуля ядра 8Гб памяти (если на компьютере установлено 16Гб оперативки)?

Спасибо.

anonymous

как обычно -
vmalloc (доступен страничный обмен);
kmalloc (только в RAM), основан на семействе функций GFP;
just curious, ты не обманываешь про такое количество памяти?
если нет то наверняка это big N-way SMP машина ;)
кстати не уверен, посмотри в сети про higmem, но проще всего конечно
сразу написать модуль.

Дж. Бонд.

anonymous
()

На нормальных машинках это действительно легко делается через vmalloc (или kmalloc, если необходим непрерывный кусок памяти), но на IA32 это все не работает, т.к. и kmalloc allocator и vmalloc allocator пытаются создавать трансляцию страниц в KVM (которая ограничена 800-900 Мб в случае kmalloc и порядка 100 Мб в случае vmalloc при TASK_SIZE=0xc0000000).

Единственный выход - это использовать low level allocator вроде alloc_page, при этом трансляцию каждой отдельной страницы при ее использовании на KVM надо будет создавать ручками (kmap).

Число свободных страниц можно получить через nr_free_pages(). Правда, не уверен, что она экспортируется (в любом случае это небольшой cut&paste).

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.