no buddy bitmap patch revist : intro and includes [0/2]
Subsystems (3)
PATCH 1/1 no buddy bitmap patch revist : intro and includes [0/2]
Hi
Followings are patches for removing bitmaps from the buddy allocator, against 2.6.9-rc3.
This is benefical to memory-hot-plug stuffs, because this removes a data structure which must meet to a host's physical memory layout.
Difference from one I posted yesterday is using CONFIG_HOLES_IN_ZONE instead of HOLES_IN_ZONE and some fixes on comments.
This patch removes bitmaps in zone->free_area[] used in the buddy system. Instead of using bitmaps, this patch records a free page's order in a page struct itself using page->private field.
I removed "#define HOLES_IN_ZONE in asm/page.h" and added CONFIG_HOLES_IN_ZONE to Kconfig. An architecuture which has memory holes in a zone has to set this CONFIG. As far as I know, only ia64 with virtual memmap has to set this now.
In my performance test on ia64 SMP, there is no performance influence of this patch.
Kame <[email protected]> ============= patches for include files ==================
This patch set removes bitmaps from the page allocator.
Purpose:
This is one step to manage physical memory in nonlinear / discontiguous way and will reduce some amounts of codes to implement memory-hot-plug.
About this part:
This patch removes bitmaps from zone->free_area[] in include/linux/mmzone.h, and adds some comments on page->private field in include/linux/mm.h.
non-atomic ops for changing PG_private bit is added in include/page-flags.h. zone->lock is always acquired when PG_private of "a free page" is changed.
---
test-kernel-kamezawa/include/linux/mm.h | 2 ++ test-kernel-kamezawa/include/linux/mmzone.h | 1 - test-kernel-kamezawa/include/linux/page-flags.h | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-)
include/linux/mm.h renamed from include/linux/mm.h~eliminate-bitmap-includes +2 -0
@@ -209,6 +209,8 @@ struct page {* usually used for buffer_heads * if PagePrivate set; used for * swp_entry_t if PageSwapCache +* When page is free, this indicates +* order in the buddy system. */ struct address_space *mapping;/* If low bit clear, points to * inode address_space, or NULL.
include/linux/mmzone.h renamed from include/linux/mmzone.h~eliminate-bitmap-includes +0 -1
@@ -22,7 +22,6 @@struct free_area {struct list_head free_list; -unsigned long *map; };struct pglist_data ;
include/linux/page-flags.h renamed from include/linux/page-flags.h~eliminate-bitmap-includes +2 -0
@@ -238,6 +238,8 @@ extern unsigned long __read_page_state(u#define SetPagePrivate (page) set_bit(PG_private, &(page)->flags)#define ClearPagePrivate (page) clear_bit(PG_private, &(page)->flags)#define PagePrivate (page) test_bit(PG_private, &(page)->flags) +#define __SetPagePrivate (page) __set_bit(PG_private, &(page)->flags) +#define __ClearPagePrivate (page) __clear_bit(PG_private, &(page)->flags)#define PageWriteback (page) test_bit(PG_writeback, &(page)->flags)#define SetPageWriteback (page) \
_
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>