Jump to content

Archived

This topic is now archived and is closed to further replies.

HPact

To make or not to make?

Recommended Posts

Bonjour à tous!

Ma dernière expérience poussée sous Linux remonte aux slackwares des années 95/96. A cette époque, compiler le noyau pour le faire coller au plus prés de notre matériel et de nos besoins en choisissant les morceaux qui seront intégrés au noyau était une bonne chose, si ce n'est une étape obligatoire.

A l'heure actuelle, les distrib fournissent les noyaux qui vont bien, qui marchent partout. Ok, c'est nickel pour tout le monde.

Seulement voilà, je me demandais si finalement, ça n'avait pas toujours du sens de faire sa propre compil du noyau (et pourquoi pas des applis).

Je vous expose ma vision de la chose et donc le pourquoi de cette question:

Les processeurs x86 de maintenant et les processeurs x86 d'il y a 5 ans ont une base commune, le x86. N'importe quelle application compilée pour un processeur d'il y a 5 ans fonctionnera sur le processeur d'aujourd'hui (à environnement logiciel et libs identiques, bien sûr). Ce qui pousse à compiler le noyau pour le cas le plus général et à ne pas utiliser les nouvelles instructions potentiellement disponibles sur les procs les plus récents, ou à ne pas pousser l'optimisation du code généré par le compilo (pipeline processeur différent implique potentiellement une organisation des instructions différentes).

On perd alors potentiellement de la puissance, rapidité d'exécution.

