The following pages use a stylized form of make menuconfig. Because the standard Gentoo install comes as a CLI system only, you will see the make menuconfig screen before any other kernel configuration screen (make xconfig, etc.). The stylization helps clarity when explaining the kernel configuration process in the colored text that makes up the rest of the pages. It gives me lots of practice with the GIMP, as well.
All of the settings for this revision of the kernel seed settings pages were made using make allyesconfig (all options turned on), including CONFIG_EXPERT. Turning this setting on shows all the options available in the kernel. As such, some of the settings seen below might not be visible in the seed, as CONFIG_EXPERT isn't a seed default.
Using make allyesconfig is the best way to illustrate the full wonder of the Linux kernel. There is much that gets hidden by the standard seed configuration. Using make allyesconfig shows all of these previously hidden settings. I hope it is as educational to everyone else as it has been to me.
Upon starting make menuconfig, you will see the following:
Hit enter to get to the General Setup page.
[*] Prompt for development and/or incomplete code/drivers
If you desire to use any experimental and new code, this is a must have setting. Turning this setting on will allow you to use any and all experimental code. That includes both drivers and functional kernel code. This setting is turned on by default. It is wise to keep it that way.
() Cross-compiler tool prefix
If you use your compiler regularly for cross-compilation, and don't run Gentoo crossdev, you would set that option here. This setting defaults to off.
() Local version - append to kernel release
[ ] Automatically append version information to the version string
Use these setting if you want to give your kernel a unique name. This is best used to keep track of your kernels if you use different kernel settings for different operational parameters. If you need this kind of support, turn this setting on and then add the string you wish to use in the code box that opens up. These settings are turned off by default.
((none)) Default hostname
If you wish to set your hostname in the kernel instead of in the standard /etc/
Kernel compression mode (Gzip) --->
( ) Bzip2
( ) LZMA
( ) XZ
( ) LZO
I've tried them all, and I don't really see a difference. Pick your favorite. Mix and match. Have fun.
[*]Support for paging of anonymous memory (swap)
This setting allows for the use of swap. The use of swap is recommended. This setting is turned on by default.
[*] System V IPC
This setting allows for the System V interprocess communication. This is a very important setting, and is turned on.
[ ] POSIX Message Queues
Another message queueing system. After much experimentation, this setting has been set to off. If you are using POSIX, this should be turned on with all other required POSIX settings.
[ ] BSD Process Accounting
[ ] BSD Process Accounting version 3 file format
These settings allows for admins to find out who is doing what on their systems. They are not required for basic operation, and therefore default to off.
[ ] 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. A new setting, I have yet to experiment with it. It defaults to off in the seed.
--- Export task/process statistics through netlink (EXPERIMENTAL)
--- Enable per-task delay accounting (EXPERIMENTAL)
[ ] Enable extended accounting over taskstats (EXPERIMENTAL)
[ ] Enable per-task storage I/O accounting (EXPERIMENTAL)
These settings aren't needed for standard Linux operation, and default to off. Used for providing statistics on the operation of processes, this is more geared towards coders.
--- Auditing support
[ ] Enable system-call auditing support
These settings allow for auditing infrastructure that can be used by another kernel subsystem, such as SELinux. Since SELinux is way beyond the scope of the kernel seed, these settings default to off.
IRQ subsystem --->
--- Support sparse irq numbering
Being one of those settings that's hard-wired into the kernel, it defaults to on.
RCU Implementation (Preemptible tree-based hierarchical RCU)
[ ] Enable tracing for RCU
(32) Tree-based hierarchical RCU fanout value
[ ] Disable tree-based hierarchical RCU auto-balancing
[*] Enable RCU priority boosting
(1) Real-time priority to boost RCU readers to
(10) Milliseconds to delay boosting after RCU grace-period start
This group of settings allow lock-free read-only access to data structures that are concurrently modified on SMP systems. The main setting is turned on because it allows for better throughput. The default setting is for a fully preemptable RCU. Since it is only geared towards SMP systems, technically, monoprocessor systems can get away without it. The list of available RCU options is dictated on whether or not you've chosen to use kernel preemption. If not, the list is small. The full list is shown.
<*> Kernel .config support.
[*] Enable access to .config through /proc/config.gz
These settings copy the .config which made the kernel in question into the kernel itself. If you accidentally delete your .config file, as long as you can get the kernel to boot, you will be able to resurrect your .config settings. These settings are on by default. Turning off the main setting is not recommended.
(18)Kernel log buffer size
This setting sets the size of the kernel log buffer. The integer 18 sets the size of this buffer to 256k, which should be good for most users. This setting is set as shown, and can be adjusted to fit your circumstances. In most cases, that won't be necessary.
--- Control Group support
[ ] Example debug cgroup subsystem
[ ] Freezer cgroup subsystem
[ ] Device controller for cgroups
[ ] Cpuset support
[ ] Include legacy /proc/
[ ] Simple CPU accounting cgroup subsystem
[ ] Resource counters
[ ] Memory Resource Controller for Control Groups
[ ] Memory Resource Controller Swap Extension
[ ] Memory Resource Controller Swap Extension enabled by default
[ ] Enable perf_event per-cpu per-container group (cgroup) monitor
--- Group CPU scheduler --->
--- Group CPU scheduler
--- Group scheduling for SCHED_OTHER
[ ] CPU bandwidth provisioning for FAIR_GROUP_SCHED
[ ] Group scheduling for SCHED_RR/FIFO
< > Block IO controller
[ ] Enable Block IO controller debugging
Consider these settings poison. They remain nothing but system slow-downs. They are all off by default.
[ ] Namespaces support --->
--- Namespaces support
[ ] UTS namespace
[ ] IPC namespace
[ ] User namespace (EXPERIMENTAL)
[ ] PID Namespaces
[ ] Network namespace
Namespaces allow to group entities like classes, objects and functions under a name. This way the global scope can be divided in "sub-scopes", each one with its own name. These settings default to off.
[*] Automatic process group scheduling
Automatic process group scheduling automatically configures a rarely used Linux feature (cgroups) to group together related processes so that, under heavy load, certain processes still retain performance. While other items in cgroup tend to slow systems down, this setting actually does have some benefits, especially if you like to browse the Internet and emerge updates at the same time.
[ ] Enable deprecated sysfs features to support old userspace tools
[ ] Enable deprecated sysfs features by default
If you are using udev, these settings must remain turned off. Turning the main setting on will break udev, or at least slow it down to a crawl. Either result is not desired. These settings are off by default. They should remain off unless you are working with a distro that doesn't use udev.
Kernel->user space relay support (formerly relayfs)
relayfs is a Linux filesystem designed to provide an efficient mechanism for tools and facilities to relay large and potentially sustained streams of data from kernel space to user space.
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s)
[ ] Support initial ramdisks compressed using gzip
[ ] Support initial ramdisks compressed using bzip2
[ ] Support initial ramdisks compressed using LZMA
[ ] Support initial ramdisks compressed using XZ
[ ] Support initial ramdisks compressed using LZO
Configured properly, a Gentoo Linux system (and some others as well) doesn't require initrd/initramfs. Those who wish to use the boot-time splash screen or RAID drivers as modules should turn this setting on. While I do not support initrd/initramfs, genkernel is capable of automatically creating initramfs, if needed by your system. These settings default to off.
[ ] Optimize for size.
Since the average size of the finished kernel image is in the range of two to three megabytes, and current hard drives are rated in terabytes, and optimizing for size doesn't shave that much off the final size of the finished image, and because at one time this setting was followed by a warning about broken compilers in the "olden" days (about .25), and because this setting has also been noted for introducing instability into the kernel, this setting defaults to off, and shall remain that way.
[ ] Configure standard kernel features (expert users) --->
--- Configure standard kernel features (expert users)
[*] Enable 16-bit UID system calls
[*] Sysctl syscall support
--- Load all symbols for debugging/ksymoops
[*] Include all symbols in kallsyms
--- Support for hot-pluggable devices
[*] Enable support for printk
[*] BUG() support
[*] Enable ELF core dumps
[*] Enable PC-Speaker support
These settings don't need to be changed. They are kernel defaults, and even come with a warning against messing with them. While there are special cases when these settings might be useful, they are special cases, and well out of the realm of the generic nature of the basic kernel seed.
The only part that doesn't apply to the above are the kallsysm settings. Once in a different place in the kernel, It is highly recommended to at least turn on [*] Include all symbols in kallsyms. If you find your kallysyms aren't working properly, then you can also turn on [ ] Do an extra kallsyms pass. Since this is an unusual case, this setting is turned off. If you are having serious kernel issues and panics, turn this on to insure your ability to troubleshoot.
[*] Enable full-sized data structures for core
[*] Enable futex support
[*] Enable eventpoll support
[*] Enable signalfd() system call
[*] Enable timerfd() system call
--- Enable eventfd() system call
--- Use full shmem filesystem
[*] Enable AIO support
Generally hidden, this group of settings default to on. Many appear to be requirements. Turn off only if you know what you're doing.
[ ] Embedded system
This option allows certain base kernel features to be removed from the build. Used in environments that can tolerate a "non-standard" kernel, it's only recommended for use by those who know what they're doing.
Kernel Performance Events And Counters --->
-*- Kernel performance events and counters
[ ] Kernel performance counters (old config option)
[ ] Debug: use vmalloc to back perf mmap() buffers
The main setting is hardwired into the kernel. The sub settings default to off.
[*] Enable VM event counters for /proc/vmstat
[*] Enable PCI quirk workarounds
[*] Enable SLUB debugging support
These generally hidden options default to on for some very good reasons, not the least of which is the fact that most people have at least one quirky PCI device. It is recommended these settings remain on.
[ ] Disable heap randomization
This setting is counter-intuitive. If you want heap randomization to be activated, you keep the setting turned off. If you want to turn off heap randomization, turn the setting on. Confused yet? So was I. That's why the original information here was incorrect. This setting was introduced due to a root exploit that is fixed by heap randomization. The default for this setting is off, which enables heap randomization. It is best to leave this setting as is.
Choose SLAB allocator --->
( ) SLAB
(X) SLUB (Unqueued Allocator)
( ) SLOB (Simple Allocator)
For most people, (X)SLUB works the fastest. Therefore, (X)SLUB is the seed default.
[ ] Profiling support
< > Oprofile system profiling
[ ] OProfile multiplexing support (EXPERIMENTAL)
[ ] Kprobes
[ ] Optimize trace point call sites
Yet another source of slow-downs, this group of settings are for advanced troubleshooting, and therefore aren't required for basic Linux operation. These settings default to off.
GCOV-based kernel profiling --->
[ ] Enable gcov-based kernel profiling
[ ] Profile entire Kernel
Both serious system slow-downs, these settings basically profile every operation made by the kernel. While that is probably great if you're a serious coder, it's way beyond the needs of basic Linux operation. For that reason, these settings default to off.
You've come to the end of the first page. Let the information soak in a bit, then proceed to page 2.