init/Kconfig v3.0-rc7


Menu: General setup

EXPERIMENTAL

Prompt for development and/or incomplete code/drivers

Some of the various things that Linux supports (such as network
drivers, file systems, network protocols, etc.) can be in a state
of development where the functionality, stability, or the level of
testing is not yet high enough for general use. This is usually
known as the "alpha-test" phase among developers. If a feature is
currently in alpha-test, then the developers usually discourage
uninformed widespread use of this feature by the general public to
avoid "Why doesn't this work?" type mail messages. However, active
testing and use of these systems is welcomed. Just be aware that it
may not meet the normal level of reliability or it may fail to work
in some special cases. Detailed bug reports from people familiar
with the kernel internals are usually welcomed by the developers
(before submitting bug reports, please read the documents
<file:README>, <file:MAINTAINERS>, <file:REPORTING-BUGS>,
<file:Documentation/BUG-HUNTING>, and
<file:Documentation/oops-tracing.txt> in the kernel source).

This option will also make obsoleted drivers available. These are
drivers that have been replaced by something else, and/or are
scheduled to be removed in a future kernel release.

Unless you intend to help test and develop a feature or driver that
falls into this category, or you have a situation that requires
using these features, you should probably say N here, which will
cause the configurator to present you with fewer choices. If
you say Y here, you will be offered the choice of using features or
drivers that are currently considered to be in the alpha-test phase.

INIT_ENV_ARG_LIMIT

Maximum of each of the number of arguments and environment
variables passed to init from the kernel command line.


CROSS_COMPILE

Cross-compiler tool prefix

Same as running 'make CROSS_COMPILE=prefix-' but stored for
default make runs in this kernel build directory.  You don't
need to set this unless you want the configured kernel build
directory to select the cross-compiler automatically.

LOCALVERSION

Local version - append to kernel release

Append an extra string to the end of your kernel version.
This will show up when you type uname, for example.
The string you set here will be appended after the contents of
any files with a filename matching localversion* in your
object and source tree, in that order.  Your total string can
be a maximum of 64 characters.

LOCALVERSION_AUTO

Automatically append version information to the version string

This will try to automatically determine if the current tree is a
release tree by looking for git tags that belong to the current
top of tree revision.

A string of the format -gxxxxxxxx will be added to the localversion
if a git-based tree is found.  The string generated by this will be
appended after any matching localversion* files, and after the value
set in CONFIG_LOCALVERSION.

(The actual string used here is the first eight characters produced
by running the command:

$ git rev-parse --verify HEAD

which is done within the script "scripts/setlocalversion".)

HAVE_KERNEL_LZO

Kernel compression mode

The linux kernel is a kind of self-extracting executable.
Several compression algorithms are available, which differ
in efficiency, compression and decompression speed.
Compression speed is only relevant when building a kernel.
Decompression speed is relevant at each boot.

If you have any problems with bzip2 or lzma compressed
kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older
version of this functionality (bzip2 only), for 2.4, was
supplied by Christian Ludwig)

High compression options are mostly useful for users, who
are low on disk space (embedded systems), but for whom ram
size matters less.

If in doubt, select 'gzip'

KERNEL_GZIP

Gzip

The old and tried gzip compression. It provides a good balance
between compression ratio and decompression speed.

KERNEL_BZIP2

Bzip2

Its compression ratio and speed is intermediate.
Decompression speed is slowest among the three.  The kernel
size is about 10% smaller with bzip2, in comparison to gzip.
Bzip2 uses a large amount of memory. For modern kernels you
will need at least 8MB RAM or more for booting.

KERNEL_LZMA

LZMA

The most recent compression algorithm.
Its ratio is best, decompression speed is between the other
two. Compression is slowest.  The kernel size is about 33%
smaller with LZMA in comparison to gzip.

KERNEL_XZ

XZ

XZ uses the LZMA2 algorithm and instruction set specific
BCJ filters which can improve compression ratio of executable
code. The size of the kernel is about 30% smaller with XZ in
comparison to gzip. On architectures for which there is a BCJ
filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ
will create a few percent smaller kernel than plain LZMA.

