Re: [RFC] genalloc != generic DEVICE memory allocator

Pantelis Antoniou
2005-12-22T08:43:56Z

Andrey Volkov wrote:
> Hello Jes and all
>
> I try to use your allocator (gen_pool_xxx), idea of which
> is a cute nice thing. But current implementation of it is
> inappropriate for a _device_ (aka onchip, like framebuffer) memory
> allocation, by next reasons:
>
> 1) Device memory is expensive resource by access time and/or size cost.
> So we couldn't use (usually) this memory for the free blocks lists.
> 2) Device memory usually have special requirement of access to it
> (alignment/special insn). So we couldn't use part of allocated
> blocks for some control structures (this problem solved in your
> implementation, it's common remark)
> 3) Obvious (IMHO) workflow of mem. allocator look like:
> - at startup time, driver allocate some big
> (almost) static mem. chunk(s) for a control/data structures.
> - during work of the device, driver allocate many small
> mem. blocks with almost identical size.
> such behavior lead to degeneration of buddy method and
> transform it to the first/best fit method (with long seek
> by the free node list).
> 4) The simple binary buddy method is far away from perfect for a device
> due to a big internal fragmentation. Especially for a
> network/mfd devices, for which, size of allocated data very
> often is not a power of 2.
>
> I start to modify your code to satisfy above demands,
> but firstly I wish to know your, or somebody else, opinion.
>
> Especially I will very happy if somebody have and could
> provide to all, some device specific memory usage statistics.
>

Hi Andrey,

FYI, on arch/ppc/lib/rheap.c theres an implementation of a remote heap.

It is currently used for the management of freescale's CPM1 & CPM2 internal
dual port RAM.

Take a look, it might be what you have in mind.

Regards

Pantelis