> Can you also explain when to use alloc_pages ? I wanna know in what case to use it in drivers.
alloc_pages is zone allocator which implements buddy allocation algorithm. It is the basic allocation API. Following is the dependency call sequence: kmalloc() --> kmem_cahce_alloc() --> alloc_pages() kmalloc/kmem_cache_alloc have specialized use case where you want slab cache features like reuse of a slab object after freeing it. Its generally good for frequently allocated kernel data structures. alloc_pages is more generic API which allocates multiple pages in order of 2. When your requirements are to allocate a pool of pages on which you may not need slab features, it is an overhead to allocate pages with kmalloc. You can more efficiently manage your pool with alloc_pages(). As an example, page cache allocation for holding files data in cahce is done with alloc_pages and family. Network drivers may allocate their data buffers using alloc_pages. Mostly you would find its use-case for allocating data buffers and not kernel structures. Rajat On Sun, Nov 7, 2010 at 5:43 PM, kernel.niko <[email protected]> wrote: > thanks for all your guys, it's very clear . It's helpful > > Can you also explain when to use alloc_pages ? I wanna know in what case to > > > use it in drivers. thanks again . > > > as i know,kmalloc is based on kmem_cache_alloc ,so what's the different? > > kmalloc uses the generic slab caches available to any kernel code. so your > module will share slab cache with other components in kernel, but if you > specifically want a better slab cache management dedicated to your module > only, that too for a specific type of objects, use the lower function i.e. > kmem_cache_alloc, it will allocate objects from a dedicated slab cache for > your module objects only, you must create the slab cache by calling > kmem_cache_create before allocating any object. kmem_cache_create takes > sizeof your object you want to create slab of, a name which appears in > /proc/slabinfo and flags to govern behavior of your slab cache. > > Rajat > > On Fri, Nov 5, 2010 at 1:22 PM, Venkatram Tummala > <[email protected]>wrote: > >> On Thu, Nov 4, 2010 at 8:03 PM, kernel.niko <[email protected]> >> wrote: >> > hi,everyone, >> > I'm wandering how to use kmalloc and kmem_cache_alloc. >> > as i know,kmalloc is based on kmem_cache_alloc ,so what's the different? >> >> kmalloc should be used when you want to allocate byte sized memory as >> opposed to allocating memory in units of pages, in which case you >> should use alloc_pages(..). >> >> kmem_cache_alloc is a part of the slab cache interface. This is used >> for reusing objects in the kernel. Lets take mm_struct objects as an >> example. On a live system, processes come & go. Every process needs a >> mm_struct object. And when a process dies, you can throw away the >> object. Instead of creating & throwing away objects, slab cache >> maintains a cache of objects. When you free an object, instead of >> deallocating it, you give it back to the cache. Next time, if you >> want to create a new object, slab cache gives you one object from the >> slab cache. kmem_cache_alloc is one of the interface functions to use >> the slab cache in the kernel. You might want to read about slab caches >> in detail if you need more information. >> >> Venkatram Tummala >> > when to use kmalloc? and >> > in what occasion,kmem_cache_alloc should be used? >> > thanks. >> > >> > 2010-11-05 >> > ________________________________ >> > kernel.niko >> >> -- >> To unsubscribe from this list: send an email with >> "unsubscribe kernelnewbies" to [email protected] >> Please read the FAQ at http://kernelnewbies.org/FAQ >> >> >