The speed is about the same as with LZMA: The decompression
speed of XZ is better than that of bzip2 but worse than gzip
and LZO. Compression is slow.

KERNEL_LZO

LZO

Its compression ratio is the poorest among the 4. The kernel
size is about 10% bigger than gzip; however its speed
(both compression and decompression) is the fastest.

DEFAULT_HOSTNAME

Default hostname

This option determines the default system hostname before userspace
calls sethostname(2). The kernel traditionally uses "(none)" here,
but you may wish to use a different default here to make a minimal
system more usable with less configuration.

SWAP

Support for paging of anonymous memory (swap)

This option allows you to choose whether you want to have support
for so called swap devices or swap files in your kernel that are
used to provide more virtual memory than the actual RAM present
in your computer.  If unsure say Y.

SYSVIPC

System V IPC

Inter Process Communication is a suite of library functions and
system calls which let processes (running programs) synchronize and
exchange information. It is generally considered to be a good thing,
and some programs won't run unless you say Y here. In particular, if
you want to run the DOS emulator dosemu under Linux (read the
DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>),
you'll need to say Y here.

You can find documentation about IPC with "info ipc" and also in
section 6.4 of the Linux Programmer's Guide, available from
<http://www.tldp.org/guides.html>.

POSIX_MQUEUE

POSIX Message Queues

POSIX variant of message queues is a part of IPC. In POSIX message
queues every message has a priority which decides about succession
of receiving it by a process. If you want to compile and run
programs written e.g. for Solaris with use of its POSIX message
queues (functions mq_*) say Y here.

POSIX message queues are visible as a filesystem called 'mqueue'
and can be mounted somewhere if you want to do filesystem
operations on message queues.

If unsure, say Y.

BSD_PROCESS_ACCT

BSD Process Accounting

If you say Y here, a user level program will be able to instruct the
kernel (via a special system call) to write process accounting
information to a file: whenever a process exits, information about
that process will be appended to the file by the kernel.  The
information includes things such as creation time, owning user,
command name, memory usage, controlling terminal etc. (the complete
list is in the struct acct in <file:include/linux/acct.h>).  It is
up to the user level program to do useful things with this
information.  This is generally a good idea, so say Y.

BSD_PROCESS_ACCT_V3

BSD Process Accounting version 3 file format

If you say Y here, the process accounting information is written
in a new file format that also logs the process IDs of each
process and it's parent. Note that this file format is incompatible
with previous v0/v1/v2 file formats, so you will need updated tools
for processing it. A preliminary version of these tools is available
at <http://www.gnu.org/software/acct/>.

FHANDLE

open by fhandle syscalls

If you say Y here, a user level program will be able to map
file names to handle and then later use the handle for
different file system operations. This is useful in implementing
userspace file servers, which now track files using handles instead
of names. The handle would remain the same even if file names
get renamed. Enables open_by_handle_at(2) and name_to_handle_at(2)
syscalls.

TASKSTATS

Export task/process statistics through netlink (EXPERIMENTAL)

Export selected statistics for tasks/processes through the
generic netlink interface. Unlike BSD process accounting, the
statistics are available during the lifetime of tasks/processes as
responses to commands. Like BSD accounting, they are sent to user
space on task exit.

Say N if unsure.

TASK_DELAY_ACCT

Enable per-task delay accounting (EXPERIMENTAL)

Collect information on time spent by a task waiting for system
resources like cpu, synchronous block I/O completion and swapping
in pages. Such statistics can help in setting a task's priorities
relative to other tasks for cpu, io, rss limits etc.

Say N if unsure.

TASK_XACCT

Enable extended accounting over taskstats (EXPERIMENTAL)

Collect extended task accounting data and send the data
to userland for processing over the taskstats interface.

Say N if unsure.

TASK_IO_ACCOUNTING

Enable per-task storage I/O accounting (EXPERIMENTAL)

