Compiler un noyau Linux 1000Hz & Low-Latency (CentOS ou Red Hat)

A lire avant de poursuivre : Structure & agencement.

Compilation d'un noyau Linux réalisé pour les distributions CentOS, Red Hat et Fedora.

Un noyau de système d’exploitation, ou kernel (en anglais) est la partie fondamentale de certains systèmes d’exploitation. Il gère les ressources de l’ordinateur et permet aux différents composants matériels et logiciels de communiquer entre eux.
Pour améliorer les performances de notre serveur Counter-Strike:Source nous pouvons optimiser le noyau de notre machine. Ceci permet d'obtenir de meilleures performances.

La compilation permet d'adapter le noyau à des besoins spécifiques comme le support de matériels, l'activation de fonctionnalités ou l'adaptation à des plates-formes particulières.

Avant toute chose nous mettons à jour notre système d'exploitation.

yum update
yum upgrade

Nous installons les outils nécessaires à la compilation du noyau.

yum install gcc ncurses ncurses-devel make

Pour pouvoir compiler un nouveau noyau, il faut en télécharger le code source sur le site kernel.org.

Nous allons télécharger le code source d'un noyau, par exemple la version 3.4.9, dans le répertoire « /tmp ».

cd /tmp
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.9.tar.bz2

Une fois le fichier téléchargé, nous allons l'extraire dans le répertoire « /usr/src », puis nous pouvons créer le lien symbolique « linux », pour nous placer dans ce lien.

tar -jxvf linux-3.4.9.tar.bz2 -C /usr/src/
ln -s /usr/src/linux-3.4.9 /usr/src/linux
cd /usr/src/linux/

Nous allons configurer notre future noyau à partir de notre configuration actuel.

Nous allons faire une copie de la configuration du noyau actuel dans le dossier des sources à compiler (/usr/src/linux).

cp -vi /boot/config-`uname -r` .config

Maintenant, nous devons configurer le noyau avant de commencer à le compiler. Nous allons faire apparaître le menu de configuration du noyau.

make menuconfig

La navigation dans cette interface est simple :

[ ] signifie désactivé, [x] signifie activé et [m] signifie activé en tant que module
"↓↑" pour monter/descendre
"entrée" pour rentrer dans les sous-menus
"echap" Deux fois pour sortir du sous-menus
"h" pour demander l'aide sur une option
"/" pour rechercher une option
"espace" pour sélectionner une option

Nous allons charger la configuration du noyau existant (.config) en sélectionnant l'option "Load an alternate Configuration File". Maintenant nous sélectionnons les composants qui feront partie de notre futur noyau.

Voici les principaux réglages à effectuer :

Processor type and features
    o Preemption Model
        + 
Selectionnez Preemptible Kernel (Low-Latency Desktop)

    o Timer frequency
        + 
Selectionnez 1000 HZ

Voici les réglages approfondi : (certaines de ces options sont susceptibles de ne pas se trouver dans votre menu)

General setup
    
o RCU Subsystem 
(ignorer s'il n'est pas présent)
        + Activer RCU Implementation (Preemptible RCU)
        - 
Désactiver Enable tracing for RCU

Processor type and features
    + 
Activer Tickless System (Dynamic Ticks)
    + 
Activer High Resolution Timer Support
    o Processor family 
        + 
sélectionnez la famille correspondant à votre CPU

    o Preemption Model
        + 
Selectionnez Preemptible Kernel (Low-Latency Desktop)

    + Activer Enable priority boosting of RCU read-side critical sections (ignorer s'il n'est pas présent)
    - désactiver Enable tracing for RCU - currently stats in debugfs (ignorer s'il n'est pas présent)
    + Activer Machine Check Exception et sélectionnez Intel ou AMD (dépend de votre CPU)
    o Timer frequency
        + 
Selectionnez 1000 HZ

Power management and ACPI options
    + 
Activer Power Management support
    - 
Désactiver Power Management Debug Support
    - 
Désactiver Suspend to RAM and standby
    - 
Désactiver Hibernation (aka 'suspend to disk')
    + 
Activer ACPI (Advanced Configuration and Power Interface) Support
    o CPU Frequency scaling
        - 
Désactiver CPU Frequency scaling

    - Désactiver CPU idle PM support

Networking support
    o Networking options
        + 
Activer Packet socket
        - 
Desactiver Network packet filtering framework (Netfilter) (Cela peut désactiver votre parefeu)
        - Désactiver QoS and/or fair queueing (A moins que vous en ayez besoin ...)

Device Drivers
    - 
Désactiver Watchdog Timer Support
    o Real Time Clock
        + 
Activer PC-style 'CMOS'

    - Désactiver staging

Kernel hacking
    - 
Désactiver Tout

Voici les réglages beaucoup plus approfondi : (certaines de ces options sont susceptibles de ne pas se trouver dans votre menu)

General setup
    - 
Désactiver Prompt for development and/or incomplete code/drivers
    - 
