How-to : patch kernel qui boost les performances

Hello.

Lecteur du blog de Korben je suis tombé sur cet article : korben.info/un-patch-qui-boo … sktop.html

il parle d’un patch du kernel qui améliorerait les performances : marc.info/?l=linux-kernel&m=128978361700898&w=2

Pour ceux qui veulent tester voilà j’ai fait à partir des sources git.
D’abord le patch à enregistrer dans un fichier ~/autogroup.patch :

cd && wget http://imanweb.free.fr/uploaded/autogroup.patch

Puis on se lance dans la compilation :

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6 cd linux-2.6 && patch -p1 < ../autogroup.patch cp -vi /boot/config-`uname -r` .config cd linux-2.6/ make localmodconfig cp /boot/config-$(uname -r) .config && yes "" | make oldconfig make menuconfig make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-20101117 kernel-image kernel-headers cd sudo dpkg -i linux-*.deb

Résultat :

[quote]iman@debian:~$ uname -r
2.6.37-rc2-20101117+[/quote]

Pour le moment ça fonctionne, rien à signaler … à voir sur du long terme. A priori d’après ce que j’ai pu lire dans les commentaires chez Korben et dans les commentaires de la news source en anglais l’effet est surtout flagrant sur des processeurs multicore.
Mais ça fait plaisir d’avoir compilé mon premier kernel avec un patch. :wink:

@+…

EDiT : ajout du fichier autogroup.patch.txt en pièce jointe et suppression du code du patch dans le post
autogroup.patch.txt (10.7 KB)

Pas mal, est ce que tu sais si ce patch est compatible avec tous les noyaux 2.6.3x (genre le 2.6.32 de la sid) ou faut il absolument en installer un plus récent (genre comme toi et ton 2.6.37) ?

Salut !
Sympa le retour !
J’ai une question par contre. Quand tu télécharges le noyau de git, c’est quelle version stp ? Ayant un proc amd double coeur, je n’ai pas envie de faire une mauvaise manip, et je suis incapable de savoir comment le noyau est choisi.
++

Salut,

J’ai un mauvais retour pour ma part sur ma SID :

% cd linux-2.6 && patch -p1 < ../autogroup.patch patching file include/linux/sched.h patch: **** malformed patch at line 7: };
:confused:

Hello.

@Emralegna : j’ai uploadé le patch ici http://imanweb.free.fr/uploaded/autogroup.patch

@Slystone : c’est la 2.6.37-rc2

@dric64 : là tu me poses une colle! Je dirais que c’est pour tous les noyaux 2.6 mais à confirmer.
De toute façon le plus simple c’est de compiler celui-là (2.6.37-rc2) en appliquant le patch. Quitte à compiler autant avoir le dernier kernel non?

Sinon y’a un article là dessus sur http://www.planet-libre.org, ça se passe chez ChEza : http://gnu-vautes.eg2.fr/un-petit-patch-impressionnant-du-kernel-qui-fait-le-buzz/

@+…

hello,

apparement ça concerne l’option du kernel “Control Group support”, perso je l’ai désactivé,
quand je vois les vidéos, il utilise make -j64, ça doit être valable sur des grosses machines, m’enfin à voir.

i M@N : Merci, cette fois ça marche. Une idée de quel était le soucis ?

neos : les 64 threads étaient là juste pour les besoin du tests, ils n’ont aucune autre utilité.

Salut,
J’ai une erreur vers la fin, lors de la génération des paquets.
Je suis preneur de toute suggestions !
Merci,
C.

====== making target debian/stamp/binary/pre-linux-image-2.6.37-rc2-20101117+ [new prereqs: linux-image-2.6.37-rc2-20101117+]======

This is kernel package version 12.033.
/usr/bin/make -f ./debian/rules debian/stamp/binary/linux-image-2.6.37-rc2-20101117+
make[2]: entrant dans le répertoire « /root/linux-2.6 »
====== making target debian/stamp/binary/linux-image-2.6.37-rc2-20101117+ [new prereqs: ]======