Collect information on the number of bytes of storage I/O which this
task has caused.

Say N if unsure.

AUDIT

Auditing support

Enable auditing infrastructure that can be used with another
kernel subsystem, such as SELinux (which requires this for
logging of avc messages output).  Does not do system-call
auditing without CONFIG_AUDITSYSCALL.

AUDITSYSCALL

Enable system-call auditing support

Enable low-overhead system-call auditing infrastructure that
can be used independently or with another kernel subsystem,
such as SELinux.

kernel/irq/Kconfig


Menu: RCU Subsystem

TREE_RCU

Tree-based hierarchical RCU

This option selects the RCU implementation that is
designed for very large SMP system with hundreds or
thousands of CPUs.  It also scales down nicely to
smaller systems.

TREE_PREEMPT_RCU

Preemptible tree-based hierarchical RCU

This option selects the RCU implementation that is
designed for very large SMP systems with hundreds or
thousands of CPUs, but for which real-time response
is also required.  It also scales down nicely to
smaller systems.

TINY_RCU

UP-only small-memory-footprint RCU

This option selects the RCU implementation that is
designed for UP systems from which real-time response
is not required.  This option greatly reduces the
memory footprint of RCU.

TINY_PREEMPT_RCU

Preemptible UP-only small-memory-footprint RCU

This option selects the RCU implementation that is designed
for real-time UP systems.  This option greatly reduces the
memory footprint of RCU.

PREEMPT_RCU

This option enables preemptible-RCU code that is common between
the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations.

RCU_TRACE

Enable tracing for RCU

This option provides tracing in RCU which presents stats
in debugfs for debugging RCU implementation.

Say Y here if you want to enable RCU tracing
Say N if you are unsure.

RCU_FANOUT

Tree-based hierarchical RCU fanout value

This option controls the fanout of hierarchical implementations
of RCU, allowing RCU to work efficiently on machines with
large numbers of CPUs.  This value must be at least the fourth
root of NR_CPUS, which allows NR_CPUS to be insanely large.
The default value of RCU_FANOUT should be used for production
systems, but if you are stress-testing the RCU implementation
itself, small RCU_FANOUT values allow you to test large-system
code paths on small(er) systems.

Select a specific number if testing RCU itself.
Take the default if unsure.

RCU_FANOUT_EXACT

Disable tree-based hierarchical RCU auto-balancing

This option forces use of the exact RCU_FANOUT value specified,
regardless of imbalances in the hierarchy.  This is useful for
testing RCU itself, and might one day be useful on systems with
strong NUMA behavior.

Without RCU_FANOUT_EXACT, the code will balance the hierarchy.

Say N if unsure.

RCU_FAST_NO_HZ

Accelerate last non-dyntick-idle CPU's grace periods

This option causes RCU to attempt to accelerate grace periods
in order to allow the final CPU to enter dynticks-idle state
more quickly.  On the other hand, this option increases the
overhead of the dynticks-idle checking, particularly on systems
with large numbers of CPUs.

Say Y if energy efficiency is critically important, particularly
if you have relatively few CPUs.

Say N if you are unsure.

TREE_RCU_TRACE

This option provides tracing for the TREE_RCU and
TREE_PREEMPT_RCU implementations, permitting Makefile to
trivially select kernel/rcutree_trace.c.

RCU_BOOST

Enable RCU priority boosting

This option boosts the priority of preempted RCU readers that
block the current preemptible RCU grace period for too long.
This option also prevents heavy loads from blocking RCU
callback invocation for all flavors of RCU.

Say Y here if you are working with real-time apps or heavy loads
Say N here if you are unsure.

RCU_BOOST_PRIO

Real-time priority to boost RCU readers to

This option specifies the real-time priority to which preempted
RCU readers are to be boosted.  If you are working with CPU-bound
real-time applications, you should specify a priority higher then
the highest-priority CPU-bound application.

Specify the real-time priority, or take the default if unsure.

RCU_BOOST_DELAY