Désactiver Support for paging of anonymous memory (swap) (sauf si vous utilisez d'autres softs intenses en mémoire)
    - Désactiver Export task/process statistics through netlink
    - 
Désactiver Auditing support
    o RCU Subsystem
        - 
Désactiver Enable tracing for RCU

    - Désactiver Control Group support (A moins que vous en ayez besoin ...)
    o Choose SLAB allocator
        + 
Selectionnez SLUB (Unqueued Allocator)

Enable the block layer
    o IO Schedulers
        + 
Activer CFQ I/O scheduler
        o Default I/O scheduler
            + 
Selectionner CFQ

Processor type and features
    + 
Activer Tickless System (Dynamic Ticks)
    + 
Activer High Resolution Timer Support
    - 
Désactiver Support for extended (non-PC) x86 platforms
    + 
Activer Single-depth WCHAN output
    - 
Désactiver Paravirtualized guest support
    o Processor family
        + 
sélectionnez la famille correspondant à votre CPU

    - Désactiver IBM Calgary IOMMU support and AMD IOMMU support
    o Maximum number of CPUs
        + 
Entrez le nombre de cœurs que vous avez

    - Désactiver SMT (Hyperthreading) scheduler support
    - 
Désactiver Fine granularity task level IRQ time accounting
    o Preemption Model
        + 
Selectionnez Preemptible Kernel (Low-Latency Desktop)

    - Désactiver Numa Memory Allocation and Scheduler Support
    + 
Activer Sparse Memory virtual memmap
    - 
Désactiver Enable -fstack-protector buffer overflow detection
    o Timer frequency
        + 
Selectionnez 1000 HZ

Power management and ACPI options
    + 
Activer Power Management support
    - 
Désactiver Power Management Debug Support
    - 
Désactiver Suspend to RAM and standby
    - 
Désactiver Run-time PM core functionality
    + 
Activer ACPI (Advanced Configuration and Power Interface) Support
    - 
Désactiver SFI (Simple Firmware Interface) Support
    o CPU Frequency scaling
        - 
Désactiver CPU Frequency scaling

    - Désactiver Cpuidle Driver for Intel Processors
    o Memory power savings
        - 
Désactiver Intel chipset idle memory power saving driver

Networking support
    o Networking options
        - 
Désactiver Network packet filtering framework (Netfilter)
 (Cela peut désactiver votre parefeu)
        - Désactiver QoS and/or fair queueing (A moins que vous en ayez besoin ...)

Device Drivers
    - 
Désactiver Watchdog Timer Support
    o Real Time Clock
        + 
Activer PC-style 'CMOS'

Kernel hacking
    - 
Désactiver Tout

Virtualization
    - 
Désactiver Tout

Nous pouvons nous aider de ce site : http://casteyde.christian.free.fr

Une fois que les composants de notre nouveau noyau sont choisis, nous pouvons quitter l'interface de configuration en sélectionnant l'option "Save an Alternate Configuration File" avant de sortir "Exit".

La compilation d'un noyau Linux peut prendre beaucoup de temps (30 à 60 minutes)

Nous allons maintenant compiler le noyau.

make

Ensuite nous allons compiler les modules.

make modules

Lorsque la compilation est terminé, nous pouvons installer les modules.

make modules_install

Nous pouvons maintenant installer le noyau que nous venons de compiler.

make install

Nous pouvons maintenant copier le fichier « .config » modifier, dans le répertoire « /boot ».

cp .config /boot/config-3.4.9

Nous avons au final 4 nouveaux fichiers (config-3.4.9, initramfs-3.4.9.img, System.map-3.4.9, vmlinuz-3.4.9) dans le répertoire « /boot ».

ls /boot/*3.4.9*

Pour permettre l'amorçage du système avec le nouveau noyau, il est nécessaire de configurer le chargeur de démarrage (GRUB) pour qu'il exécute l'image du noyau au démarrage.

Il suffit d'éditer « /boot/grub/grub.conf », et de copier au dessus, la section déjà présente, en modifiant le titre et le chemin des exécutables du nouveau noyau (écrit en bleu).

nano /boot/grub/grub.conf

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Centos kernel-3.4.9
root (hd0,0)
kernel
/vmlinuz-3.4.9 root=/dev/md0 md=0,/dev/sda2,/dev/sdb2
initrd
/initramfs-3.4.9.img

title Centos (vmlinuz-2.6.32-71.29.1.el6.i686)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.29.1.el6.i686 root=/dev/md0 md=0,/dev/sda2,/dev/sdb2
initrd /initramfs-2.6.32-71.29.1.el6.i686.img

Avant.

Après.

Tout d'abord nous devons redémarrer notre ordinateur pour que toutes les modifications soient prises en compte.

pour vérifier la version du noyau et la préemption (Low-Latency) du noyau.

uname -a

Avant (noyau 2.6.32).

Après (noyau 3.4.9 et PREEMPT).

Pour vérifier la fréquence sur laquelle est réglé le noyau.

grep HZ /boot/config-`uname -r`

Voila, amusez-vous bien, et n'hésitez pas à poser vos questions.

Propulsé par Drupal