Thread (59 messages) 59 messages, 14 authors, 2011-07-04

[PATCH 08/10] mm: cma: Contiguous Memory Allocator added

From: m.szyprowski@samsung.com (Marek Szyprowski)
Date: 2011-06-15 08:15:35
Also in: linux-media, linux-mm, lkml

Hello,

On Wednesday, June 15, 2011 9:37 AM Arnd Bergmann wrote:
On Wednesday 15 June 2011 09:11:39 Marek Szyprowski wrote:
quoted
I see your concerns, but I really wonder how to determine the properties
of the global/default cma pool. You definitely don't want to give all
available memory o CMA, because it will have negative impact on kernel
operation (kernel really needs to allocate unmovable pages from time to
time).
Exactly. This is a hard problem, so I would prefer to see a solution for
coming up with reasonable defaults.
The problem is to define these reasonable defaults, because they also depend
on the target usage pattern for the board. If one doesn't plan to use video
codec at all, then the value calculated for full HD movie decoding are 
definitely too high.
quoted
The only solution I see now is to provide Kconfig entry to determine
the size of the global CMA pool, but this still have some issues,
especially for multi-board kernels (each board probably will have
different amount of RAM and different memory-consuming devices
available). It looks that each board startup code still might need to
tweak the size of CMA pool. I can add a kernel command line option for
it, but such solution also will not solve all the cases (afair there
was a discussion about kernel command line parameters for memory
configuration and the conclusion was that it should be avoided).
The command line option can be a last resort if the heuristics fail,
but it's not much better than a fixed Kconfig setting.

How about a Kconfig option that defines the percentage of memory
to set aside for contiguous allocations?
There can be probably both types of Kconfig entries: for absolute value
and the percentage of the total memory, but still, creating a 
fully-functional multi-board kernel will be really hard.

However there is one more issue here. It is quite common that embedded
systems have memory that is not really contiguous in address space
(there are some holes that splits it into 'banks' or regions). So we
might have a system with 256MiB of memory split into 2 memory banks.
In this case the CMA pool can use only one of them (the pool must be
contiguous internally). I'm not sure if such systems might require more
memory for contiguous buffers.

Best regards
-- 
Marek Szyprowski
Samsung Poland R&D Center
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help