Milliseconds to delay boosting after RCU grace-period start

This option specifies the time to wait after the beginning of
a given grace period before priority-boosting preempted RCU
readers blocking that grace period.  Note that any RCU reader
blocking an expedited RCU grace period is boosted immediately.

Accept the default if unsure.


IKCONFIG

Kernel .config support

This option enables the complete Linux kernel ".config" file
contents to be saved in the kernel. It provides documentation
of which kernel options are used in a running kernel or in an
on-disk kernel.  This information can be extracted from the kernel
image file with the script scripts/extract-ikconfig and used as
input to rebuild the current kernel or to build another kernel.
It can also be extracted from a running kernel by reading
/proc/config.gz if enabled (below).

IKCONFIG_PROC

Enable access to .config through /proc/config.gz

This option enables access to the kernel configuration file
through /proc/config.gz.

LOG_BUF_SHIFT

Kernel log buffer size (16 => 64KB, 17 => 128KB)

Select kernel log buffer size as a power of 2.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 =>  8 KB
12 =>  4 KB

CGROUPS

Control Group support

This option adds support for grouping sets of processes together, for
use with process control subsystems such as Cpusets, CFS, memory
controls or device isolation.
See
- Documentation/scheduler/sched-design-CFS.txt  (CFS)
- Documentation/cgroups/ (features for grouping, isolation
and resource control)

Say N if unsure.

CGROUP_DEBUG

Example debug cgroup subsystem

This option enables a simple cgroup subsystem that
exports useful debugging information about the cgroups
framework.

Say N if unsure.

CGROUP_FREEZER

Freezer cgroup subsystem

Provides a way to freeze and unfreeze all tasks in a
cgroup.

CGROUP_DEVICE

Device controller for cgroups

Provides a cgroup implementing whitelists for devices which
a process in the cgroup can mknod or open.

CPUSETS

Cpuset support

This option will let you create and manage CPUSETs which
allow dynamically partitioning a system into sets of CPUs and
Memory Nodes and assigning tasks to run only within those sets.
This is primarily useful on large SMP or NUMA systems.

Say N if unsure.

CGROUP_CPUACCT

Simple CPU accounting cgroup subsystem

Provides a simple Resource Controller for monitoring the
total CPU consumed by the tasks in a cgroup.

RESOURCE_COUNTERS

Resource counters

This option enables controller independent resource accounting
infrastructure that works with cgroups.

CGROUP_MEM_RES_CTLR

Memory Resource Controller for Control Groups

Provides a memory resource controller that manages both anonymous
memory and page cache. (See Documentation/cgroups/memory.txt)

Note that setting this option increases fixed memory overhead
associated with each page of memory in the system. By this,
20(40)bytes/PAGE_SIZE on 32(64)bit system will be occupied by memory
usage tracking struct at boot. Total amount of this is printed out
at boot.

Only enable when you're ok with these trade offs and really
sure you need the memory resource controller. Even when you enable
this, you can set "cgroup_disable=memory" at your boot option to
disable memory resource controller and you can avoid overheads.
(and lose benefits of memory resource controller)

This config option also selects MM_OWNER config option, which
could in turn add some fork/exit overhead.

CGROUP_MEM_RES_CTLR_SWAP

Memory Resource Controller Swap Extension

Add swap management feature to memory resource controller. When you
enable this, you can limit mem+swap usage per cgroup. In other words,
when you disable this, memory resource controller has no cares to
usage of swap...a process can exhaust all of the swap. This extension
is useful when you want to avoid exhaustion swap but this itself
adds more overheads and consumes memory for remembering information.
Especially if you use 32bit system or small memory system, please
be careful about enabling this. When memory resource controller
is disabled by boot option, this will be automatically disabled and
there will be no overhead from this. Even when you set this config=y,
if boot option "noswapaccount" is set, swap will not be accounted.
Now, memory usage of swap_cgroup is 2 bytes per entry. If swap page
size is 4096bytes, 512k per 1Gbytes of swap.

