Quel est l'avantage de compiler son propre noyau Linux?


101

Quel avantage pourrais-je tirer en compilant moi-même un noyau Linux? Y a-t-il une efficacité que vous pourriez créer en le personnalisant à votre matériel?


la simple question de savoir quel est l'avantage devient vague ou sortie de son contexte très rapidement. Il serait bien mieux de demander à What are the pros and cons of compiling your own kernel? Cons = pas facile, beaucoup de situations sans valeur ajoutée. Avantages = sécurité, performance, si vous savez ce que vous faites, périphériques NAS, par exemple, utiliser Linux pour faire fonctionner du matériel et disposer de capacités graphiques et en réseau.
ron

Réponses:


73

Dans mon esprit, le seul avantage que vous obtenez réellement en compilant votre propre noyau Linux est:

Vous apprendrez à compiler votre propre noyau Linux.

Ce n'est pas quelque chose que vous devez faire pour plus de vitesse / mémoire / xxx que ce soit. C’est une chose précieuse à faire si c’est le stade où vous vous sentez dans votre développement. Si vous voulez avoir une compréhension plus profonde de ce qu'est l’ensemble de l’objet "open source", de comment et quelles sont les différentes parties du noyau, essayez-le. Si vous souhaitez simplement accélérer votre temps de démarrage de 3 secondes, alors ... à quoi ça sert ... allez acheter un SSD. Si vous êtes curieux, si vous voulez apprendre, alors compiler votre propre noyau est une excellente idée et vous en tirerez probablement beaucoup.

