You are on page 1of 29

Dcouverte du noyau

GNU/Linux
Premiers pas dans la compilation d'un
noyau optimis pour son matriel

Stphane Tletcha
stephane.teletchea@univ-nantes.fr
http://steletch.free.fr
Organisation gnrale d'un ordinateur et d'un processeur

Les composants matriels sont inutiles sans un systme capable de les faire interagir entre eux pour
transfrer des donnes et effectuer des oprations complexes.
Lors du dmarrage de l'ordinateur le BIOS initialise lectriquement chaque matriel, vrifie ses
capacits et rgle les divers composants du systme (priorit des bus, frquence d'horloge des ports
PCI, frquence du processeur, etc).

Aprs cette phase d'initialisation, il faut qu'un second systme prenne le relais pour grer les accs
aux ressources matrielles afin de rpondre aux besoins des utilisateurs.
Le rle du noyau va tre de complter l'initialisation du matriel par exemple via le chargement de
pilotes et/ou de firmwares spcifiques, puis de grer l'accs concurrentiel aux ressources de
l'ordinateur.
Prsent ainsi, un noyau est donc premirement un gestionnaire de ressources trs efficace qui va
autoriser l'utilisation d'un priphrique, charger en mmoire un fichier stock sur le disque dur, lancer
les commandes matrielles lies l'impression de ce fichier.

http://fr.wikipedia.org/wiki/Systme_d'exploitation
Les diffrents types de noyaux

L'accs la mmoire de l'ordinateur et aux ressources du processeur se font gnralement selon


deux modes : le mode superviseur / noyau ou en espace utilisateur . L'architecture
x86 permet d'utiliser 4 niveaux d'accs au matriel, mais en pratique deux sont utiliss :
- ring 0, pour le noyau
- ring 1, non utilis
- ring 2, non utilis
- ring 3, pour l'espace utilisateur

En mode superviseur, ddi au fonctionnement du noyau, il y a un accs direct la mmoire et au


matriel, il faut donc un fonctionnement sans failles. L'espace utilisateur est contrl : les
ressources mmoires sont bornes et si un dpassement mmoire apparat, le noyau va prvenir
celui-ci, en terminant le processus fautif.
Philosophie de fonctionnement du noyau

En fonction de l'approche envisage pour le fonctionnement du noyau, il est possible d'insrer tout le code du
noyau dans l'espace rserv ou d'en rpartir une partie dans l'espace utilisateur.


Approche micro-noyau : comme le noyau a comme rle premier d'ordonnancer les priorits matrielles
et les requtes logicielles, cette partie de gestion de priorits est indpendante du matriel. Il est ainsi
possible que le code de l'ordonnanceur soit en mode protg, et que le reste des pilotes de priphriques
soit dans l'espace utilisateur. Ex : Mach (Mac OS X).

Approche monolithique : tout le code rside dans l'espace rserv, ce qui vite des changements de
contexte mais le noyau en perd en portabilit. Ex : linux (avant 1.2), BSD4.4.


Approche monolithique avec chargement de modules : tout le code est dans l'espace noyau, mais
certaines parties du matriel sont prises en charge par des modules qui sont chargs dynamiquement. Ex :
Linux >1.2, BSD, IRIX, ...

Approche micro-noyau enrichi / hybride : une partie des fonctionnalits en mode utilisateur sont
rintgres dans l'espace noyau pour des raisons de performances. Ex : Windows NT.


Approche temp rel : l'excution d'une tche est ralise dans une dure garantie. Ex : Rtlinux.
Philosophie de fonctionnement du noyau

http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation#Le_noyau, image de Wooptoo


Et le plus versatile, plus performant, plus portable est ...
Linux a plus de 20 ans et plus de 15 millions de lignes de code !
Linux est un noyau architecture monolithique modulaire !
Pourquoi compiler son propre noyau ?
Pourquoi compiler son propre noyau ?

(1) Le noyau Linux est trs versatile, les noyaux fournis avec les distributions sont
trs volumineux, et contiennent normment de modules inutiles pour une utilisation
sur un ordinateur donn
(2) Le noyau de la distribution n'est pas optimis pour l'architecture matrielle, il ne
peut pas bnficier de toutes les technologies, par exemple pour la gestion de
l'nergie
(3) Le noyau est trop ancien (besoin pour une mise jour)
(4) Une faille de scurit a t dcouverte et il faut la corriger rapidement
(5) L'espace disque est restreint et il vous faut rcuprer l'espace occup par le noyau et
les modules
(6) Les rglages par dfaut pour la ractivit du systme de vous conviennent pas
(base de donnes, jeux, serveur de fichiers, bureautique)
(7) Vous cherchez utiliser une fonctionnalit inhabituelle
(8) Les contraintes matrielles sont trs contraignantes (embarqu)
Principaux composants du noyau

