I was wondering what do you usually change in the kernel configuration. I am having make menuconfig in front of me right and now I need to prepare the best kernel ever for my new shiny servers. I use sources from linux-image-2.6.32-5-amd64 Debian Squeeze package because unfortunately kernel.org is still down.
Now, I see a lot of modules inside. Most of them I don’t need but it’s just an additional code loaded to the kernel on demand. No big deal.
On the other hand I have a lot of options that could improve performance and which are very useful on the server with hunders of services and users. For instance preemption, timer frequency/dynamic ticks or SMT Hyperthreading. Sometimes disabling these features is better, eventually.
Also there are many options I don’t know how they affect system behaviour or simply I do not understand. (Like, what the hell is Cryptographic API? I never had idea if I need it or not.)
If you could write few wise words I would really appreciate.
A few wise words? OK: If you do not know, Do Not Touch.
How about a few more words?
The default/generic kernels shipped with any modern Linux or BSD variant are fairly well-tuned for the vast majority of workloads. Most of what you might need to touch is accessible through
sysctl knobs (or on Linux
/proc/sys tunables), and you’ll find advice on changing those from various vendors, usually geared toward specific situations.
Mucking about with the kernel configuration, or the tunable parameters, without a clear understanding of what you’re doing and why you are doing it is a path that leads straight to nightmares: Unbootable systems, abysmal performance, “this solution works for everyone else but not me” situations, etc.
Unless you have specific reasons why you need to change kernel configuration or tunable parameters, and have researched to gain a thorough understanding of what you are adjusting and why it’s the right thing to do you’re probably better off with the defaults for now.