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.
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 the extra overhead that this option imposes. Many NUMA configurations will have this as the only option. If unsure, choose "Flat Memory" over this option.
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.
SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise pfn_to_page and page_to_pfn operations. This is the most efficient option when sufficient kernel resources are available.
Allows the migration of the physical location of pages of processes while the virtual addresses are not changed. This is useful for example on NUMA systems to put pages nearer to the processors accessing the page.
Enable Kernel Samepage Merging: KSM periodically scans those areas of an application's address space that an app has advised may be mergeable. When it finds pages of identical content, it replaces the many instances by a single resident page with that content, so saving memory until one or another app needs to modify the content. Recommended for use with KVM, or with other duplicative applications. See Documentation/vm/ksm.txt for more information: KSM is inactive until a program has madvised that an area is MADV_MERGEABLE, and root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
This is the portion of low virtual memory which should be protected from userspace allocation. Keeping a user from writing to low pages can help reduce the impact of kernel NULL pointer bugs. For most ia64, ppc64 and x86 users with lots of address space a value of 65536 is reasonable and should cause no problems. On arm and other archs it should not be higher than 32768. Programs which use vm86 functionality or have some need to map this low address space will need CAP_SYS_RAWIO or disable this protection by setting the value to 0. This value can be changed after boot using the /proc/sys/vm/mmap_min_addr tunable.
Enables code to recover from some memory failures on systems with MCA recovery. This allows a system to continue running even when some of its memory has uncorrected errors. This requires special hardware support and typically ECC memory.
The NOMMU mmap() frequently needs to allocate large contiguous chunks of memory on which to store mappings, but it can only ask the system allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently more than it requires. To deal with this, mmap() is able to trim off the excess and return it to the allocator. If trimming is enabled, the excess is trimmed off and returned to the system allocator, which can cause extra fragmentation, particularly if there are a lot of transient processes. If trimming is disabled, the excess is kept, but not used, which for long-term mappings means that the space is wasted. Trimming can be dynamically controlled through a sysctl option (/proc/sys/vm/nr_trim_pages) which specifies the minimum number of excess pages there must be before trimming should occur, or zero if no trimming is to occur. This option specifies the initial value of this option. The default of 1 says that all excess pages should be trimmed. See Documentation/nommu-mmap.txt for more information.