Skip to contentSkip to conversation

Configurable NUMA node memory size

Linux-ia64 Erich Focht 1 participant 1 message Dec 9, 2002

lore
Share & tools
lore
#0 lore raw

Hi,

following the requests from Xavier and Jesse I introduced a configuration parameter for the maximum memory per NUMA node. The DIG_BANKSHIFT is set accordingly, the current choices are:

         512MB/bank:  16GB/node,
        2048MB/bank:  64GB/node,
        8192MB/bank: 256GB/node.

The patch is for 2.5.50+ia64. Please consider applying it.

Thanks,
Erich

arch/ia64/Kconfig +17 -0
diff -urNp linux-2.5.50-ia64/arch/ia64/Kconfig linux-2.5.50-ia64-digshift/arch/ia64/Kconfig
@@ -220,6 +220,23 @@ config NUMA
 	  Access).  This option is for configuring high-end multiprocessor
 	  server systems.  If in doubt, say N.
 
+choice
+	prompt "Maximum Memory per NUMA Node" if NUMA && IA64_DIG
+	depends on NUMA && IA64_DIG
+	default IA64_NODESIZE_16GB
+
+config IA64_NODESIZE_16GB
+	bool "16GB"
+
+config IA64_NODESIZE_64GB
+	bool "64GB"
+
+config IA64_NODESIZE_256GB
+	bool "256GB"
+
+endchoice
+
+
 config VIRTUAL_MEM_MAP
 	bool "Enable Virtual Mem Map" if IA64_GENERIC || IA64_DIG
 	depends on !NUMA
include/asm-ia64/mmzone.h +13 -3
diff -urNp linux-2.5.50-ia64/include/asm-ia64/mmzone.h linux-2.5.50-ia64-digshift/include/asm-ia64/mmzone.h
@@ -104,12 +104,22 @@ extern unsigned long max_low_pfn;
 
 /*
  * Bank definitions.
- * Current settings for DIG: 512MB/bank, 16GB/node.
+ * Configurable settings for DIG: 512MB/bank:  16GB/node,
+ *                               2048MB/bank:  64GB/node,
+ *                               8192MB/bank: 256GB/node.
  */
 #define NR_BANKS_PER_NODE	32
-#define BANK_OFFSET(addr)	((unsigned long)(addr) & (BANKSIZE-1))
-#define DIG_BANKSHIFT		29
+#if defined(CONFIG_IA64_NODESIZE_16GB)
+# define DIG_BANKSHIFT		29
+#elif defined(CONFIG_IA64_NODESIZE_64GB)
+# define DIG_BANKSHIFT		31
+#elif defined(CONFIG_IA64_NODESIZE_256GB)
+# define DIG_BANKSHIFT		33
+#else
+# error Unsupported bank and nodesize!
+#endif
 #define BANKSIZE		(1UL << DIG_BANKSHIFT)
+#define BANK_OFFSET(addr)	((unsigned long)(addr) & (BANKSIZE-1))
 #define NR_BANKS		(NR_BANKS_PER_NODE * NR_NODES)
 
 /*