Re: the cost of vmalloc

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

 



Hi!

On 11:15 Sat 10 Sep     , Zheng Da wrote:
> On Sat, Sep 10, 2011 at 3:35 AM, Michael Blizek
> <michi1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
> >> I need to allocate fairly a large piece of memory, about 128KB or
> >> 256KB. I tried to use kmalloc, and it sometimes fails, but vmalloc in
> >> this case usually still work.
> >> But I'm not sure how costly vmalloc is. As far as I know, vmalloc
> >> needs to change the page table, and thus might need to invalidate TLB.
> >> It seems quite expensive. If it is, maybe I can allocate memory with
> >> kmalloc first, and then try to use vmalloc if kmalloc fails. Any
> >> suggestions?
> >
> > If it is at all possible, I would suggest avoiding to allocate more than
> > PAGE_SIZE (usually 4KB) in one continuous chunk. You can use e.g.
> > scatterlists (which are basically lists of pointers) if you need a bigger
> > buffer.
> Actually, I have seen some problems when allocating large pieces of
> memory constantly. Occasionally, I see alloc_pages and kmalloc fails
> to allocate the memory I want.

This does not really suprise me. Once the memory fragments, allocating large
continuous memory regions gets harder.

> The whole point of allocating a large chunk of memory is to avoid
> extra memory copy because I need to run decompression algorithms on
> it.

In this case scatterlists solves 2 problems at once. First, you will not need
to allocate large continuous memory regions. Second, you avoid wasting memory.

> Or memory copy is cheaper?

This is hard to say. But by passing the scatterlist you should be able to
avoid the copying.

> I'm also thinking of using slab allocator. The size of memory I need
> to allocate can change from 20KB to 128KB. Then I need quite a few
> slab allocators.

The slab allocator is good if you have a large number of allocations which
are the same size. To me it does not really sound like a good idea to use the
slab allocator in your case. 

	-Michi
-- 
programing a layer 3+4 network protocol for mesh networks
see http://michaelblizek.twilightparadox.com


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux