Hi Daniel,
On Monday 06 Mar 2017 11:38:20 Daniel Vetter wrote:
On Fri, Mar 03, 2017 at 06:45:40PM +0200, Laurent Pinchart wrote:
- I haven't seen any proposal how a heap-based solution could be used in a
generic distribution. This needs to be figured out before committing to any API/ABI.
Two replies from my side:
- Just because a patch doesn't solve world hunger isn't really a good reason to reject it.
As long as it goes in the right direction, sure :-) The points I mentioned were to be interpreted that way, I want to make sure we're not going in a dead-end (or worse, driving full speed into a wall).
- Heap doesn't mean its not resizeable (but I'm not sure that's really your concern).
Not really, no. Heap is another word to mean pool here. It might not be the best term in this context as it has a precise meaning in the context of memory allocation, but that's a detail.
Imo ION is very much part of the picture here to solve this for real. We need to bits:
Be able to allocate memory from specific pools, not going through a specific driver. ION gives us that interface. This is e.g. also needed for "special" memory, like SMA tries to expose.
Some way to figure out how&where to allocate the buffer object. This is purely a userspace problem, and this is the part the unix memory allocator tries to solve. There's no plans in there for big kernel changes, instead userspace does a dance to reconcile all the constraints, and one of the constraints might be "you have to allocate this from this special ION heap". The only thing the kernel needs to expose is which devices use which ION heaps (we kinda do that already), and maybe some hints of how they can be generalized (but I guess stuff like "minimal pagesize of x KB" is also fulfilled by any CMA heap is knowledge userspace needs).
The constraint solver could live in userspace, I'm open to a solution that would go in that direction, but it will require help from the kernel to fetch the constraints from the devices that need to be involved in buffer sharing.
Given a userspace constraint resolver, the interface with the kernel allocator will likely be based on pools. I'm not opposed to that, as long as pool are identified by opaque handles. I don't want userspace to know about the meaning of any particular ION heap. Application must not attempt to "allocate from CMA" for instance, that would lock us to a crazy API that will grow completely out of hands as vendors will start adding all kind of custom heaps, and applications will have to follow (or will be patched out-of-tree by vendors).
Again I think waiting for this to be fully implemented before we merge any part is going to just kill any upstreaming efforts. ION in itself, without the full buffer negotiation dance seems clearly useful (also for stuff like SMA), and having it merged will help with moving the buffer allocation dance forward.
Again I'm not opposed to a kernel allocator based on pools/heaps, as long as
- pools/heaps stay internal to the kernel and are not directly exposed to userspace
- a reasonable way to size the different kinds of pools in a generic distribution kernel can be found