tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Patch: optimize kmem_alloc for frequent mid-sized allocations



hi,

> kmem_alloc() performs very well on single and multi-processor systems when
> the allocation request can be satisfied with the quantum cache, as
> demonstrated by the 'allocfree' kernel module:
> 
>       http://www.netbsd.org/~ad/cleanout/kmem-128.png
> 
> It breaks down when the allocation size is greater than can be satisfied
> with the quantum cache - typically 128 bytes:
> 
>       http://www.netbsd.org/~ad/cleanout/kmem-1024.png
> 
> This is understandable and acceptable because for large allocations,
> because:
> 
> - kmem_alloc() is more space efficient than malloc() and so has more work
>   to do.
> 
> - It returns unused memory back to the system, unlike malloc() which holds
>   onto the allocated memory.
> 
> It is a problem for "mid-sized" allocations, up to PAGE_SIZE because these
> occur frequently. The below patch introduces an additional level of caching,
> from the maximum size provided by the quantum cache up to PAGE_SIZE. It also
> adds debug code to check that allocated size == freed size.
> 
>       http://www.netbsd.org/~ad/cleanout/kmem.diff
> 
> The patch is against 5.0 and so may not cleanly apply to -current.
> 
> Comments?

the patch looks fine to me.

(i was thinking about making kmem feed a list of "interesting" sizes
into vmem, so that vmem can do the similar.  but your approach is
also fine for me.)

YAMAMOTO Takashi

> 
> Thanks,
> Andrew


Home | Main Index | Thread Index | Old Index