Cela dit, il y a des raisons spécifiques pour lesquelles il serait approprié de compiler votre propre noyau (comme plusieurs personnes l'ont souligné dans les autres réponses). Généralement, ils résultent d'un besoin spécifique que vous avez pour un résultat spécifique, par exemple:

  • J'ai besoin que le système démarre / fonctionne sur du matériel avec des ressources limitées
  • J'ai besoin de tester un correctif et de fournir des commentaires aux développeurs
  • Je dois désactiver quelque chose qui cause un conflit
  • J'ai besoin de développer le noyau Linux
  • Je dois activer le support pour mon matériel non supporté
  • J'ai besoin d'améliorer les performances de x car je respecte les limites actuelles du système (et je sais ce que je fais)

Le problème réside dans le fait de penser que la compilation de son propre noyau présente des avantages intrinsèques, alors que tout fonctionne déjà comme il se doit, et je ne pense pas que ce soit le cas. Bien que vous puissiez passer d'innombrables heures à désactiver des éléments inutiles et à peaufiner ceux qui le sont, le fait est que le noyau Linux est déjà assez bien réglé (par votre distribution) pour la plupart des situations d'utilisateurs.


25
Je dirais que si vous voulez construire votre propre noyau simplement pour l'expérience d'apprentissage, vous le ferez avec une distribution Linux basée sur les sources, comme Gentoo ou Linux From Scratch. La documentation d'installation de Gentoo stage 2 est un excellent guide pour comprendre ce que signifie construire Linux à partir du noyau.
Sandy

D'accord ... ces deux projets sont construits pour ce genre de chose.
Gabe.

Bien sûr, vous savez que vous vous contredisez dans votre réponse. Si le seul avantage de la compilation du noyau était d'apprendre à le faire, ce serait inutile: aucune valeur. Mais quelques mots plus tard, vous dites que c'est une chose précieuse ...
rozcietrzewiacz

@rozcietrzewiacz La connaissance est de la plus haute valeur. Compiler un noyau vous aide à approfondir vos connaissances. Si vous n'achetez pas cela, alors voici ceci: la connaissance, c'est le pouvoir, et les gens paient beaucoup d'argent pour l'obtenir, et l'argent est précieux dans le monde d'aujourd'hui, donc par la propriété transitive ....: P
lunchmeat317 le

Je suis d'accord, cela ne vaut que pour les connaissances acquises.
1100110

35

La plupart des utilisateurs n'ont pas besoin de compiler leur propre noyau, leur distribution leur a permis de le faire. Habituellement, les distributions incluent un ensemble de correctifs à intégrer à certaines parties du fonctionnement de la distribution, des backports de pilotes de périphériques et des correctifs de versions plus récentes, mais non publiées du noyau ou de fonctionnalités qu’ils développent avec leurs utilisateurs.

Lorsque vous compilez votre propre noyau, vous avez plusieurs options, vous pouvez compiler un noyau officiel Linus Torvalds, cela n'inclut aucun des correctifs ou personnalisations ajoutés par votre distribution (qui peut être bon ou mauvais) ou vous pouvez utilisez votre outil de reconstruction de la distribution pour construire votre propre noyau.

Les raisons pour lesquelles vous pourriez vouloir reconstruire votre noyau sont les suivantes:

  • Corriger des bugs ou ajouter une fonctionnalité spécifique à un système de production, où vous ne pouvez pas vraiment risquer de mettre à jour le noyau entier pour un correctif unique ou deux.
  • Pour essayer un pilote de périphérique particulier ou une nouvelle fonctionnalité
  • Pour étendre le noyau, travaillez dessus
  • tester certains des modules ou fonctionnalités "Alpha".

De nombreux développeurs l'utilisent pour créer également des versions personnalisées du noyau pour les systèmes intégrés ou des zones d'installation où ils ont besoin de pilotes de périphérique spéciaux ou souhaitent supprimer des fonctionnalités dont ils n'ont pas besoin.


8
+1 Les enfants de nos jours, ils ne savent même pas ce que signifie «make menuconfig» et ne doivent jamais appliquer de correctif au code réseau de leur noyau pour éviter d'être manipulés par des script kiddies. Heureusement, ces jours sont presque tous partis.
axel_c

2
vous devriez ajouter bisectpour trouver où un bogue a été introduit ...
xenoterracide

1
C'est incroyable de voir comment ce commentaire est voté alors qu'il n'a rien à voir avec la question du PO. "La plupart des utilisateurs ne ...." Allez maintenant. La question d'OP est très claire sur le fait de vouloir connaître les avantages; pas votre opinion de ce que "la plupart des utilisateurs" font ici et là.
Eric

30

En compilant le noyau vous-même, vous ne pouvez inclure que les parties relatives à votre ordinateur, ce qui le rend plus petit et potentiellement plus rapide, en particulier au démarrage. Les noyaux génériques doivent inclure un support pour autant de matériel que possible; au démarrage, ils détectent le matériel connecté à votre ordinateur et chargent les modules appropriés, mais cela prend du temps. Ils doivent également charger des modules dynamiques, au lieu de laisser le code directement dans le noyau. Il n'y a aucune raison pour que votre noyau prenne en charge 400 processeurs différents lorsqu'il n'y en a qu'un sur votre ordinateur, ou pour prendre en charge les souris Bluetooth si vous n'en avez pas, c'est tout un espace perdu que vous pouvez libérer.


15
Je suis d’accord avec la majeure partie de votre réponse, mais je serais curieux de connaître quelques faits concrets sur «considérablement plus rapidement». Je ne voudrais pas donner à un nouvel utilisateur l'impression que son ordinateur fonctionnera généralement plus rapidement avec un noyau construit à la main (d'après mon expérience avec Gentoo, ce n'est tout simplement pas vrai). Pouvez-vous quantifier les gains de vitesse de démarrage?
Sandy

2
Cette réponse était vraie il y a 15 ans, mais ce n'est pas vraiment pertinent de nos jours. De toute façon, la plupart des pilotes viennent en modules, ils ne prennent donc que de la place sur le disque, pas en mémoire. (Ou certaines distributions sont-elles toujours livrées sans initrd? Sans initrd, le noyau doit inclure tous les pilotes nécessaires au démarrage.) En ce qui concerne le démarrage, les quelques pilotes qui passent plus d'une milliseconde à essayer de détecter un matériel inexistant peuvent être désactivés avec une option de démarrage du noyau.
Gilles

1
@ Michael, s'il s'agit d'une hypothèse non vérifiée, je pense que remplacer "considérablement plus rapidement" par "potentiellement plus rapide" dans votre réponse pourrait être une bonne idée ... juste pour vous assurer que personne ne soit induit en erreur. :-)
Sandy

3
@ Sandy D'accord, car on dirait que je suis un de ces n00bs :). Fixe
Michael Mrozek

2
Je pense que "considérablement" plus rapidement est en réalité justifié par la mise en garde que nous parlons de temps de démarrage. Il faut facilement 5 à 10 secondes de plus aux noyaux de la distribution stock pour démarrer celui que j'ai démonté pour ne rechercher aucun matériel que je ne prévois pas utiliser. La vitesse d'exécution est probablement négligeable, je ne peux pas mesurer cela de manière fiable.
Caleb

24

Je ne peux pas croire que la réponse acceptée ici commence par dire "Ce n'est pas quelque chose que vous devez faire pour plus de rapidité / mémoire / xxx que ce soit."

C'est totalement faux. Je personnalise régulièrement mes noyaux de manière à supprimer le code inutile et à inclure du code améliorant les performances, principalement lié au matériel. Par exemple, j’utilise un matériel ancien et peut améliorer certains gains de performance en activant des pilotes de noyau rarement activés, tels que la prise en charge des jeux de puces HPT36x, sur certains MoBos plus anciens intégrant cette fonctionnalité.

Un autre exemple, BIG SMP sous Slackware est la valeur par défaut et sur un Dell 2800, par exemple, consomme une empreinte importante pour exécuter des tâches telles que GFSD (pas en tant que module de noyau) qui consomme également des ticks de processeur pas besoin. Il en va de même pour NFSD et les autres organisations susceptibles de plaire à toutes les mentalités, ce qui est bien si vous essayez simplement de mettre Linux sous tension et de fonctionner, mais si vous vous souciez de "speed / memory / xxx", ces choses sont importantes et fonctionnent. .

Toutes mes boîtes de production sont des noyaux personnalisés. Si je suis sur du matériel commun tel qu'un matériel de la série Dell (2800, 2850, 2900, etc.), il est simple de copier le fichier .config du noyau dans chaque boîte, de le compiler et de l'installer.


3
Je pense que le principal point de la réponse acceptée est que pour la plupart des matériels, les performances obtenues en compilant votre propre noyau ne valent pas le temps nécessaire pour apprendre à le faire (et à comprendre ce que signifient les options). C'est probablement une expérience: il serait bien de trouver des chiffres à ce sujet.
Andres Riofrio

eh bien, c’est malhonnête de ne pas énoncer cela dans la question initiale et d’accepter ensuite la réponse fondée sur les motifs que vous alléguez.
Eric

2
Eh bien, ce n’est pas de ma faute si ma réponse a été acceptée. Et bien que oui, il existe des cas où la compilation de votre noyau vous aidera à améliorer vos performances ou à fonctionner sur une machine basse consommation, mais j’ai supposé que la question initiale était posée par une personne qui n’avait pas de réponse spécifique. besoin à l’avance, et était simplement curieux au sens général des avantages de la compilation d’un noyau. Je dirais que seules les personnes ayant des besoins spécifiques en tête bénéficient des modifications du noyau. Comme ma réponse a été acceptée, je l'améliorerai pour prendre en compte les raisons les plus puissantes d'utilisation des noyaux personnalisés
gabe.

14

Voici quelques cas où la compilation de votre propre noyau vous sera bénéfique:

  • Un noyau avec le chargement de module désactivé est plus sécurisé. Cela nécessitera de sélectionner les modules dont vous savez avoir besoin et de les inclure dans le noyau, au lieu de les compiler en tant que modules.

  • Désactiver la prise en charge de / dev / kmem ou la désactiver avec l'option de compilateur appropriée est une bonne chose pour la sécurité. Je pense que la plupart des distributions le font par défaut maintenant.

  • Je préfère ne pas utiliser initrd lorsque cela est possible. Personnaliser votre noyau au matériel à partir duquel il démarre élimine l'initrd.

  • Parfois, une version ultérieure du noyau aura les fonctionnalités dont vous avez besoin, mais c'est très rare aujourd'hui. Je me souviens que lorsque j'ai commencé à utiliser Debian, il utilisait des noyaux 2.4, mais il me fallait un noyau 2.6 pour supporter udev.

  • La désactivation des protocoles / options réseau dont vous n’avez pas besoin peut accélérer vos performances TCP / IP.

  • La désactivation des options inutiles réduit l'encombrement de la mémoire du noyau, ce qui est important dans les environnements à faible RAM. Lorsque vous utilisez un système RAM de 256 Mo en tant que routeur, cela vous aide.

  • Je trouve tous les périphériques "tty" de / dev agaçants sur les systèmes où je ne me connecte généralement que via un port série ou ssh.


Tout vrai. Toutefois, la suppression du chargement des modules peut poser des problèmes au démarrage: la plupart des distributions, sinon toutes, supposent simplement que les modules devront être chargés. La dernière fois que j'ai désactivé des modules, cela a provoqué l'apparition d'une multitude de messages d'erreur lors du processus de démarrage de Red Hat.
Mei

7

Compiler votre propre noyau vous permet de participer au processus de développement du noyau, qu'il s'agisse de choses simples telles que la fourniture d'identifiants de périphérique PCI / USB pour un pilote existant pouvant faire fonctionner un nouveau périphérique pour vous, pour vous impliquer profondément dans la ruée des cœurs développement du noyau.

Il vous permet également de tester les noyaux de développement sur votre matériel et de fournir des informations en cas de régression. Cela peut être particulièrement utile pour vous et les autres si vous avez un matériel inhabituel. Si vous attendez un noyau de distribution, le filtrage des rapports de problèmes dans une nouvelle version du noyau de distribution peut prendre un certain temps.

Personnellement, j’aime aussi compiler mes propres noyaux pour n’inclure que la prise en charge du matériel dont je dispose. Lorsque vous exécutez des noyaux de distribution et que vous regardez le résultat lsmod(8), vous voyez beaucoup de modules chargés pour du matériel que vous n'avez pas. Cela peut polluer la liste de modules, / proc, / sys et vos journaux de telle sorte que lorsque vous recherchez quelque chose, il peut être caché parmi le bruit; Vous ne pouvez pas non plus être sûr à 100% que ces modules ne contribuent pas à un problème que vous essayez de diagnostiquer.


6

J'appuie la réponse de gabe. (Mon commentaire est trop long, je poste donc en tant que réponse).

À moins que vous n'ayez un objectif hautement spécialisé (par exemple, machines intégrées, profilage de sécurité strict), je ne vois aucun avantage pratique à compiler votre propre noyau, si ce n'est de voir comment cela se passe. En examinant méthodiquement les options, voir comment elles interagissent pour construire le système constitue un excellent moyen de comprendre le fonctionnement de votre système. C'est incroyable ce que vous découvrez lorsque vous essayez de supprimer des composants qui semblent n'avoir aucune utilité pour les tâches que vous essayez d'accomplir.

Soyez averti cependant - pourquoi sauter dans le terrier du lapin est sans aucun doute exaltant, il va aspirer plus de nuits et de week-ends que vous ne le pensiez possible!


3

Au travail, nous utilisons des noyaux roulés à la main pour appliquer des correctifs hors arbre tels que vserver et unionfs.

À la maison, je compile des noyaux roulés à la main afin de trouver quel commit a introduit un bogue que je rencontre. Une fois que j'ai terminé, je vais probablement m'en tenir à un noyau roulé à la main jusqu'à ce que le bogue soit corrigé dans ma distribution (Debian). À ce moment-là, je reviendrais à nouveau à leurs noyaux.


2

Ce fil est vieux et pourtant reste valable aujourd'hui comme il l'était lorsque la question a été posée!

La réponse est: vous compilez le noyau Linux de votre choix en fonction de vos besoins et exigences.

Plusieurs scénarios sont valables:

  1. Vous êtes un ingénieur et vous avez besoin que votre version satisfasse aux exigences de performance et de sécurité de votre système, et vous recompilez pour respecter et / ou dépasser les critères spécifiés.

  2. Vous êtes un utilisateur normal et possédez un ancien système que vous souhaitez conserver aussi longtemps que vous le pouvez. Vous le recompilez pour ajouter / supprimer des composants afin de conserver votre ancien système optimisé.

  3. Vous êtes un utilisateur normal disposant du matériel le plus récent et le plus rapide et disposant de suffisamment de mémoire / RAM. Pas besoin de recompiler, mais vous le pouvez quand même si vous souhaitez en savoir un peu plus sur votre système.

  4. Vous voulez simplement être comme un utilisateur quotidien de Microsoft et / ou Mac, ne recompilez pas et ne suivez que les mises à jour de votre distribution amont.

  5. Gardez les scénarios à venir :-)