This is kernel package version 12.033.
install -p -d -o root -g root  -m  755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN
sed -e 's/=V/2.6.37-rc2-20101117+/g'    -e 's/=IB//g' \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'   	     \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'	     \
	    -e 's@=A@amd64@g'   \
	    -e 's@=B@x86_64@g'     \
	  ./debian/pkg/image/postinst > /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/postinst
chmod 755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/postinst
sed -e 's/=V/2.6.37-rc2-20101117+/g'	   -e 's/=IB//g' \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'   	     \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'	     \
	    -e 's@=A@amd64@g'   \
	    -e 's@=B@x86_64@g'    \
	 ./debian/pkg/image/config > /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/config
chmod 755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/config
sed -e 's/=V/2.6.37-rc2-20101117+/g'	   -e 's/=IB//g' \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'  	     \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'	     \
	    -e 's/=MD//g'				     \
	    -e 's@=MK@@g' -e 's@=A@amd64@g'   \
	    -e 's@=M@@g'    -e 's/=OF//g'    \
	    -e 's/=S//g' -e 's@=B@x86_64@g'     \
	 ./debian/pkg/image/postrm > /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/postrm
chmod 755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/postrm
sed -e 's/=V/2.6.37-rc2-20101117+/g'	   -e 's/=IB//g'	   \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'  	     \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'	     \
	    -e 's/=MD//g'				     \
	    -e 's@=MK@@g' -e 's@=A@amd64@g'   \
	    -e 's@=M@@g'    -e 's/=OF//g'    \
	    -e 's/=S//g' -e 's@=B@x86_64@g'     \
	 ./debian/pkg/image/preinst > /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/preinst
chmod 755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/preinst
sed -e 's/=V/2.6.37-rc2-20101117+/g'    -e 's/=IB//g'    \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'  	     \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'	     \
	    -e 's/=MD//g'				     \
	    -e 's@=MK@@g' -e 's@=A@amd64@g'   \
	    -e 's@=M@@g'    -e 's/=OF//g'    \
	    -e 's/=S//g' -e 's@=B@x86_64@g'     \
	 ./debian/pkg/image/prerm > /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/prerm
chmod 755 /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/prerm
po2debconf debian/templates.in > debian/templates.l10n
sed -e 's/=V/2.6.37-rc2-20101117/g'    -e 's/=IB//g'    \
	    -e 's/=ST/linux/g'  -e 's/=R//g' \
            -e 's/=KPV/12.033/g'                       \
	    -e 's/=K/vmlinuz/g'           \
	    -e 's@=MK@@g' -e 's@=A@amd64@g'   \
	    -e 's/=I/YES/g'     -e 's,=D,/boot,g'        \
	    -e 's/=MD//g'                                \
	    -e 's@=M@@g'    -e 's/=OF//g'    \
	    -e 's/=S//g' -e 's@=B@x86_64@g'     \
	 ./debian/templates.l10n   > ./debian/templates.master
install -p    -o root -g root  -m  644 ./debian/templates.master /root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/DEBIAN/templates
dpkg-gencontrol -DArchitecture=amd64 -isp	     \
			-plinux-image-2.6.37-rc2-20101117+ -P/root/linux-2.6/debian/linux-image-2.6.37-rc2-20101117+/
dpkg-gencontrol: erreur: le paquet linux-image-2.6.37-rc2-20101117+ n'est pas dans le fichier de contrôle
make[2]: *** [debian/stamp/binary/linux-image-2.6.37-rc2-20101117+] Erreur 255
make[2]: quittant le répertoire « /root/linux-2.6 »
make[1]: *** [debian/stamp/binary/pre-linux-image-2.6.37-rc2-20101117+] Erreur 2
make[1]: quittant le répertoire « /root/linux-2.6 »
make: *** [kernel-image] Erreur 2

reuh …

@Emralegna : je pense que le copié/collé engendre des problèmes d’encodage un truc du genre … c’est pour ça que j’ai viré le code du patch du premier post pour y joindre le fichier autogroup.patch.txt

