Messages in this thread | | | Subject | Re: Regarding memory fragmentation using malloc.... | Date | Thu, 14 Apr 2011 12:47:53 +0200 | From | "Michal Nazarewicz" <> |
| |
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--
| |