How to configure the Linux kernel/mm

Howto configure the Linux kernel / mm

_bool y
 * Option: SELECT_MEMORY_MODEL
 * Kernel Versions: 2.6.15.6 ...
 * depends on EXPERIMENTAL || ARCH_SELECT_MEMORY_MODEL

"Memory model"
 * depends on SELECT_MEMORY_MODEL
 * default DISCONTIGMEM_MANUAL if ARCH_DISCONTIGMEM_DEFAULT
 * default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
 * default FLATMEM_MANUAL


 * Option: FLATMEM_MANUAL
 * Kernel Versions: 2.6.15.6 ...
 * (on/off) Flat Memory
 * depends on !ARCH_DISCONTIGMEM_ENABLE || ARCH_FLATMEM_ENABLE
 * This option allows you to change some of the ways that Linux manages its memory internally. Most users will only have one option here: FLATMEM.  This is normal and a correct option.
 * Some users of more advanced features like NUMA and memory hotplug may have different options here. DISCONTIGMEM is an more mature, better tested system, but is incompatible with memory hotplug and may suffer decreased performance over SPARSEMEM. If unsure between Sparse Memory and Discontiguous Memory, choose Discontiguous Memory.
 * If unsure, choose this option (Flat Memory) over any other.


 * Option: DISCONTIGMEM_MANUAL
 * Kernel Versions: 2.6.15.6 ...
 * (on/off) Discontiguous Memory
 * depends on ARCH_DISCONTIGMEM_ENABLE
 * This option provides enhanced support for discontiguous memory systems, over FLATMEM. These systems have holes in their physical address spaces, and this option provides more efficient handling of these holes.  However, the vast majority of hardware has quite flat address spaces, and can have degraded performance from extra overhead that this option imposes.
 * Many NUMA configurations will have this as the only option.
 * If unsure, choose "Flat Memory" over this option.


 * Option: SPARSEMEM_MANUAL
 * Kernel Versions: 2.6.15.6 ...
 * (on/off) Sparse Memory
 * depends on ARCH_SPARSEMEM_ENABLE
 * This will be the only option for some systems, including memory hotplug systems. This is normal.
 * For many other systems, this will be an alternative to Discontiguous Memory. This option provides some potential performance benefits, along with decreased code complexity, but it is newer, and more experimental.
 * If unsure, choose "Discontiguous Memory" or "Flat Memory" over this option.

_bool y
 * Option: DISCONTIGMEM
 * Kernel Versions: 2.6.15.6 ...
 * depends on (!SELECT_MEMORY_MODEL && ARCH_DISCONTIGMEM_ENABLE) || DISCONTIGMEM_MANUAL

_bool y
 * Option: SPARSEMEM
 * Kernel Versions: 2.6.15.6 ...
 * depends on SPARSEMEM_MANUAL

_bool y
 * Option: FLATMEM
 * Kernel Versions: 2.6.15.6 ...
 * depends on (!DISCONTIGMEM && !SPARSEMEM) || FLATMEM_MANUAL

_bool y
 * Option: FLAT_NODE_MEM_MAP
 * Kernel Versions: 2.6.15.6 ...
 * depends on !SPARSEMEM


 * Both the NUMA code and DISCONTIGMEM use arrays of pg_data_t's
 * to represent different areas of memory. This variable allows
 * those dependencies to exist individually.
 * those dependencies to exist individually.

_bool y
 * Option: NEED_MULTIPLE_NODES
 * Kernel Versions: 2.6.15.6 ...
 * depends on DISCONTIGMEM || NUMA

_bool y
 * Option: HAVE_MEMORY_PRESENT
 * Kernel Versions: 2.6.15.6 ...
 * depends on ARCH_HAVE_MEMORY_PRESENT || SPARSEMEM


 * SPARSEMEM_EXTREME (which is the default) does some bootmem
 * allocations when memory_present is called. If this can not
 * be done on your architecture, select this option. However,
 * statically allocating the mem_section[] array can potentially
 * consume vast quantities of .bss, so be careful.
 * This option will also potentially produce smaller runtime code
 * with gcc 3.4 and later.
 * This option will also potentially produce smaller runtime code
 * with gcc 3.4 and later.

_bool n
 * Option: SPARSEMEM_STATIC
 * Kernel Versions: 2.6.15.6 ...


 * Architectecture platforms which require a two level mem_section in SPARSEMEM
 * must select this option. This is usually for architecture platforms with
 * an extremely sparse physical address space.
 * an extremely sparse physical address space.

_bool y
 * Option: SPARSEMEM_EXTREME
 * Kernel Versions: 2.6.15.6 ...
 * depends on SPARSEMEM && !SPARSEMEM_STATIC


 * eventually, we can have this option just 'select SPARSEMEM'


 * Option: MEMORY_HOTPLUG
 * Kernel Versions: 2.6.15.6 ...
 * (on/off) Allow for memory hot-add
 * depends on SPARSEMEM && HOTPLUG && !SOFTWARE_SUSPEND

"Memory hotplug is currently incompatible with Software Suspend"
 * depends on SPARSEMEM && HOTPLUG && SOFTWARE_SUSPEND


 * Heavily threaded applications may benefit from splitting the mm-wide
 * page_table_lock, so that faults on different parts of the user address
 * space can be handled with less contention: split it at this NR_CPUS.
 * Default to 4 for wider testing, though 8 might be more appropriate.
 * ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
 * PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.


 * Option: SPLIT_PTLOCK_CPUS
 * Kernel Versions: 2.6.15.6 ...


 * default "4096" if ARM && !CPU_CACHE_VIPT
 * default "4096" if PARISC && !PA20
 * default "4"

Linux Kernel Configuration