En outre, pour telle ou telle orientation de la machine sur laquelle on installe GNU/Linux, certaines parties du noyau peuvent être inutiles (gestion des ports séries/parallèles par exemple, enfin, je ne sais pas si c'est dans le noyau).

Bref, recompiler en choisissant les morceaux qui seront intégrés dans le noyau permettrait aussi d'avoir un noyau plus léger.

Qu'en est-il à l'heure actuelle?

Ma vision est-elle erronée? Le make est-il devenu une hérésie?

Merci d'avance de vos retours et avis.

Link to post
Share on other sites

Pour optimiser un peu, je recompile le kernel de mes serveurs Fedora uniquement pour le matériel utilisé.

Ainsi, il diminue fortement en taille et utilise moins de RAM...

Je ne sais pas si ça influe énormément, mais j'aime bien optimiser :francais:

Link to post
Share on other sites

Euh, quelle que soit la distrib Linux, on peut recompiler son noyau hein...

Et perso, je le fais sur chaque machine sur laquelle j'installe, que ce soit Ubuntu, Debian, Fedora ou Gentoo.

Après, j'aime bien optimiser à mort aussi mes applis, donc j'utilise Gentoo, avec un fichiers package.use assez énorme car je choisis mes USE pour chaque soft installé...

Mais je dois être un peu maboule :transpi:

Link to post
Share on other sites

Ça me semble avoir tout autant de sens qu'il y a vingt ans. A ma connaissance, aucune distribution binary ne propose de noyau compilé spécifiquement pour chaque génération de processeur proposée dans les options de configuration. En tout cas je le fais systématiquement.

Link to post
Share on other sites

Ça a toujours le même sens. Seulement, la vitesse des processeurs d'aujourd'hui fait que la différence entre un noyal standard et un noyal optimisé n'est pas toujours visible, selon les applications qu'on utilise derrière. Pour le serveur de ma team, recompiler le noyal m'a surtout permis de modifier certaines options, comme le timer à 1000Hz (plutôt pratique pour les jeux). Intégrer directement certains pilotes (voire uniquement ceux qui sont utiles) peut aussi réduire la conso RAM. Très pratique.

Sur une machine de bureau actuel à usage général, c'est par contre moins utile. Mais si on sort de l'usage général, là tout de suite, ça devient bien plus intéressant.

Link to post
Share on other sites

Bonjour à tous!

Ma dernière expérience poussée sous Linux remonte aux slackwares des années 95/96. A cette époque, compiler le noyau pour le faire coller au plus prés de notre matériel et de nos besoins en choisissant les morceaux qui seront intégrés au noyau était une bonne chose, si ce n'est une étape obligatoire.

A l'heure actuelle, les distrib fournissent les noyaux qui vont bien, qui marchent partout. Ok, c'est nickel pour tout le monde.

Seulement voilà, je me demandais si finalement, ça n'avait pas toujours du sens de faire sa propre compil du noyau (et pourquoi pas des applis).

Je vous expose ma vision de la chose et donc le pourquoi de cette question:

Les processeurs x86 de maintenant et les processeurs x86 d'il y a 5 ans ont une base commune, le x86. N'importe quelle application compilée pour un processeur d'il y a 5 ans fonctionnera sur le processeur d'aujourd'hui (à environnement logiciel et libs identiques, bien sûr). Ce qui pousse à compiler le noyau pour le cas le plus général et à ne pas utiliser les nouvelles instructions potentiellement disponibles sur les procs les plus récents, ou à ne pas pousser l'optimisation du code généré par le compilo (pipeline processeur différent implique potentiellement une organisation des instructions différentes).

On perd alors potentiellement de la puissance, rapidité d'exécution.

En outre, pour telle ou telle orientation de la machine sur laquelle on installe GNU/Linux, certaines parties du noyau peuvent être inutiles (gestion des ports séries/parallèles par exemple, enfin, je ne sais pas si c'est dans le noyau).

Bref, recompiler en choisissant les morceaux qui seront intégrés dans le noyau permettrait aussi d'avoir un noyau plus léger.

Qu'en est-il à l'heure actuelle?

Ma vision est-elle erronée? Le make est-il devenu une hérésie?

Merci d'avance de vos retours et avis.

Je dirais qu'il n'y a plus de grosses raisons de compiler son noyau : les parties non-essentielles sont en grande partie modulaires et celles-ci sont chargées automatiquement par udev.

L'intérêt, c'est si tu dois utiliser des options spécialisées, si tu veux accélérer le démarrage avec les modules en dur et dans autodétéction de ceux-ci et sans initrd.

Link to post
Share on other sites

BarthVonRies, je pense en effet que tu est un peu maboule !

les USE sont fait pour simplifier la compilation ! ( et choisir tous les USE flags dans le make.conf est déjà suffisament long selon moi )

Sinon, pour en revenir au sujet, je pense que la compilation à la main a peu d'intérêt aujourd'hui étant donné les optimisation faites sur le noyau par les différentes distrib.

Un noyau compilé à la main ne prendra pas beaucoup moins de place en mémoire étant donné que les modules nécessaires uniquement serons chargé et franchement perdre un demi heure pour compilé un noyau sur un ordi spécifique pour gagné quelque 10ème de secondes, je trouve ça un peu chiant quand même.

Après, on peut être malade et tourner sur une gentoo et utiliser un noyau compilé main (comme moi) mais il faut être vraiment cinglé !!

Link to post
Share on other sites

Euh, quelle que soit la distrib Linux, on peut recompiler son noyau hein...

Et perso, je le fais sur chaque machine sur laquelle j'installe, que ce soit Ubuntu, Debian, Fedora ou Gentoo.

Après, j'aime bien optimiser à mort aussi mes applis, donc j'utilise Gentoo, avec un fichiers package.use assez énorme car je choisis mes USE pour chaque soft installé...

Mais je dois être un peu maboule :transpi:

moui mais non.

Là le monsieur, il dit " utiliser les instructions processeurs qui vont bien ".

Et si t'as pas le /etc/make.conf de FreeBSD et Gentoo, c'est vraiment la merde, en gros, soit tu passes manuellement les commandes ( en particulier le -march=native ) , soit t'es obligé de toucher aux MAKEFILE . Pour simplifier.

Par contre , inclure en dur les modules ou sortir des modules potentiellement inutilisés peut être une bonne chose. Mais attention aux mises à jour , hein...

En gros 2 choses :

- La première c'est que tu n'obtiendras pas de gains gigantesques à partir du moment où tu es en noyau SMP sur un processeur de + de 2 cores.

- La seconde, c'est que chaque fois que le processeur fou rien, comme par exemple lorsqu'il attend qu'une instruction ait basculé d'un cache vers la RAM ou autre, il peut se mettre en repos. Ce qui fait qu'une machine ultraoptimisée autour d'un ensemble d'instructions données n'améliorera pas forcément son rendement ( Energie consommée/temps d'exécution ).

Par contre 2 choses : Si t'as un processeur qui possède le jeu d'instructions amd-64 ( ou sa version Intel EM64T ), tu as tout intérêt à utiliser une distrib 64 bits.

Rien que le doublement du nombre d'entrées en 64 bits vaut la peine, et largement.

- Un logiciel bien construit, comme ceux du kernel ou Userland FreeBSD ou NetBSD, n'a pas de gains en compilant avec les instructions AVX, parce que les boucles C de ces logiciels sont bien pensées dès le départ pour éviter d'accumuler les instructions en tampon. Et ça, ça s'apprend.

Link to post
Share on other sites

Effectivement, ma question portait sur les gains potentiels et éventuellement la minimisation des trous de sécurité: moins de choses dans le noyau = moins de surface attaquable et instructions adaptées à mon CPU donc noyau plus optimisé (sur le papier).

De base, je prends une distrib 64bit.

Donc, supprimer des modules dans le noyau car ils ne seront jamais utilisés, est-ce une vraie fausse bonne idée?

A contrario, y inclure des nouveaux modules? Je pense par exemple à du ZFS sur Ubuntu (si c'est possible)...

Link to post
Share on other sites

A mon avis t'auras plus de gain en mettant une Gentoo et en recompilant des gros softs (genre OpenOffice, Gimp ...) qu'en enlevant 2 modules du noyau pour les mettre en statique.

De plus sur une machine Desktop, quand tu compiles tout en statique, au moindre changement de matos, il faut que tu te galères à retrouver le driver qui va bien puis le recompiler. Pour être passer par là, on s'en lasse très vite. T'en arrives à lancer Ubuntu pour trouver le driver de ton périphérique ... et au bout d'un moment, tu te dis : bon allez, tout en modulaire ça a aussi des avantages.

Link to post
Share on other sites

Par exemple, le WiFi, il n'y en aura pas, quelle utilité de le laisser dans le noyau?

Mais effectivement, si c'est chargé à la demande...

Pour l'instant, ce n'est pas ma machine de bureau qui serait sous GNU/Linux, mais mon NAS.

Le matos ne va donc pas changer régulièrement d'une part, mais d'autre part, le gain ne sera certainement pas très important, sauf peut-être à intégrer le ZFS, si c'est intégrable au noyau.

Link to post
Share on other sites

Je crois que ZFS à une licence incompatible avec le noyau donc il n'est utilisable qu'en espace utilisateur avec FUSE.

Pour un NAS c'est très loin d'être idéal mieux vaut utiliser les systèmes de fichiers classiques comme ext4 + Linux RAID.

Vivement BtrFS mais j'ai de plus en plus l'impression qu'il va finir en Vapourware :pleure: .

Link to post
Share on other sites

Vivement BtrFS mais j'ai de plus en plus l'impression qu'il va finir en Vapourware :pleure: .

C'est un risque en effet, vu que c'est développé par Oracle, et qu'Oracle a récupéré ZFS en rachetant Sun :incline:

Sinon y'a un projet pour ZFS en natif sous Linux, mais je crois que c'est pas encore utilisable... http://zfsonlinux.org

Et là effectivement, faut compiler son noyau avec à cause de la licence incompatible avec la GPLv2.

Mais une fois qu'on a gouté à ZFS, on peut plus s'en passer :transpi:

Link to post
Share on other sites

Sinon y'a un projet pour ZFS en natif sous Linux, mais je crois que c'est pas encore utilisable... http://zfsonlinux.org

Et là effectivement, faut compiler son noyau avec à cause de la licence incompatible avec la GPLv2.

Mais une fois qu'on a gouté à ZFS, on peut plus s'en passer :transpi:

Je connaissais ce projet ZFSonLinux, mais effectivement, ce n'est pas encore tout à fait terminé/au point...

Mais sinon, ZFS n'était qu'un exemple. Est-ce qu'il y a des outils/logiciels qui y gagneraient à être intégré dans un build kernel?

Link to post
Share on other sites

J'ai un P4 2,4 Ghz, est-ce une bonne idée de compiler mon propre noyau ?

Autre chose, si je compile une fois mon noyau, est-ce que je peux le réutiliser pour les prochaines distributions que j'installerai ?

Merci :)

PS: ah oui, la diminution de taille, c'est à peu près de quel ordre ?

Link to post
Share on other sites

Llywelyn, si Linux t'intéresses, je ne peux que te conseiller de compiler ton propre noyau.

Même si ça reste juste pour faire un test, c'est très enrichissant de voir tous les trucs de dingue et les options de folie auxquelles tu as accès !

Après, c'est évidemment très difficile de tout comprendre, mais à force de compiler on en apprend pas mal sur les capacités du système (qu'est-ce qui est géré dans le noyau ou en dehors ...).

Link to post
Share on other sites

Llywelyn, si Linux t'intéresses, je ne peux que te conseiller de compiler ton propre noyau.

Même si ça reste juste pour faire un test, c'est très enrichissant de voir tous les trucs de dingue et les options de folie auxquelles tu as accès !

Après, c'est évidemment très difficile de tout comprendre, mais à force de compiler on en apprend pas mal sur les capacités du système (qu'est-ce qui est géré dans le noyau ou en dehors ...).

Euh j'utilise Linux donc on va dire qu'il m'intéresse :D

Ca peut rester de la simple pédagogie mais je cherche plutôt dans l'immédiat à gagner des perfs.

Dans ce cas il y a peu d'intérêt en pratique... même si l'aspect découverte est toujours intéressant ;)

Tout à fait, à faire donc, mais pas urgent ;)

Merci pour vos réponses !

Link to post
Share on other sites

A mon avis il vaut mieux recompiler les applications très gourmandes en temps processeur (par exemple mplayer) plutôt que le noyau. De mon expérience d'utilisation de Gentoo optimisée au delà du raisonnable et de ArchLinux (distribution binaire) la différence est difficilement perceptible.

Pour moi l'intérêt de la recompilation est de pouvoir choisir finement ce que l'on compile, le gain en performance est à mon avis très inférieur au temps perdu en recompilation.

Link to post
Share on other sites

×
×
  • Create New...