lkml.org 
[lkml]   [2011]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: Regarding memory fragmentation using malloc....
    Date
    From
    On Thu, 14 Apr 2011 08:44:50 +0200, Pintu Agarwal  
    <pintu_agarwal@yahoo.com> wrote:
    > As I can understand from your comments that, malloc from user space will
    > not have much impact on memory fragmentation.

    It has an impact, just like any kind of allocation, it just don't care
    about
    fragmentation of physical memory. You can have only 0-order pages and
    successfully allocate megabytes of memory with malloc().

    > Will the memory fragmentation be visible if I do kmalloc from
    > the kernel module????

    It will be more visible in the sense that if you allocate 8 KiB, kernel
    will
    have to find 8 KiB contiguous physical memory (ie. 1-order page).

    >> No. When you call malloc() only virtual address space is allocated.
    >> The actual allocation of physical space occurs when user space accesses
    >> the memory (either reads or writes) and it happens page at a time.
    >
    > Here, if I do memset then I am accessing the memory...right? That I am
    > doing already in my sample program.

    Yes. But note that even though it's a single memset() call, you are
    accessing page at a time and kernel is allocating page at a time.

    On some architectures (not ARM) you could access two pages with a single
    instructions but I think that would result in two page faults anyway. I
    might be wrong though, the details are not important though.

    >> what really happens is that kernel allocates the 0-order
    >> pages and when
    >> it runs out of those, splits a 1-order page into two
    >> 0-order pages and
    >> takes one of those.
    >
    > Actually, if I understand buddy allocator, it allocates pages from top
    > to bottom.

    No. If you want to allocate a single 0-order page, buddy looks for a
    a free 0-order page. If one is not found, it will look for 1-order page
    and split it. This goes up till buddy reaches (MAX_ORDER-1)-page.

    > Is the memory fragmentation is always a cause of the kernel space
    > program and not user space at all?

    Well, no. If you allocate memory in user space, kernel will have to
    allocate physical memory and *every* allocation may contribute to
    fragmentation. The point is, that all allocations from user-space are
    single-page allocations even if you malloc() MiBs of memory.

    > Can you provide me with some references for migitating memory
    > fragmentation in linux?

    I'm not sure what you mean by that.

    --
    Best regards, _ _
    .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o
    ..o | Computer Science, Michal "mina86" Nazarewicz (o o)
    ooo +-----<email/xmpp: mnazarewicz@google.com>-----ooO--(_)--Ooo--


    \
     
     \ /
      Last update: 2011-04-14 12:51    [W:4.147 / U:0.528 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site