LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* how to purposfully fragment memory?
@ 2007-03-20 17:43 Chris Friesen
       [not found] ` <a8f16e2b0703201215q78dfdd3du54c77be7c9d843e0@mail.gmail.com>
  0 siblings, 1 reply; 2+ messages in thread
From: Chris Friesen @ 2007-03-20 17:43 UTC (permalink / raw)
  To: linux-kernel


I'm trying to test code paths dealing with fragmented memory, so I'd 
like to have a simple way to cause fragmented memory in the kernel.  Is 
there any API in the kernel that would let me allocate two contiguous 
pages, then free one of them?


I tried the following, but it triggers an oops in free_page():

unsigned long addr =
	__get_free_pages(GFP_KERNEL|__GFP_NORETRY|__GFP_NOWARN, 1);
if (!addr)
	break;
free_page(addr+4096);


Thanks,

Chris

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: how to purposfully fragment memory?
       [not found]   ` <4600393C.8030401@nortel.com>
@ 2007-03-20 21:34     ` Dan Kruchinin
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Kruchinin @ 2007-03-20 21:34 UTC (permalink / raw)
  To: Chris Friesen, linux-kernel

On 3/20/07, Chris Friesen <cfriesen@nortel.com> wrote:
> Asgard wrote:
>
> > btw, can you describe your aim in details?
>
> I'm doing some work on a network device driver.  We were having jumbo
> frame issues after being up for a month or so because it couldn't
> allocate enough contiguous memory.
>
> We've got a new code path now that doesn't need large contiguous
> allocations, so I'd like to demonstrate it by forcing the system to
> become severely fragmented.
>
> Chris
>

and by the way, you can try to use void split_page(struct page *page,
unsigned int order) function, but keep in mind, that it's not
recommended to use it in drivers:
/*
 * split_page takes a non-compound higher-order page, and splits it into
 * n (1<<order) sub-pages: page[0..n]
 * Each sub-page must be freed individually.
 *
 * Note: this is probably too low level an operation for use in drivers.
 * Please consult with lkml before using this in your driver.
 */
void split_page(struct page *page, unsigned int order)

Good luck.
Dan.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-03-20 21:34 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-20 17:43 how to purposfully fragment memory? Chris Friesen
     [not found] ` <a8f16e2b0703201215q78dfdd3du54c77be7c9d843e0@mail.gmail.com>
     [not found]   ` <4600393C.8030401@nortel.com>
2007-03-20 21:34     ` Dan Kruchinin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).