This is intended for guys like me who were curious about this kind of thing, Meant to be as simple as possible so you can practically copy and paste the commands to your terminal.
*All the following you MUST be run as root. on Ubuntusudo -su*This works on the latest versions of Ubuntu.
First lets install all the pre reqs.
sudo apt-get install kernel-package fakeroot build-essential ncurses-dev
After you have installed all the pre reqs, You need to set your optimizations.
To check your processor ...
In your terminal. Read this and pick out your CPU Type and Adjust Accordingly. For Mine it is an i7
export CONCURRENCY_LEVEL=8 export CFLAGS="-march=corei7-avx -O3 -pipe" export CXXFLAGS="$CFLAGS"
I will explain these:
CONCURRENCY_LEVEL, for some programs, mainly the program we will be using to build the kernel the "debian" way, it is capable of using multiple cores, with this variable set to the number of cores of your CPU, it will use all of them when compiling the kernel.
CHOST, this variable is for gcc, the compiler used in Linux. This line tells gcc what architecture to build for. this is currently set for Intel/AMD x86_64 cpu's and 64 bit distro's, if you are building for a 32 bit distro, use CHOST="i686-pc-Linux-gnu", instead. This flag isn't always needed, you can exclude it if you want. * I have removed this as its not needed
CFLAGS, these are compile flags, mainly for optimization for the binary. -march, the family of your CPU, latest versions of GCC can auto detect these features, setting it to native is suitable in most cases. Setting -march allows GCC to compile the code to take advantage of any feature of your CPU. -O2 and -pipe, are another optimization flag. There are more flags, but these are "generic" ones used, that offer a decent amount of benefits, I'm afraid going into more detail, is beyond the scope of this guide.
CXXFLAGS, extra flags for GCC, typically you can set them to CFLAGS, which has be done here.
Keep the terminal open, as everything you will be doing will require it. (if you close the terminal, you will need to export those variables again.)
Next Make a tmp directory. This will be used to unpack and build the kernel. Wherever you like. A suggestion is....
mkdir ~/tmp cd ~/tmp
Download the latest Kernel from Kernel.org.
tar xvf linux-3.9-rc8.tar.xz
Move into your directory and build your config file. Now here I suggested building your default one. I have heavily modified mine and taken alot of the stuff out to make it as stream lined as possible. You will be asked a lot of questions, How many depends on what version you are building. If in doubt, pick the default answer (i.e. hit enter). If really in doubt, use post here.
cd linux-3.9-rc8/ cat /boot/config-`uname -r`>.config make oldconfig make-kpkg clean
For the more adventerous amongst you, I suggest you familiarize yourself with the Menu Config. If I remember I will post my .config file for you to download. However it is built for a Sony VAIO Laptop. So... if you want to make any specific changes to the kernel (e.g. add support for certain devices) ...
Then the fun part. Building the kernel.
time fakeroot make-kpkg -j8 --initrd kernel_image kernel_header*As usual 8 is the number of threads you wish to launch -- make it equal to the number of cores that you have for optimum performance.
If you get it under 30mins on an i7 You are doing well. Sit back and enjoy...
After all the good stuff, Install your new shiny built kernel.
cd .. sudo dpkg -i linux-image-*.deb sudo dpkg -i linux-headers-*.deb
You should also see it update the GRUB Boot loader so it boots right into your new kernel. Reboot and enjoy.
You can see here on how to test your performance...http://www.neowin.net/forum/topic/1148290-cpu-optimizations/
Further Reading ...
v1.0 - Created