CGROUP_MEM_RES_CTLR_SWAP_ENABLED

Memory Resource Controller Swap Extension enabled by default

Memory Resource Controller Swap Extension comes with its price in
a bigger memory consumption. General purpose distribution kernels
which want to enable the feature but keep it disabled by default
and let the user enable it by swapaccount boot command line
parameter should have this option unselected.
For those who want to have the feature enabled by default should
select this option (if, for some reason, they need to disable it
then noswapaccount does the trick).

CGROUP_PERF

Enable perf_event per-cpu per-container group (cgroup) monitoring

This option extends the per-cpu mode to restrict monitoring to
threads which belong to the cgroup specified and run on the
designated cpu.

Say N if unsure.

CGROUP_SCHED

Group CPU scheduler

This feature lets CPU scheduler recognize task groups and control CPU
bandwidth allocation to such task groups. It uses cgroups to group
tasks.

RT_GROUP_SCHED

Group scheduling for SCHED_RR/FIFO

This feature lets you explicitly allocate real CPU bandwidth
to task groups. If enabled, it will also make it impossible to
schedule realtime tasks for non-root users until you allocate
realtime bandwidth for them.
See Documentation/scheduler/sched-rt-group.txt for more information.

BLK_CGROUP

Block IO controller

Generic block IO controller cgroup interface. This is the common
cgroup interface which should be used by various IO controlling
policies.

Currently, CFQ IO scheduler uses it to recognize task groups and
control disk bandwidth allocation (proportional time slice allocation)
to such task groups. It is also used by bio throttling logic in
block layer to implement upper limit in IO rates on a device.

This option only enables generic Block IO controller infrastructure.
One needs to also enable actual IO controlling logic/policy. For
enabling proportional weight division of disk bandwidth in CFQ, set
CONFIG_CFQ_GROUP_IOSCHED=y; for enabling throttling policy, set
CONFIG_BLK_DEV_THROTTLING=y.

See Documentation/cgroups/blkio-controller.txt for more information.

DEBUG_BLK_CGROUP

Enable Block IO controller debugging

Enable some debugging help. Currently it exports additional stat
files in a cgroup which can be useful for debugging.

NAMESPACES

Namespaces support

Provides the way to make tasks work with different objects using
the same id. For example same IPC id may refer to different objects
or same user id or pid may refer to different tasks when used in
different namespaces.

UTS_NS

UTS namespace

In this namespace tasks see different info provided with the
uname() system call

IPC_NS

IPC namespace

In this namespace tasks work with IPC ids which correspond to
different IPC objects in different namespaces.

USER_NS

User namespace (EXPERIMENTAL)

This allows containers, i.e. vservers, to use user namespaces
to provide different user info for different servers.
If unsure, say N.

PID_NS

PID Namespaces

Support process id namespaces.  This allows having multiple
processes with the same pid as long as they are in different
pid namespaces.  This is a building block of containers.

NET_NS

Network namespace

Allow user space to create what appear to be multiple instances
of the network stack.

SCHED_AUTOGROUP

Automatic process group scheduling

This option optimizes the scheduler for common desktop workloads by
automatically creating and populating task groups.  This separation
of workloads isolates aggressive CPU burners (like build jobs) from
desktop applications.  Task group autogeneration is currently based
upon task session.

SYSFS_DEPRECATED

Enable deprecated sysfs features to support old userspace tools

This option adds code that switches the layout of the "block" class
devices, to not show up in /sys/class/block/, but only in
/sys/block/.

This switch is only active when the sysfs.deprecated=1 boot option is
passed or the SYSFS_DEPRECATED_V2 option is set.

This option allows new kernels to run on old distributions and tools,
which might get confused by /sys/class/block/. Since 2007/2008 all
major distributions and tools handle this just fine.

Recent distributions and userspace tools after 2009/2010 depend on
the existence of /sys/class/block/, and will not work with this
option enabled.

Only if you are using a new kernel on an old distribution, you might
need to say Y here.

