Re: [Lhms-devel] [RFC] free_area[] bitmap elimination [0/3]
From: Hiroyuki KAMEZAWA <hidden>
Date: 2004-08-23 23:54:52
Dave Hansen wrote:
On Fri, 2004-08-20 at 19:31, Hiroyuki KAMEZAWA wrote:quoted
This patch removes bitmap from buddy allocator used in alloc_pages()/free_pages() in the kernel 2.6.8.1.Looks very interesting. The most mysterious thing about it that I can think of right now would be its cache behavior. Since struct pages are at least 1/2 a cacheline on most architectures, you're going to dirty quite a few more cachelines than if you were accessing a quick bitmap. However, if the page was recently accessed you might get *better* cacheline performance because the struct page itself may have been hotter than its bitmap.
The use of page_count()==0 is a little worrisome. There's almost certainly some race conditions where a page can be mistaken for free while it's page_count()==0, but before it's reached free_pages_bulk(). BTW, even if page_count()==0 isn't a valid check like you fear, you could always steal a bit in the page->flags. Check out free_pages_check() in mm/page_alloc.c for a nice summary of what state pages have to be in before they're freed.
Thanks for your comment. In this patch, "whether a page is free and in buddy allocator ?" is confirmed by page_count(page) == 0 and page_order(page) == valid_order. A valid_order is a value between (unsigned long)~0 - (unsigned long)~(MAX_ORDER) But there may be pages which have vague page->private and conflict with my buddy page checking. I'd like to read free_pages_check() more and take page->flags into account. -- KAME -- --the clue is these footmarks leading to the door.-- KAMEZAWA Hiroyuki [off-list ref] -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>