Contrairement aux utilisateurs Mac / Windows, Linux propose un choix. Le choix de le prendre facilement ou d'optimiser le système à vos besoins.


1

Pour la plupart des utilisations, les noyaux génériques conviennent à pratiquement tous les matériels. De plus, ils contiennent généralement des correctifs spécifiques à la distribution. La compilation de votre propre noyau peut donc causer des problèmes.

Les raisons pour compiler votre propre noyau sont:

  • Vous utilisez une distribution basée sur les sources, il n'y a donc pas de noyau "générique"
  • Vous êtes développeur de noyau et développez le noyau
  • Vous devez personnaliser le noyau, par exemple, pour un périphérique intégré avec un disque dur très limité.
  • Certains pilotes ne sont pas compilés dans (très rare cas)
  • Vous voulez patcher le noyau ET vous savez ce que vous faites
  • Vous voulez apprendre à compiler le noyau

Si je n'utilisais pas la distribution basée sur la source, je ne compilerais pas du tout le noyau.


1

Outre les nombreux cas mentionnés ci-dessus pour la création de noyaux compilés personnalisés, vous pouvez configurer des environnements d'initialisation réseau spécialisés dans lesquels le chargement de module n'est pas réalisable et vous devez transférer des noyaux entièrement fonctionnels à des machines spécifiques pour des tâches spécifiques.