@Cyrion : http://lmgtfy.com/?q=dpkg-gencontrol%3A+erreur%3A+le+paquet+linux-image+n%27est+pas+dans+le+fichier+de+contr%C3%B4le
Tu tombes ici probleme-de-compilation-du-noyau-t17369.html

En bref, installe kernel-package

@+…

@i M@N : ce paquet est bien installé…
kernel-package:
Installé : 12.033
Candidat : 12.033
Dans le doute j’ai tout recommencé depuis le départ, mais ça donne exactement la même chose…

@ iM@N : ok ça j’ai compris. Mais est-ce que le choix du kernel est fait pour la bonne config de manière automatique ? (32 bits, 64 bits, amd64…)
Je ne suis pas encore familier avec les téléchargements à partir de git. Ca ne veut pas dire que je vais faire la manip, en tant que noob j’attend un peu, mais j’aimerais bien savoir comment ça marche.
++

i M@N : Il y a-t-il un moyen d’automatiser le rajout de la date de compilation dans cette commande ?

Pour se construire un petit script d’automatisation de la construction du kernel ça pourrait être plus pratique.

Merci.

Merci. :slightly_smiling:

Salut,

[quote=“i M@N”]Hello.
@Slystone : c’est la 2.6.37-rc2
[/quote]
Pas tout à fait, c’est la 2.6.37-rc2-git(x) hier la 4, aujourd’hui la 5 en date du 19/XI

J’ai une question… Qu’as-tu répondu aux questions de

@Cyrion : bah écoute je sais pas …

[quote=“lol”]J’ai une question… Qu’as-tu répondu aux questions de

en fait j’ai repris la config du 2.6.32-5 et j’ai répondu y (&& yes “” | make localmodconfig). Faut que je modifie mon premier post, c’est pas clair j’ai fait un copié/collé à l’arrache de mon .bash_history et j’avais tatonné pas mal.
En fait c’est plus comme ça que j’ai fait :

sudo aptitude install git-core libncurses5 libncurses5-dev kernel-package fakeroot build-essential git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6 cd linux-2.6 && patch -p1 < ../autogroup.patch cp /boot/config-`uname -r` .config && yes "" | make localmodconfig && yes "" | make oldconfig make menuconfig # set CONFIG_SCHED_AUTOGROUP=y in ~/linux-2.6/.config make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-`date +%Y%m%d` kernel-image kernel-headers cat /etc/initramfs-tools/modules echo vesafb | sudo tee -a /etc/initramfs-tools/modules echo fbcon | sudo tee -a /etc/initramfs-tools/modules cat /etc/initramfs-tools/modules cd sudo dpkg -i linux-*.deb

Par contre j’essaye sur le 2.6.36 et ça fonctionne pas, j’arrive pas à appliquer le patch on dirait qu’il manque plein de fichiers dans linux-2.6.36/drivers/tty par rapport au 2.6.37-rc2 (aussi bien depuis le git qu’avec les sources de kernel.org) :

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.36.y.git linux-2.6.36 #wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2 #tar -xvf linux-2.6.36.tar.bz2 cd linux-2.6.36 patch -p1 < ../autogroup.patch

[quote]iman@debian:~/linux-2.6.36$ patch -p1 < …/autogroup.patch
patching file include/linux/sched.h
Hunk #1 succeeded at 506 (offset -3 lines).
Hunk #2 succeeded at 575 (offset -3 lines).
Hunk #3 succeeded at 1905 (offset -31 lines).
patching file kernel/sched.c
Hunk #2 succeeded at 613 (offset 7 lines).
Hunk #3 FAILED at 2010.
Hunk #4 succeeded at 7753 (offset -230 lines).
Hunk #5 succeeded at 8283 (offset -230 lines).
Hunk #6 succeeded at 8308 (offset -230 lines).
1 out of 6 hunks FAILED – saving rejects to file kernel/sched.c.rej
patching file kernel/fork.c
Hunk #1 succeeded at 173 (offset -1 lines).
Hunk #2 succeeded at 902 (offset -4 lines).
patching file drivers/tty/tty_io.c
Hunk #1 FAILED at 3160.
1 out of 1 hunk FAILED – saving rejects to file drivers/tty/tty_io.c.rej
patching file kernel/sched_autogroup.h
patching file kernel/sched_autogroup.c
patching file kernel/sysctl.c
Hunk #1 succeeded at 384 (offset 2 lines).
patching file init/Kconfig
Hunk #1 succeeded at 652 with fuzz 2 (offset -76 lines).
patching file Documentation/kernel-parameters.txt
Hunk #1 succeeded at 1610 (offset -12 lines).
[/quote]