SYSFS_DEPRECATED_V2

Enable deprecated sysfs features by default

Enable deprecated sysfs by default.

See the CONFIG_SYSFS_DEPRECATED option for more details about this
option.

Only if you are using a new kernel on an old distribution, you might
need to say Y here. Even then, odds are you would not need it
enabled, you can always pass the boot option if absolutely necessary.

RELAY

Kernel->user space relay support (formerly relayfs)

This option enables support for relay interface support in
certain file systems (such as debugfs).
It is designed to provide an efficient mechanism for tools and
facilities to relay large amounts of data from kernel space to
user space.

If unsure, say N.

BLK_DEV_INITRD

Initial RAM filesystem and RAM disk (initramfs/initrd) support

The initial RAM filesystem is a ramfs which is loaded by the
boot loader (loadlin or lilo) and that is mounted as root
before the normal boot procedure. It is typically used to
load modules needed to mount the "real" root file system,
etc. See <file:Documentation/initrd.txt> for details.

If RAM disk support (BLK_DEV_RAM) is also included, this
also enables initial RAM disk (initrd) support and adds
15 Kbytes (more on some other architectures) to the kernel size.

If unsure say Y.

usr/Kconfig

CC_OPTIMIZE_FOR_SIZE

Optimize for size

Enabling this option will pass "-Os" instead of "-O2" to gcc
resulting in a smaller kernel.

If unsure, say Y.

EXPERT

Configure standard kernel features (expert users)

This option allows certain base kernel options and settings
to be disabled or tweaked. This is for specialized
environments which can tolerate a "non-standard" kernel.
Only use this if you really know what you are doing.

UID16

Enable 16-bit UID system calls

This enables the legacy 16-bit UID syscall wrappers.

SYSCTL_SYSCALL

Sysctl syscall support

sys_sysctl uses binary paths that have been found challenging
to properly maintain and use.  The interface in /proc/sys
using paths with ascii names is now the primary path to this
information.

Almost nothing using the binary sysctl interface so if you are
trying to save some space it is probably safe to disable this,
making your kernel marginally smaller.

If unsure say Y here.

KALLSYMS

Load all symbols for debugging/ksymoops

Say Y here to let the kernel print out symbolic crash information and
symbolic stack backtraces. This increases the size of the kernel
somewhat, as all symbols have to be loaded into the kernel image.

KALLSYMS_ALL

Include all symbols in kallsyms

Normally kallsyms only contains the symbols of functions for nicer
OOPS messages and backtraces (i.e., symbols from the text and inittext
sections). This is sufficient for most cases. And only in very rare
cases (e.g., when a debugger is used) all symbols are required (e.g.,
names of variables from the data sections, etc).

This option makes sure that all symbols are loaded into the kernel
image (i.e., symbols from all sections) in cost of increased kernel
size (depending on the kernel configuration, it may be 300KiB or
something like this).

Say N unless you really need all symbols.

HOTPLUG

Support for hot-pluggable devices

This option is provided for the case where no hotplug or uevent
capabilities is wanted by the kernel.  You should only consider
disabling this option for embedded systems that do not use modules, a
dynamic /dev tree, or dynamic device discovery.  Just say Y.

PRINTK

Enable support for printk

This option enables normal printk support. Removing it
eliminates most of the message strings from the kernel image
and makes the kernel more or less silent. As this makes it
very difficult to diagnose system problems, saying N here is
strongly discouraged.

BUG

BUG() support

Disabling this option eliminates support for BUG and WARN, reducing
the size of your kernel image and potentially quietly ignoring
numerous fatal conditions. You should only consider disabling this
option for embedded systems with no facilities for reporting errors.
Just say Y.

ELF_CORE

Enable ELF core dumps

Enable support for generating core dumps. Disabling saves about 4k.

PCSPKR_PLATFORM

Enable PC-Speaker support

This option allows to disable the internal PC-Speaker
support, saving some memory.

BASE_FULL

Enable full-sized data structures for core