1

Je suis surpris que personne n'ait mentionné cette raison de compiler un noyau personnalisé:

parce que vous voulez utiliser un compilateur C / c ++ différent. GCC est très bon pour compiler le noyau Linux. Mais il existe de nombreux compilateurs de qualité supérieure! Les optimisations de GCC sont un peu en retard par rapport au compilateur C / C ++ d’Intel. Et Intel fournit les bibliothèques de primitives de performance et l'outil vtune, indispensables à la production d'un noyau Linux hautes performances. Vous ne pouvez aller aussi loin qu'avec GCC et G ++. Pratiquement, peu importe ce que vous faites, le résultat sera limité par le compilateur. J'utilise donc le compilateur Intel et les bibliothèques de performances. C'est un peu gros - 1,5 Go de téléchargement, mais cela donne une idée de ce que contient un bon compilateur.

Le compilateur C / C ++ d’Intel est disponible gratuitement pour une utilisation non commerciale. Mais il est plus facile de rechercher sur le site Web d’Intel la page de téléchargement du compilateur Intel c ++ sous licence non commerciale. Je n'utilise généralement pas GCC / G ++ pour quoi que ce soit. Et vous n'avez pas besoin d'être programmeur. Vous venez de définir votre environnement et de modifier deux lignes dans le fichier make pour qu'elles pointent vers le compilateur d'Intel.

Ensuite, vous pouvez obtenir une vitesse sérieuse!


-1

Si vous voulez installer Linux sur un matériel très spécifique, disons plus exotique qu'une DS , vous devrez compiler votre propre noyau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.