Enfin pour être tout à fait complet si j’arrive à faire tourner le kernel compilé 2.6.37-rc2 sur ma tour P4, sur le netbook MSi Wind ça ne fonctionne pas ou assez mal puisqu’il y a une régression avec ce kernel au niveau du driver graphique i915 intel et GDM se lance aléatoirement : c’est soit GDM soit écran noir.
Par ailleurs il semble manquer certains modules comme pour le son (logique puisque c’est du RC).

La dépêche sur linuxfr.org : http://linuxfr.org/2010/11/18/27604.html

EDiT : haha! il suffit que je cherche un peu plus et je trouve le patch pour le 2.6.36 : http://patchwork.kernel.org/patch/337311/
Je le joins à ce post (autogroup-2.6.36.patch.txt) et j’uploade ici : http://imanweb.free.fr/uploaded/autogroup-2.6.36.patch
Et donc la procédure devient :

##git/tar ... c'est vous qui voyez! #git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.36.y.git linux-2.6.36 #wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2 #tar -xvf linux-2.6.36.tar.bz2 cd linux-2.6.36 patch -p1 < ../autogroup-2.6.36.patch cp /boot/config-`uname -r` .config && yes "" | make localmodconfig && yes "" | make oldconfig make menuconfig # set CONFIG_SCHED_AUTOGROUP=y in ~/linux-2.6.36/.config make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-`date +%Y%m%d` kernel-image kernel-headers cat /etc/initramfs-tools/modules echo vesafb | sudo tee -a /etc/initramfs-tools/modules echo fbcon | sudo tee -a /etc/initramfs-tools/modules cat /etc/initramfs-tools/modules cd sudo dpkg -i linux-*.deb

@+…
autogroup-2.6.36.patch.txt (12.4 KB)

Cool, merci des infos.
Pour ma part j’ai envoyé “entrée” à chaque question. Je pense que ça sélectionne le choix par défaut.
Le noyau patché-compilé fonctionne bien chez moi. Je ne vois évidemment aucune différence…

Mais c’est toujours sympa de compiler.

Et j’ai découvert make localmodconfig qui est bien pratique et permet de créer un noyau assez léger. Elle est nouvelle cette commande, non ?

J’en ai profité pour me faire un linux-kbuild-2.6.37 au passage.

Je mettrais bien tout ça sur le wiki, mais j’ai un peu la flemme de lire tout ce qui concerne le patch pour VRAIMENT comprendre. Encore qu’il n’est pas bien long ce patch…

reuh …

Oui, équivalent au yes “” | make localmodconfig, perso taper entrée pendant 5 minutes ça me lasse! XD

Pour moi Firefox, Nautilus sont plus réactifs.

Oui c’est nouveau depuis le 2.6.32.

Tu peux expliquer ce que tu as fait pour le compiler stp?
Et d’abord il sert à quoi exactement le linux-kbuild?

@+…

Le linux-kbuild est un paquet d’une centaine de ko nécessaire à l’installation des kernel-headers (linux-headers-2.6.36-trunk-686 par exemple).

Sans ce kbuild, impossible d’installer les headers donc impossible de compiler sur le noyau fraichement crée/installé ou d’installer les drivers propriétaires.

Pour créer un kbuild -> http://www.isalo.org/wiki.debian-fr/index.php/Compiler_linux-kbuild

Merci Berillions! :006

make localmodconfig depuis le 2.6.32… :108
nouveau… :mrgreen: J’ai raté des épisodes… :arrow_right: