Compiler un noyau Linux 1000Hz & Low-Latency (Debian ou Ubuntu)

A lire avant de poursuivre : Structure & agencement.

Compilation d'un noyau Linux réalisé pour les distributions Debian, Knoppix et Ubuntu.

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.

sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude full-upgrade

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

sudo aptitude install build-essential kernel-package libncurses5-dev

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 et construire 2 paquet Debian contenant le noyau, les modules et les entêtes du noyau. Pour personnaliser le nom du noyau, il faut utiliser l'option « --append-to-version= ».

make-kpkg --append-to-version=-ligfy --initrd kernel_image kernel_headers

Lorsque la compilation est terminé, nous pouvons vérifier la présence des 2 paquets (linux-image-3.4.9-xxx.deb et linux-headers-3.4.9-xxx.deb) créés dans le répertoire « /usr/src ».

ls ../

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

dpkg -i /usr/src/linux*.deb

Nous avons au final 4 nouveaux fichiers (config-3.4.9-ligfy, initrd.img-3.4.9-ligfy, System.map-3.4.9-ligfy, vmlinuz-3.4.9-ligfy) 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.

La commande précédente « dpkg -i » invoque le programme « update-grub » pour mettre à jour automatiquement les fichiers de configuration de grub et par conséquent la liste des noyaux affichés dans le menu grub. Il n'est donc pas nécessaire de lancer manuellement la commande « sudo update-grub ».

sudo update-grub

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 3.2.0).

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`

Avant (CONFIG_HZ_250=y).

Après (CONFIG_HZ_1000=y).

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

Propulsé par Drupal