L'architecture du noyau linux est trs


complte, ce qui lui permet de grer des
ordinateurs personnels, des routeurs, des
tlphones portables ou des super-
calculateurs.

En reprenant les concepts dvelopps


prcdemment, il est possible de dcouper
son fonctionnement en quelques briques
lmentaires, suffisantes pour une premire
approche de son fonctionnement.
Principaux composants du noyau : SCI

Le system call interface est le composant qui gre l'interaction entre l'espace
utilisateur et l'espace noyau. Il existe plus de 300 appels systmes qui rpondent la
norme POSIX sous linux, les principaux sont :

Process Control Device Management


load request device, release device
execute read, write, reposition
create process (ork) get/set device attributes
terminate process logically attach or detach devices
get/set process attributes Information Maintenance
wait for time, wait event, signal event get/set time or date
allocate, free memory get/set system data
File management get/set process, file, or device attributes
create file, delete file Communication
open, close create, delete communication connection
read, write, reposition send, receive messages
get/set file attributes transfer status information
attach or detach remote devices
Principaux composants du noyau : gestionnaire de processus

Chaque lment excut par le noyau est appel thread ou processus lger . Ce
terme regroupe le code excut, les donnes associes, la pile en cours de
lecture/criture, les registres solicits sur le processeurs,

Dans l'espace utilisateur, on parle de processus, qui regroupe en gnral sous le mme
terme le programme en cours d'excution et ses diffrents routines, sans distinction.

L'interaction entre l'espace noyau et l'espace utilisation se fait via l'abstraction fournie par
les appels systmes (SCI) et permet d'envoyer au processus un signal normalis :
15 pour le terminer proprement
9 pour l'arrter sans se proccuper des actions en cours

Il est aussi possible d'interagir sur le temps accord pour l'excution de chacun
processus avec les commandes nice / renice.
Principaux composants du noyau : VFS

Le systme de fichiers virtuels (Virtual File System) est une


interface d'abstraction des systmes de fichiers rels. Il
permet d'accder aux priphriques sans se proccuper
des dtails de l'implmentation de chaque systme de
fichier, de la taille des fichiers grs, des temps de
rponse, etc.
Le VFS est aussi particulirement utile dans un systme
gouvern par le concept tout est fichier :

pour accder un priphrique rel, il est possible de


s'y rfrer travers le device qui lui a t attribu
(/dev/sda5) ;
pour accder un composant de processus, un
paramtre systme, il est possible de lire la valeur
dans /proc (aujourd'hui en cours d'abandon) ou /sys
via les systmes de fichiers procfs ou sysfs.

Ex : cat /proc/loadavg
0.11 0.11 0.10 1/386 7298
Principaux composants du noyau : le gestionnaire de mmoire

Dans l'espace noyau, le kernel a accs toute la mmoire physique


disponible sur l'ordinateur :
1 - caches du processeur
2 - mmoire DRAM
3 - ( mmoire lointaine (via NUMA) )
4 - espace disque (via le swap)
La mmoire est simule comme infinie par le kernel pour que les
processus aient toujours accs une zone mmoire pour leur bon
fonctionnement. En fonction de la demande, le noyau va dcouper
l'espace mmoire par page de 4 ko et les attribuer au processus
demandeur.
Si cette mmoire n'est pas utilise pendant un certain temps ,
l'espace mmoire est dplac sur disque par le mcanisme de swap,
jusqu' ce que le processus soit de nouveau actif.
Si le processus se termine, la page est alors recycle pour un autre
processus. En fonction du type de processus, l'allocation peut tre de
taille diffrente
Principaux composants du noyau : la pile rseau

Le noyau linux a t cr en mme temps que internet et a grandi avec lui. Trs tt, il a
fallut communiquer entre les dveloppeurs pour que les changes de code se fassent
correctement. Le support des protocoles rseau, des matriels, et des configurations
extrmes est ainsi trs complet.

Linux support bien entendu les protocoles ipv4, ipv6, tcp, udp, mais aussi bien d'autres
protocoles trs spcifiques (token ring, myrinet, ).

Le fonctionnement de la pile rseau est considr comme l'un des plus performants de
tous les OS, en concurrence avec *BSD.

Pour une utilisation spcifique de la machine, il faudra nanmoins envisager des


rglages spcifiques du noyau (voir ci-aprs).
Principaux composants du noyau : dpendants de l'architecture

