powerpc: add hugepagesz boot-time parameter
Subsystems (4)
PATCH 1/2 powerpc: add hugepagesz boot-time parameter
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
This patch requires the patch posted by Mel Gorman that adds HUGETLB_PAGE_SIZE_VARIABLE; "[PATCH] Fix boot problem with iSeries lacking hugepage support" on 2007-11-15.
---
Documentation/kernel-parameters.txt | 1 arch/powerpc/mm/hash_utils_64.c | 11 +-------- arch/powerpc/mm/hugetlbpage.c | 41 ++++++++++++++++++++++++++++++++++++ include/asm-powerpc/mmu-hash64.h | 1 mm/hugetlb.c | 1 5 files changed, 46 insertions(+), 9 deletions(-)
Documentation/kernel-parameters.txt +0 -0
@@ -685,6 +685,7 @@ and is between 256 and 4096 characters. It is defined in the file
See Documentation/isdn/README.HiSax.
hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages.
+ hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.
i8042.direct [HW] Put keyboard port into non-translated mode
i8042.dumbkbd [HW] Pretend that controller can only read data from
arch/powerpc/mm/hash_utils_64.c +0 -0
@@ -368,18 +368,11 @@ static void __init htab_init_page_sizes(void)
* on what is available */ if (mmu_psize_defs[MMU_PAGE_16M].shift)
- mmu_huge_psize = MMU_PAGE_16M;
+ set_huge_psize(MMU_PAGE_16M);
/* With 4k/4level pagetables, we can't (for now) cope with a
* huge page size < PMD_SIZE */
else if (mmu_psize_defs[MMU_PAGE_1M].shift)
- mmu_huge_psize = MMU_PAGE_1M;
-
- /* Calculate HPAGE_SHIFT and sanity check it */
- if (mmu_psize_defs[mmu_huge_psize].shift > MIN_HUGEPTE_SHIFT &&
- mmu_psize_defs[mmu_huge_psize].shift < SID_SHIFT)
- HPAGE_SHIFT = mmu_psize_defs[mmu_huge_psize].shift;
- else
- HPAGE_SHIFT = 0; /* No huge pages dude ! */
+ set_huge_psize(MMU_PAGE_1M);
#endif /* CONFIG_HUGETLB_PAGE */
}
arch/powerpc/mm/hugetlbpage.c +0 -0
@@ -24,6 +24,9 @@
#include <asm/cputable.h>
#include <asm/spu.h>
+#define HPAGE_SHIFT_64K 16
+#define HPAGE_SHIFT_16M 24
+
#define NUM_LOW_AREAS (0x100000000UL >> SID_SHIFT)
#define NUM_HIGH_AREAS (PGTABLE_RANGE >> HTLB_AREA_SHIFT)
@@ -526,6 +529,44 @@ repeat:
return err; }
+void set_huge_psize(int psize)
+{
+ /* Check that it is a page size supported by the hardware and
+ * that it fits within pagetable limits. */
+ if (mmu_psize_defs[psize].shift && mmu_psize_defs[psize].shift < SID_SHIFT &&
+ (mmu_psize_defs[psize].shift > MIN_HUGEPTE_SHIFT ||
+ mmu_psize_defs[psize].shift == HPAGE_SHIFT_64K)) {
+ HPAGE_SHIFT = mmu_psize_defs[psize].shift;
+ mmu_huge_psize = psize;
+ } else
+ HPAGE_SHIFT = 0;
+}
+
+static int __init hugepage_setup_sz(char *str)
+{
+ unsigned long long size;
+
+ size = memparse(str, &str);
+
+ int shift = __ffs(size);
+ int mmu_psize = -1;
+ switch (shift) {
+ case HPAGE_SHIFT_64K:
+ mmu_psize = MMU_PAGE_64K;
+ break;
+ case HPAGE_SHIFT_16M:
+ mmu_psize = MMU_PAGE_16M;
+ break;
+ }
+ if (mmu_psize >= 0 && mmu_psize_defs[mmu_psize].shift)
+ set_huge_psize(mmu_psize);
+ else
+ printk(KERN_WARNING "Invalid huge page size specified(%i)\n", size);
+
+ return 1;
+}
+__setup("hugepagesz=", hugepage_setup_sz);
+
static void zero_ctor(struct kmem_cache *cache, void *addr)
{
memset(addr, 0, kmem_cache_size(cache));include/asm-powerpc/mmu-hash64.h +0 -0
@@ -277,6 +277,7 @@ extern int hash_huge_page(struct mm_struct *mm, unsigned long access,
extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
unsigned long pstart, unsigned long mode, int psize, int ssize);
+extern void set_huge_psize(int psize);
extern void htab_initialize(void);
extern void htab_initialize_secondary(void);
mm/hugetlb.c +0 -0
@@ -422,6 +422,7 @@ static int __init hugetlb_init(void)
break;
}
max_huge_pages = free_huge_pages = nr_huge_pages = i;
+ printk(KERN_INFO "HugeTLB page size: %ld bytes\n", HPAGE_SIZE);
printk("Total HugeTLB memory allocated, %ld\n", free_huge_pages);
return 0;
}--
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>
Quoted 6 lines · Jon Tollefson
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
How hard would it be to add the 1MB page size that some CPUs support as well? On systems with small physical memory like the PS3, that sounds very useful to me.
Arnd <><
--
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>
On (28/11/07 08:26), Arnd Bergmann didst pronounce:
Quoted 8 lines · Jon Tollefson
Quoted 6 lines
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
Quoted 4 lines
How hard would it be to add the 1MB page size that some CPUs support as well? On systems with small physical memory like the PS3, that sounds very useful to me.
Does the PS3 support 1M pages in hardware? When I last looked, the magic ibm,segment-page-sizes file that described the supported pagesizes was missing from the device tree. In this situation, the default sizes become 4K and 16M because no other ones are advertised.
Signature · 9 lines
Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab -- 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>
Quoted 14 lines · Mel Gorman
On (28/11/07 08:26), Arnd Bergmann didst pronounce:
Quoted 8 lines · Jon Tollefson
Quoted 6 lines
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
Quoted 4 lines
How hard would it be to add the 1MB page size that some CPUs support as well? On systems with small physical memory like the PS3, that sounds very useful to me.
Quoted 4 lines
Does the PS3 support 1M pages in hardware? When I last looked, the magic ibm,segment-page-sizes file that described the supported pagesizes was missing from the device tree. In this situation, the default sizes become 4K and 16M because no other ones are advertised.
I think you can select the page size using a hypercall on the PS3. The CPU supports any two of (64k, 1M, 16M) simultaneously.
Arnd <><
--
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>
Quoted 15 lines · Arnd Bergmann
Quoted 14 lines · Mel Gorman
On (28/11/07 08:26), Arnd Bergmann didst pronounce:
Quoted 12 lines · Jon Tollefson
Quoted 6 lines
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
How hard would it be to add the 1MB page size that some CPUs support as well? On systems with small physical memory like the PS3, that sounds very useful to me.
Quoted 7 lines
Quoted 4 lines
Does the PS3 support 1M pages in hardware? When I last looked, the magic ibm,segment-page-sizes file that described the supported pagesizes was missing from the device tree. In this situation, the default sizes become 4K and 16M because no other ones are advertised.
I think you can select the page size using a hypercall on the PS3. The CPU supports any two of (64k, 1M, 16M) simultaneously.
The PS3's hypervisor allows you to create the lpar's virtual address space with two page sizes. I currently have this hard coded to 64K and 16M. Within the address space you create memory regions. I have the hot-plug memory mapped in as a single region that is hard coded as 16M pages.
The current HV implementation only allows you to create an htab of at maximum 1M, so that influences how you can configure page sizes.
Just as a note, since the amount of memory available to the Linux lpar is not a multiple of 16M, some of the available hot-plug memory is not mapped into the address space. For firmware 1.90, 8M is unused. I was thinking to create another region for that memory and put things like the storage bounce buffers in there. Maybe I'll use 1M pages for that memory.
-Geoff
--
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>
Quoted 26 lines · On Tue, 27 Nov 2007 23:03:10 -0600 Jon Tollefson wrote:
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
This patch requires the patch posted by Mel Gorman that adds
HUGETLB_PAGE_SIZE_VARIABLE; "[PATCH] Fix boot problem with iSeries lacking hugepage support" on 2007-11-15.Signed-off-by Jon Tollefson <[email protected]>---
Documentation/kernel-parameters.txt | 1 arch/powerpc/mm/hash_utils_64.c | 11 +-------- arch/powerpc/mm/hugetlbpage.c | 41 ++++++++++++++++++++++++++++++++++++ include/asm-powerpc/mmu-hash64.h | 1 mm/hugetlb.c | 1 5 files changed, 46 insertions(+), 9 deletions(-)Documentation/kernel-parameters.txt +0
-0
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 688
Quoted 4 lines
Documentation/kernel-parameters.txt +1
-0@@ -685,6 +685,7 @@ and is between 256 and 4096 characters. It is defined in the file See Documentation/isdn/README.HiSax. hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages. + hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.
Any chance of spelling it as "hugepagesize" so that it's a little less cryptic and more difficult to typo as "hugepages"? (i.e., less confusion between them)
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 690
Quoted 3 lines
Documentation/kernel-parameters.txt +0
-0i8042.direct [HW] Put keyboard port into non-translated mode i8042.dumbkbd [HW] Pretend that controller can only read data from
Thanks.
---
~Randy
--
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>
Quoted 30 lines · Randy Dunlap
Quoted 28 lines · On Tue, 27 Nov 2007 23:03:10 -0600 Jon Tollefson wrote:
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
This patch requires the patch posted by Mel Gorman that adds
HUGETLB_PAGE_SIZE_VARIABLE; "[PATCH] Fix boot problem with iSeries lacking hugepage support" on 2007-11-15.Signed-off-by Jon Tollefson <[email protected]>---
Documentation/kernel-parameters.txt | 1 arch/powerpc/mm/hash_utils_64.c | 11 +-------- arch/powerpc/mm/hugetlbpage.c | 41 ++++++++++++++++++++++++++++++++++++ include/asm-powerpc/mmu-hash64.h | 1 mm/hugetlb.c | 1 5 files changed, 46 insertions(+), 9 deletions(-)Documentation/kernel-parameters.txt +0
-0@@ -685,6 +685,7 @@ and is between 256 and 4096 characters. It is defined in the file See Documentation/isdn/README.HiSax.
Quoted 6 lines
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 688
Quoted 2 lines
Documentation/kernel-parameters.txt +1
-0hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages. + hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.Any chance of spelling it as "hugepagesize" so that it's a little less cryptic and more difficult to typo as "hugepages"? (i.e., less confusion between them)
It already exists as hugepagesz= for IA64. Changing it to hugepagesize would either make ppc be different than IA64, or require keeping both so as to make IA64 setups continue working as before?
Thanks,
Nish
--
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>
Quoted 37 lines · Nish Aravamudan
Quoted 30 lines · Randy Dunlap
Quoted 28 lines · On Tue, 27 Nov 2007 23:03:10 -0600 Jon Tollefson wrote:
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
This patch requires the patch posted by Mel Gorman that adds
HUGETLB_PAGE_SIZE_VARIABLE; "[PATCH] Fix boot problem with iSeries lacking hugepage support" on 2007-11-15.Signed-off-by Jon Tollefson <[email protected]>---
Documentation/kernel-parameters.txt | 1 arch/powerpc/mm/hash_utils_64.c | 11 +-------- arch/powerpc/mm/hugetlbpage.c | 41 ++++++++++++++++++++++++++++++++++++ include/asm-powerpc/mmu-hash64.h | 1 mm/hugetlb.c | 1 5 files changed, 46 insertions(+), 9 deletions(-)Documentation/kernel-parameters.txt +0
-0@@ -685,6 +685,7 @@ and is between 256 and 4096 characters. It is defined in the file See Documentation/isdn/README.HiSax.Quoted 5 lines
Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 688
Quoted 2 lines
Documentation/kernel-parameters.txt +1
-0hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages. + hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.Any chance of spelling it as "hugepagesize" so that it's a little less cryptic and more difficult to typo as "hugepages"? (i.e., less confusion between them)
Quoted 3 lines
It already exists as hugepagesz= for IA64. Changing it to hugepagesize would either make ppc be different than IA64, or require keeping both so as to make IA64 setups continue working as before?
Oh, but it wasn't in Doc/kernel-parameters.txt ? :(
OK, just leave it as is, I think.
Thanks,
Signature · 7 lines
~Randy -- 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>
Quoted 38 lines · Randy Dunlap
Quoted 37 lines · Nish Aravamudan
Quoted 35 lines · Randy Dunlap
Quoted 26 lines · On Tue, 27 Nov 2007 23:03:10 -0600 Jon Tollefson wrote:
This patch adds the hugepagesz boot-time parameter for ppc64 that lets you pick the size for your huge pages. The choices available are 64K and 16M. It defaults to 16M (previously the only choice) if nothing or an invalid choice is specified. Tested 64K huge pages with the libhugetlbfs 1.2 release with its 'make func' and 'make stress' test invocations.
This patch requires the patch posted by Mel Gorman that adds
HUGETLB_PAGE_SIZE_VARIABLE; "[PATCH] Fix boot problem with iSeries lacking hugepage support" on 2007-11-15.Signed-off-by Jon Tollefson <[email protected]>---
Documentation/kernel-parameters.txt | 1 arch/powerpc/mm/hash_utils_64.c | 11 +-------- arch/powerpc/mm/hugetlbpage.c | 41 ++++++++++++++++++++++++++++++++++++ include/asm-powerpc/mmu-hash64.h | 1 mm/hugetlb.c | 1 5 files changed, 46 insertions(+), 9 deletions(-)Documentation/kernel-parameters.txt +0
-0Documentation/kernel-parameters.txt and is between 256 and 4096 characters. It is defined in the file · line 688
Quoted 4 lines
Documentation/kernel-parameters.txt +1
-0@@ -685,6 +685,7 @@ and is between 256 and 4096 characters. It is defined in the file See Documentation/isdn/README.HiSax. hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages. + hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.Any chance of spelling it as "hugepagesize" so that it's a little less cryptic and more difficult to typo as "hugepages"? (i.e., less confusion between them)
Quoted 5 lines
Quoted 3 lines
It already exists as hugepagesz= for IA64. Changing it to hugepagesize would either make ppc be different than IA64, or require keeping both so as to make IA64 setups continue working as before?
Oh, but it wasn't in
Doc/kernel-parameters.txt? :(
Nope :( I wonder how many other kernel parameters are in the same boat? Where's an RPJDay-script when you need it?
Quoted 1 line
OK, just leave it as is, I think.
Yeah, I guess that's probably easiest...unfortunately.
-Nish
--
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>