Académique Documents
Professionnel Documents
Culture Documents
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
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
(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
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 :
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
Ex : cat /proc/loadavg
0.11 0.11 0.10 1/386 7298
Principaux composants du noyau : le gestionnaire de mmoire
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.
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
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
blacklist radeon
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 ...
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.
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
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 ...
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
http://kernelnewbies.org/WorkstationKernel
http://kernelnewbies.org/EmbeddedKernel
http://kernelnewbies.org/KernelExtensions
http://kernelnewbies.org/WritingPortableDrivers
Un trs bon site qui explique en dtail le fonctionnement d'un systme d'exploitation :
http://sos.enix.org