Linus Torvalds a publié ce matin une nouvelle version du noyau Linux inaugurant la nouvelle branche « 5 ». Précisons que le passage de la branche 4 à la branche 5 n’a pas de signification particulière, il n’y a pas plus de différence entre le noyau 4.20 et le 5.0 qu’entre le 4.19 et 4.20 par exemple. C’est simplement l’histoire des numérotations de Linux qui est un peu particulière.
Installation
[Build]$ wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.0.tar.xz
[Build]$ tar xf linux-5.0.tar.xz
[Build]$ cd linux-5.0/
J’ai récupéré la configuration du noyau précédent fourni par la distribution. Ceci évite d’avoir à passer en revue les quelques milliers d’options pour s’assurer que le système boote correctement.
[linux-5.0]$ cp /boot/config-4.15.0-45-generic .config
[linux-5.0]$ make menuconfig
J’ai choisi de modifier quelques options. Bien sûr, comme à chaque version de Linux (tous les deux mois environ) il y a tout un ensemble de nouvelles fonctionnalités disponibles. Impatient de voir le résultat de ma compilation, je n’en modifie que quelques-unes.
General setup --->
() Local version - append to kernel release
Ceci n’est pas nouveau, mais ajoutez une chaîne de caractères quelconque (par exemple vos initiales) précédée d’un tiret. Ceci permet de « signer » visuellement son noyau.
General setup --->
CPU/Task time and stats accounting --->
[*] Pressure stall information tracking
[ ] Require boot parameter to enable pressure stall information tracking
Nous reparlerons de ce nouveau mécanisme plus bas.
Power management and ACPI options --->
[*] Energy Model for CPUs
Une gestion plus fine de la consommation électrique. Surtout utile pour les modèles sur batterie (portables, tablettes, objets connectés, systèmes embarqués, etc.).
[linux-5.0]$ make -j 4
[linux-5.0]$ sudo make modules_install
[linux-5.0]$ sudo make install
[linux-5.0]$ sudo reboot
Après quelques instants, ma machine redémarre, et m’affiche l’interface graphique habituelle. J’ouvre une console et vérifie tout de suite si le noyau est bien celui que je viens de compiler.
[~]$ uname -a
Linux why-240 5.0.0-cpb #1 SMP Mon Mar 4 11:38:55 CET 2019 x86_64 x86_64 x86_64 GNU/Linux
Le système semble fonctionner tout à fait normalement. Je vérifie les quelques points que j’ai modifiés durant la configuration
Pressure Stall Information
Un point intéressant pour l’administration d’un système Linux est l’arrivée du système de mesure de la charge en CPU, en mémoire et en entrées-sorties.
[~]$ cd /proc/pressure/
[pressure]$ ls
cpu io memory
[pressure]$ cat cpu
some avg10=1.53 avg60=0.97 avg300=0.81 total=12219936
[pressure]$ cat io
some avg10=4.60 avg60=3.74 avg300=3.90 total=55969274
full avg10=3.00 avg60=2.60 avg300=2.88 total=48143084
[pressure]$ cat memory
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
Afin de solliciter un peu le système, j’ai relancé une compilation assez conséquente. Nous voyons que le pseudo-fichier CPU nous indique la charge processeur durant les 10 dernières secondes, puis 1 et 5 minutes.
On trouvera l’explication des différents champs dans cet article de Jonathan Corbet sur LWN.
Synthetic and dynamic events
L’arrivée de pseudo-fichiers synthetic_events
et dynamic_events
dans le système de fichiers tracefs
permet d’unifier l’accès via Ftrace aux mécanismes de suivi kprobe et uprobe. Je n’ai pas encore approfondi ce point, on pourra se reporter au post du patch pour des explications.
[~]$ sudo -i
# mount none /sys/kernel/tracing/ -t tracefs
# ls /sys/kernel/tracing/
available_events max_graph_depth stack_trace
available_filter_functions options stack_trace_filter
available_tracers per_cpu synthetic_events
buffer_percent printk_formats timestamp_mode
buffer_size_kb README trace
buffer_total_size_kb saved_cmdlines trace_clock
current_tracer saved_cmdlines_size trace_marker
dynamic_events saved_tgids trace_marker_raw
dyn_ftrace_total_info set_event trace_options
enabled_functions set_event_pid trace_pipe
events set_ftrace_filter trace_stat
free_buffer set_ftrace_notrace tracing_cpumask
function_profile_enabled set_ftrace_pid tracing_max_latency
hwlat_detector set_graph_function tracing_on
instances set_graph_notrace tracing_thresh
kprobe_events snapshot uprobe_events
kprobe_profile stack_max_size uprobe_profile
# exit
Energy model
La gestion fine de la consommation était une demande pressante, notamment dans l’univers des objets connectés. Il s’agit de donner des indications à l’ordonnanceur sur la consommation électrique des différents cœurs. Ceci est intéressant essentiellement pour la famille Arm, où l’on voit de plus en plus de processeurs asymétriques, proposant par exemple deux cœurs A15 rapides mais assez gourmands et deux cœurs A7 un peu plus lents mais plus économes en énergie. Cette connaissance du modèle de consommation associée à la topologie du processeur pourra améliorer les décisions de l’ordonnanceur pour optimiser l’utilisation des batteries.
Conclusion
Je me suis amusé à compiler rapidement ce nouveau noyau et à vous en faire part ici, mais il y a beaucoup plus de nouveautés que les quelques options présentées ici.
Pour en savoir plus sur le noyau Linux 5.0, je vous conseillerais de parcourir cet article de l’excellent site Kernel Newbies.
Bonjour Christophe,
Je pense qu’il y a une petite coquille :
make -j 4 modules
Non ?
Damien
Bonjour,
Merci de ce retour, mais c’est bien ça :
make
compile à la fois le noyau (bzImage
) et les modulesmake modules_install
place les modules dans une arborescence sous/lib/modules/numéro-du-noyau
make install
copie le noyau dans le répertoire/boot
et l’inscrit dans le fichier de configuration du bootloader.Cordialement.
En effet, petite erreur de ma part, ça n’est pas nécessaire au final.
Cependant, attention pour Debian, il faut modifier un petit peu le .config : CONFIG_SYSTEM_TRUSTED_KEYS = « »
https://wiki.debian.org/BuildADebianKernelPackage
https://www.reddit.com/r/linuxquestions/comments/byinth/cannot_stat_archx86cryptoaegis128aesniko_no_such/
Merci Christophe 😉
A quand un petit tuto ou des refs sur les modules kernel ?