Disabling this option reduces the size of miscellaneous core
kernel data structures. This saves memory on small machines,
but may reduce performance.

FUTEX

Enable futex support

Disabling this option will cause the kernel to be built without
support for "fast userspace mutexes".  The resulting kernel may not
run glibc-based applications correctly.

EPOLL

Enable eventpoll support

Disabling this option will cause the kernel to be built without
support for epoll family of system calls.

SIGNALFD

Enable signalfd() system call

Enable the signalfd() system call that allows to receive signals
on a file descriptor.

If unsure, say Y.

TIMERFD

Enable timerfd() system call

Enable the timerfd() system call that allows to receive timer
events on a file descriptor.

If unsure, say Y.

EVENTFD

Enable eventfd() system call

Enable the eventfd() system call that allows to receive both
kernel notification (ie. KAIO) or userspace notifications.

If unsure, say Y.

SHMEM

Use full shmem filesystem

The shmem is an internal filesystem used to manage shared memory.
It is backed by swap and manages resource limits. It is also exported
to userspace as tmpfs if TMPFS is enabled. Disabling this
option replaces shmem and tmpfs with the much simpler ramfs code,
which may be appropriate on small systems without swap.

AIO

Enable AIO support

This option enables POSIX asynchronous I/O which may by used
by some high performance threaded applications. Disabling
this option saves about 7k.

EMBEDDED

Embedded system

This option should be enabled if compiling the kernel for
an embedded system so certain expert options are available
for configuration.

HAVE_PERF_EVENTS

See tools/perf/design.txt for details.

PERF_USE_VMALLOC

See tools/perf/design.txt for details


Menu: Kernel Performance Events And Counters

PERF_EVENTS

Kernel performance events and counters

Enable kernel support for various performance events provided
by software and hardware.

Software events are supported either built-in or via the
use of generic tracepoints.

Most modern CPUs support performance events via performance
counter registers. These registers count the number of certain
types of hw events: such as instructions executed, cachemisses
suffered, or branches mis-predicted - without slowing down the
kernel or applications. These registers can also trigger interrupts
when a threshold number of events have passed - and can thus be
used to profile the code that runs on that CPU.

The Linux Performance Event subsystem provides an abstraction of
these software and hardware event capabilities, available via a
system call and used by the "perf" utility in tools/perf/. It
provides per task and per CPU counters, and it provides event
capabilities on top of those.

Say Y if unsure.

PERF_COUNTERS

Kernel performance counters (old config option)

This config has been obsoleted by the PERF_EVENTS
config option - please see that one for details.

It has no effect on the kernel whether you enable
it or not, it is a compatibility placeholder.

Say N if unsure.

DEBUG_PERF_USE_VMALLOC

Debug: use vmalloc to back perf mmap() buffers

Use vmalloc memory to back perf mmap() buffers.

Mostly useful for debugging the vmalloc code on platforms
that don't require it.

Say N if unsure.


VM_EVENT_COUNTERS

Enable VM event counters for /proc/vmstat

VM event counters are needed for event counts to be shown.
This option allows the disabling of the VM event counters
on EXPERT systems.  /proc/vmstat will only show page counts
if VM event counters are disabled.

PCI_QUIRKS

Enable PCI quirk workarounds

This enables workarounds for various PCI chipset
bugs/quirks. Disable this only if your target machine is
unaffected by PCI quirks.

SLUB_DEBUG

Enable SLUB debugging support

SLUB has extensive debug support features. Disabling these can
result in significant savings in code size. This also disables
SLUB sysfs support. /sys/slab will not exist and there will be
no support for cache validation etc.

COMPAT_BRK

Disable heap randomization

Randomizing heap placement makes heap exploits harder, but it
also breaks ancient binaries (including anything libc5 based).
This option changes the bootup default to heap randomization
disabled, and can be overridden at runtime by setting
/proc/sys/kernel/randomize_va_space to 2.

On non-ancient distros (post-2000 ones) N is usually a safe choice.

COMPAT_BRK

Choose SLAB allocator

