2012-08-09 15:47:09

by J.Hwan Kim

[permalink] [raw]
Subject: allocation of contiguous memory in kernel mode

Hi, everyone

I wish to alloc physically contiguous memory in kernel mode.
I used the __get_free_pages(gfp_mask, order) function,
but it fails occasionary.
I guess it is caused by memory fragmentation.
My code is kernel driver module which cannot use
bootmem allocation and its platform is x86_64.
My server desktop has 20GB memory.
I wish to know the method to allocate physically
contiguous memory not failing by fragmentation.

Thanks in advance.

Best Regards,
J.Hwan Kim


2012-08-13 22:03:01

by Chris Friesen

[permalink] [raw]
Subject: Re: allocation of contiguous memory in kernel mode

On 08/09/2012 09:47 AM, J.Hwan Kim wrote:
> Hi, everyone
>
> I wish to alloc physically contiguous memory in kernel mode.
> I used the __get_free_pages(gfp_mask, order) function,
> but it fails occasionary.
> I guess it is caused by memory fragmentation.
> My code is kernel driver module which cannot use
> bootmem allocation and its platform is x86_64.
> My server desktop has 20GB memory.
> I wish to know the method to allocate physically
> contiguous memory not failing by fragmentation.

There is no easy answer.

The most portable option is to change the requirements so that you don't
need physically contiguous memory. This is what most network devices
did to handle jumbo frames.

Can you build a new kernel with your code added instead of using a module?

What about booting with artificially limited physical memory (on the
kernel commandline) and then have the module explictly map in memory
from above the usual memory limit?

Chris