[Actu] Bye-Bye Big Kernel Lock…

Publié par cpb
Mai 19 2011

Linus Torvalds a publié ce matin la version 2.6.39 du kernel Linux. Pour des raisons liées essentiellement à son emploi du temps chargé, il a préféré renoncer à la version release candidate rc8 et passer directement à la version stable.

Pas beaucoup de grosses nouveautés dans cette version, je note la présence d’une nouvelle interface nommée « Media Controller API » principalement destinée à l’acquisition vidéo et aux cameras (Menus « Drivers« , sous-menu « Multimedia Support« ), et quelques autres nouvelles options dans la configuration du noyau.

Une disparition remarquable : le Big Kernel Lock est (enfin) définitivement mort !

Rappelons que ce verrou, présent depuis les premières versions multiprocesseurs de Linux avait pour objectif de protéger certaines parties du noyau contre des exécutions parallèles (en configuration SMP) et les préemptions (en mode PREEMPT). Ce verrou n’était plus utilisé que dans quelques rares portions du kernel, et de nombreux développeurs cherchaient à s’en débarrasser depuis plusieurs années. Pour améliorer la granularité des verrouillages exclusifs, plusieurs mécanismes de synchronisation sont disponibles (spinlock, mutex, rcu, etc.).

Le noyau 2.6.39 marque enfin la disparition définitive du BKL. Vérifions-le en comparant les résultats de recherche de la chaine « kernel_lock() » sur les deux dernières versions stables :

[src ]# cd linux-2.6.38/
[linux-2.6.38]# find . -name '*.[cħ]' | xargs grep -E 'lock_kernel()'
./fs/hpfs/dir.c:	lock_kernel();
./fs/hpfs/dir.c:	unlock_kernel();
./fs/hpfs/dir.c:	lock_kernel();
[...]
./drivers/staging/go7007/s2250-loader.c:	unlock_kernel();
./drivers/staging/usbip/usbip_common.c:	lock_kernel();
./drivers/staging/usbip/usbip_common.c:	unlock_kernel();
[root@tr-a-0 linux-2.6.38]# find . -name '*.[cħ]' | xargs grep -E 'lock_kernel()' | wc -l
298
[root@tr-a-0 linux-2.6.38]# cd ..
[root@tr-a-0 src]# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
--2011-05-19 15:19:56--  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2
[...]
2011-05-19 15:21:11 (1000 KB/s) - “linux-2.6.39.tar.bz2” saved [76096559/76096559]
[root@tr-a-0 src]# tar -xjf linux-2.6.39.tar.bz2 
[root@tr-a-0 src]# cd linux-2.6.39
[root@tr-a-0 linux-2.6.39]# find . -name '*.[cħ]' | xargs grep -E 'lock_kernel()'
[root@tr-a-0 linux-2.6.39]# find . -name '*.[cħ]' | xargs grep -E 'lock_kernel()' | wc -l
0
[root@tr-a-0 linux-2.6.39]#

Bon débarras !

Je testerai les nouvelles fonctionnalités (par exemple ipset qui permet d’appliquer des règles de filtrage sur des ensembles d’adresses IP) dans les jours à venir, mais pour le moment ce nouveau kernel fonctionne très bien :

[~]# uname -a
Linux tr-a 2.6.39-cpb #1 SMP Thu May 19 12:46:48 CEST 2011 i686 i686 i386 GNU/Linux
[root@tr-a-0 ~]#

URL de trackback pour cette page