LINUX.ORG.RU

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


0

0

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

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

Спасибо.

anonymous

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

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

Дж. Бонд.

anonymous ()

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

На нормальных машинках это действительно легко делается через 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 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.