Bien que majoritairement monolithique, ce qui a t peru initialement comme une erreur
de conception limitant la portabilit, Linux est disponible pour un grand nombre
d'architectures.
La plus commune sur les ordinateurs personnels est l'architecture x86 et maintenant x86-
64. Chaque architecture implique une gestion spcifique de la mmoire, un ordre
d'excution des commandes diffrents, un matriel adapt, etc.
Pour l'architecture x86, il est possible de vrifier les extensions prises en charge par le
noyau en explorant le systme de fichiers virtuel /proc (cat /proc/cpuinfo). la ligne
Flags , on peut ainsi trouver :
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs
bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave
lahf_lm dtherm tpr_shadow vnmi flexpriority

Certains matriels offrent aussi la possibilit de virtualiser un autre systme


d'exploitation en le prenant en charge au niveau du matriel, pour des performances de
premier plan. Cette prise en charge matrielle est gre par le mcanisme kvm sous
linux.
Principaux composants du noyau : les pilotes

Chaque lment du matriel ncessite un pilote particulier qui va tre en charge de


communiquer directement avec le matriel et va fournir les api gnriques au noyau pour
qu'un appel systme venu de l'espace utilisateur aboutisse.

Parmi les matriels communs trs bien pris en charge sous linux, on peut citer les
priphriques rseaux, les chipsets (NB/SB), les hub USB (avec l'arrive rcente de
l'USB 3.0), les contrleurs de disque dur,

Les pilotes pour cartes graphiques sont cependant supports de manire plus ingale,
en particulier pour les deux plus importants constructeurs de matriels que sont NVIDA et
AMD.

Dans certains cas, pour obtenir des performances optimales, une meilleure gestion de
l'nergie, le pilote pour une carte graphique rcente, il faudra se tourner vers les pilotes
propritaires , en tant tributaire de la ractivit de ces socits au moment des
changements d'ABI/API du serveur d'affichage.
Le noyau itself : la modularit ...

lsmod,
modinfo,
insmod,
modprobe,
/etc/modprobe.conf,
/etc/modprobe.d/blacklist,
dkms
cat /etc/modprobe.d/fglrx.conf

# This file was installed by fglrx

# Do not edit this file manually

blacklist radeon

alias fglrx fglrx

alias radeon off

alias lbm-radeon off


Le noyau itself : multitches, multiutilisateurs, multiusages

Le rle des composants vus prcdemment est de grer au mieux l'accs aux
ressources physiques et logiques du systme, cependant il faut que le kernel gre les
priorits d'accs, et fournisse un ensemble de mcanismes pour permettre l'utilisateur
d'agir sur ce fonctionnement.
Pour atteindre cet objectif, linux dcoupe chaque excution d'un programme pour le
mettre en attente, excuter un second, etc.
Le noyau itself : rpartition des rles ...

Il existe plusieurs manires de rpartir le temps


que le processeur va consacrer un thread, qui
vont tre dpendantes du rsultat espr.

Par exemple il est possible d'obtenir de


meilleures performances en dbit de donnes,
en temps de calcul, mais au dtriment de la
ractivit du systme.

Jusqu'au noyau 2.6.23, l'ordonnanceur par


dfaut tait le O(1) scheduler, mais il a t
remplac depuis par le Completely Fair
Scheduler (CFS). D'autres possibilits
existent ...
Le noyau itself : utiliser des groupes de contrle

Principe : contrler et regrouper des ressources


physiques pour les attribuer un processus
donn.

Avec l'utilisation du scheduler CFS , il est


recommand de les activer pour de meilleures
performances en usage bureautique standard ...

https://access.redhat.com/knowledge/docs/en-
US/Red_Hat_Enterprise_Linux/6/html/Resource
_Management_Guide/ch01.html
Le noyau itself : la ractivit du systme

Auparavant le noyau tait sollicit rgulirement lors d'un compte fixe de l'horloge, pour vrifier le
travail raliser (les processus en attente). Dornavant, le noyau utilise l'architecture tickless . En
rsum, cela veut dire que si le systme n'a aucune tche effectuer, le processeur ne sera pas
rveill inutilement. Quand une tche est en cours, alors le noyau vrifie tous les x millisecondes s'il y
a une tche effectuer. Si le systme est rgl sur 1000 Hz alors il va tre consult 1000 fois par
secondes soit une fois par milliseconde, si c'est 250 Hz, alors le rveil ne se fera que 250 fois par
seconde, soit toutes les 4 millisecondes. Le noyau 2.4 avait par dfaut la configuration 100 Hz.

En fonction de vos besoins, c'est un paramtre qu'il faudra valuer (d'autres valeurs sont aussi
disponibles dans les options de configuration du noyau : 100, 250, 300 Hz). Pour quelques
indicateurs sur les variations de performances lies l'utilisateur d'un timer diffrent, veuillez
vous rfrer l'article disponible l'adresse http://elinux.org/Kernel_Timer_Systems (un peu ancien
mais cela donne quelques indications sur les rsultats que l'on peut esprer). Vous pouvez aussi
vous rendre l'adresse suivante pour vrifier les gains ou pertes de performances envisageables
avec les diffrents rglages de l'ordonnanceur noyau :
http://www.kernel.org/pub/linux/kernel/people/andrea/misc/31-44-100-1000/31-44-100-1000.html.
L'ordonnanceur par dfaut pour les disques ...

L'ordonnanceur E/S du noyau ( elevator ) est le gestionnaire qui dtermine le mode d'entre/sortie
pour les disques. Il est pens pour des disques durs traditionnels o la tte de lecture doit se
dplacer pour trouver l'information sur les plateaux.

Il permet de donner la priorit, en simplifiant le propos, :


(a) la ractivit du systme (deadline),
(b) la performance disque en favorisant le dbit (anticipatory),
(c) l'quit d'accs aux fichiers entre les programmes (noop),
(d) une recherche du meilleur compromis entre dbit et latence (cfq).

Pour un usage courant, l'ordonnanceur cfq est privilgi (choix par dfaut du noyau linux). Pour
une utilisation de base de donnes il est recommand de prendre l'ordonnanceur deadline .

Pour plus de dtails, voir l'explication un peu ancienne sur le site de Red Hat (en Anglais) :
http://www.redhat.com/magazine/008jun05/features/schedulers/.
Pour conclure, il faut signaler que l'ordonnanceur peut aussi tre spcifi par priphrique, ce qui
peut tre avantageux si votre systme est particulier (un disque SSD par exemple peut donner des
rsultats trs diffrents d'un disque traditionnel ).
Pour aller plus loin (si le temps le permet ...)

(1) Tester l'ordonnanceur de Con Kolivas (BFS), pens pour amliorer la ractivit
d'un systme grand public :

http://www.linuxpromagazine.com/Online/News/Con-Kolivas-Introduces-New-BFS-
Scheduler
http://ck.kolivas.org/patches/bfs

(2) Ajouter un matriel exotique son installation, la balance board de la Wii :

http://www.phoronix.com/scan.php?page=news_item&px=MTE5NjY
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-
2.6.git;a=commit;h=9fa40a1135d94cb6eed99e264c6d4fe00c0a73f9
Prendre en compte les outils de scurit du systme ...

Apparmor (selinux par dfaut dans linux)

https://wiki.ubuntu.com/AppArmor
https://help.ubuntu.com/12.04/serverguide/apparmor.html
http://www.novell.com/documentation/apparmor/apparmor201_sp10_admin/?
page=/documentation/apparmor/apparmor201_sp10_admin/data/book_apparmor_admin.html

Rglages pour le rseau avec iptables ou un pare-feu gnrique


https://help.ubuntu.com/community/IptablesHowTo
http://doc.ubuntu-fr.org/pare-feu
http://doc.ubuntu-fr.org/ufw
http://doc.ubuntu-fr.org/gufw
Kernel hacking

http://kernelnewbies.org/WorkstationKernel
http://kernelnewbies.org/EmbeddedKernel
http://kernelnewbies.org/KernelExtensions
http://kernelnewbies.org/WritingPortableDrivers

La version exprimentale du noyau :


http://www.kroah.com/log/linux/linux-staging-update.html

Utiliser et compiler les modules associs cette version exprimentale :


http://www.element14.com/community/docs/DOC-44948/l/compiling-linux-kernel-staging-driver-modules
En savoir encore plus ...

Introduction la notion de systme d'exploitation :


http://www.commentcamarche.net/contents/systemes/sysintro.php3
http://fr.wikipedia.org/wiki/Anneau_de_protection
http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation#Le_noyau

Un trs bon site qui explique en dtail le fonctionnement d'un systme d'exploitation :
http://sos.enix.org

Lorganisation et le fonctionnement de diffrents lments du noyau :


http://www.ibm.com/developerworks/linux/library/l-linux-kernel/
http://www.ibm.com/developerworks/linux/library/l-proc/index.html

Une carte interactive : http://www.makelinux.net/kernel_map/

Pour aller plus loin avec le noyau linux :


http://kernelnewbies.org/Documents
Source des mdias utiliss pour ce cours

Sources des mdias :


http://en.wikipedia.org/wiki/Linux_kernel
http://royal.pingdom.com/2012/04/16/linux-kernel-development-numbers/
http://www.thefullwiki.org/Virtual_memory
http://en.wikipedia.org/wiki/CPU_time
http://www.ibm.com/developerworks/linux/library/l-linux-kernel/
http://fr.scribd.com/doc/24111564/Project-Linux-Scheduler-2-6-32
http://doc.opensuse.org/documentation/html/openSUSE/opensuse-tuning/cha.tuning.cgroups.html

You might also like