This option allows to select a slab allocator.

SLAB

SLAB

The regular slab allocator that is established and known to work
well in all environments. It organizes cache hot objects in
per cpu and per node queues.

SLUB

SLUB (Unqueued Allocator)

SLUB is a slab allocator that minimizes cache line usage
instead of managing queues of cached objects (SLAB approach).
Per cpu caching is realized using slabs of objects instead
of queues of objects. SLUB can use memory efficiently
and has enhanced diagnostics. SLUB is the default choice for
a slab allocator.

SLOB

SLOB (Simple Allocator)

SLOB replaces the stock allocator with a drastically simpler
allocator. SLOB is generally more space efficient but
does not perform as well on large systems.

MMAP_ALLOW_UNINITIALIZED

Allow mmapped anonymous memory to be uninitialized

Normally, and according to the Linux spec, anonymous memory obtained
from mmap() has it's contents cleared before it is passed to
userspace.  Enabling this config option allows you to request that
mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
providing a huge performance boost.  If this option is not enabled,
then the flag will be ignored.

This is taken advantage of by uClibc's malloc(), and also by
ELF-FDPIC binfmt's brk and stack allocator.

Because of the obvious security issues, this option should only be
enabled on embedded devices where you control what is run in
userspace.  Since that isn't generally a problem on no-MMU systems,
it is normally safe to say Y here.

See Documentation/nommu-mmap.txt for more information.

PROFILING

Profiling support

Say Y here to enable the extended profiling support mechanisms used
by profilers such as OProfile.

arch/Kconfig


MODULES

Enable loadable module support

Kernel modules are small pieces of compiled code which can
be inserted in the running kernel, rather than being
permanently built into the kernel.  You use the "modprobe"
tool to add (and sometimes remove) them.  If you say Y here,
many parts of the kernel can be built as modules (by
answering M instead of Y where indicated): this is most
useful for infrequently used options which are not required
for booting.  For more information, see the man pages for
modprobe, lsmod, modinfo, insmod and rmmod.

If you say Y here, you will need to run "make
modules_install" to put the modules under /lib/modules/
where modprobe can find them (you may need to be root to do
this).

If unsure, say Y.

MODULE_FORCE_LOAD

Forced module loading

Allow loading of modules without version information (ie. modprobe
--force).  Forced module loading sets the 'F' (forced) taint flag and
is usually a really bad idea.

MODULE_UNLOAD

Module unloading

Without this option you will not be able to unload any
modules (note that some modules may not be unloadable
anyway), which makes your kernel smaller, faster
and simpler.  If unsure, say Y.

MODULE_FORCE_UNLOAD

Forced module unloading

This option allows you to force a module to unload, even if the
kernel believes it is unsafe: the kernel will remove the module
without waiting for anyone to stop using it (using the -f option to
rmmod).  This is mainly for kernel developers and desperate users.
If unsure, say N.

MODVERSIONS

Module versioning support

Usually, you have to use modules compiled with your kernel.
Saying Y here makes it sometimes possible to use modules
compiled for different kernels, by adding enough information
to the modules to (hopefully) spot any changes which would
make them incompatible with the kernel you are running.  If
unsure, say N.

MODULE_SRCVERSION_ALL

Source checksum for all modules

Modules which contain a MODULE_VERSION get an extra "srcversion"
field inserted into their modinfo section, which contains a
sum of the source files which made it.  This helps maintainers
see exactly which source was used to build a module (since
others sometimes change the module source without updating
the version).  With this option, such a "srcversion" field
will be created for all modules.  If unsure, say N.

INIT_ALL_POSSIBLE

Back when each arch used to define their own cpu_online_map and
cpu_possible_map, some of them chose to initialize cpu_possible_map
with all 1s, and others with all 0s.  When they were centralised,
it was better to provide this option than to break all the archs
and have several arch maintainers pursuing me down dark alleys.

STOP_MACHINE

Need stop_machine() primitive.

block/Kconfig

kernel/Kconfig.locks