Comment le noyau Linux est-il testé?

comment les développeurs du noyau Linux testent-ils leur code localement et une fois qu'ils l'ont engagé? Utilisent-ils une sorte de test d'unité, l'automatisation de la compilation? des plans de test?

228
demandé sur Ezequiel Garcia 2010-07-05 09:15:41

12 réponses

le noyau linux met fortement l'accent sur les tests communautaires.

en général, tout développeur teste son propre code avant de le soumettre, et très souvent il utilise une version de développement du noyau de Linus, ou l'une des autres arborescences unstable/development pour un projet pertinent à son travail. Cela signifie qu'ils testent souvent à la fois leurs changements et ceux des autres.

il n'y a généralement pas beaucoup de test formel plans, mais des tests supplémentaires peuvent être demandés avant de fusionner les caractéristiques dans les arbres en amont.

comme Dean l'a souligné, il y a aussi des tests automatisés, le linux test project et le kernel autotest ( good overview ).

les développeurs vont souvent aussi écrire des tests automatisés destinés à tester leur changement, mais je ne suis pas sûr qu'il y ait un (souvent utilisé) mécanisme de collecte centralisée ces adhoc tests.

cela dépend beaucoup de la zone du noyau qui est changée bien sûr - le test que vous feriez pour un nouveau pilote réseau est très différent du test que vous feriez en remplaçant l'algorithme de programmation du noyau.

69
répondu JosephH 2014-11-05 11:27:38

naturellement, le noyau lui-même et ses parties sont testés avant la publication, mais ces tests ne couvrent que les fonctionnalités de base. Il existe quelques systèmes de test qui effectuent des tests sur le noyau Linux:

Linux Projet de Test (LTP) offre des suites de test pour la communauté open source qui permettent de valider la fiabilité et la stabilité de Linux. La suite de tests LTP contient une collection d'outils pour tester le noyau Linux et ses fonctionnalités. https://github.com/linux-test-project/ltp

Autotest - un cadre pour des tests automatisés. Il est conçu principalement pour tester le noyau Linux, bien qu'il soit utile à de nombreuses autres fins telles que la qualification du nouveau matériel, les tests de virtualisation, et d'autres tests de programme d'espace utilisateur général sous plates-formes Linux. C'est un projet open-source sous GPL et est utilisé et développé par un certain nombre d'organisations, y compris Google, IBM, Red Hat, et bien d'autres. http://autotest.github.io /

il y a aussi des systèmes de certification développés par certaines grandes entreprises de distribution GNU/Linux. Ces systèmes vérifient généralement la compatibilité des distributions GNU/Linux complètes avec le matériel. Il existe des systèmes de certification développés par Novell, Red Hat, Oracle, Canonical, Google .

il existe également des systèmes pour analyse du noyau Linux:

Kmemleak est un détecteur de fuites de mémoire inclus dans le noyau Linux. Il fournit un moyen de détecter d'éventuelles fuites de mémoire du noyau d'une manière similaire à un collecteur de déchets de traçage avec la différence que les objets orphelins ne sont pas libérés mais seulement signalés via /sys/kernel/debug/kmemleak.

Kmemcheck piège chaque lecture et écriture à la mémoire qui a été attribuée dynamiquement (i.e. avec kmalloc()). Si une adresse mémoire n'a pas encore été écrite, un message est imprimé dans le journal du noyau. Fait également partie du noyau Linux

Fault Injection Framework (inclus dans le noyau Linux) permet d'introduire des erreurs et des exceptions dans la logique d'une application pour obtenir une couverture plus élevée et une plus grande tolérance de défauts du système.

63
répondu Karen Tsirunyan 2015-02-25 19:06:04

comment les développeurs du noyau Linux testent-ils leur code localement et une fois qu'ils l'ont engagé?

utilisent-ils une sorte de test d'unité, l'automatisation de la compilation?

Dans le sens classique de mots, pas de.

E. G. Ingo Molnar exécute la charge de travail suivante:: 1. construire un nouveau noyau avec un ensemble d'options de configuration 2. démarrage en elle 3. goto 1

Chaque échec, échec de démarrage, L'avertissement de bogue ou d'exécution est traité. 24/7. Multipliez par plusieurs boîtes, et on peut découvrir pas mal de problèmes.

plans d'essai?

Pas de.

il peut y avoir un malentendu sur le fait qu'il y a une installation centrale d'essai, il n'y en a pas. Chacun fait ce qu'il veut.

51
répondu adobriyan 2010-07-05 06:59:56

ce n'est pas très facile d'automatiser les tests du noyau. La plupart des développeurs Linux font les tests eux-mêmes, un peu comme adobriyan l'a mentionné.

cependant, il y a quelques choses qui aident à déboguer le noyau Linux:

  • kexec: un appel système qui vous permet de mettre un autre noyau en mémoire et de redémarrer sans retourner au BIOS, et s'il échoue, redémarrez.
  • dmesg: certainement l'endroit pour chercher des informations sur ce qui s'est passé pendant le démarrage du noyau et si cela fonctionne/ne fonctionne pas.
  • Instrumentation du noyau: en plus de printk (et une option appelée "CONFIG_PRINTK_TIME" qui vous permet de voir (avec une précision de microseconde) quand le noyau affiche quoi), la configuration du noyau vous permet d'activer de nombreux traceurs qui leur permettent de déboguer ce qui se passe.

alors, les développeurs ont généralement d'autres revues de leurs patches. Une fois que les correctifs sont passés en revue localement et ne semblent pas interférer avec quoi que ce soit d'autre, et que les correctifs sont testés pour fonctionner avec le dernier noyau de Linus sans casser quoi que ce soit, les correctifs sont poussés en amont.

Edit: Voici une belle vidéo détaillant le processus qu'un patch passe avant d'être intégré dans le noyau.

13
répondu Vanwaril 2012-04-19 20:15:24

Dans l'arborescence des outils

Un bon moyen de trouver des outils de test dans le noyau est de:

In v4.0, ce qui m'amène à:

Noyau CI

https://kernelci.org / est un projet qui vise à rendre les tests du noyau plus automatisés et visibles.

il semble ne faire que les tests de construction et de démarrage (TODO comment tester automatiquement que boot worked Source devrait être à https://github.com/kernelci / ).

Linaro semble être le principal responsable du projet, avec des contributions de beaucoup de grandes entreprises: https://kernelci.org/sponsors /

Linaro De Lave

http://www.linaro.org/initiatives/lava / ressemble à un système de CI avec un accent sur la carte de développement bringup et le noyau Linux.

ARM LISA

https://github.com/ARM-software/lisa

Je ne suis pas sûr de ce qu'il fait en détail, mais il est par ARM et Apache autorisé, donc probablement la peine d'un coup d'oeil.

Démo: https://www.youtube.com/watch?v=yXZzzUEngiU

Étape débogueurs

pas vraiment de test unitaire, mais peut aider une fois que vos tests commencent à échouer:

10

en plus des points ci-dessus / ci-dessous, qui mettent l'accent sur le test de fonctionnalité, le test de certification du matériel et le test de performance du noyau Linux.

beaucoup d'essais se passent dans la réalité à travers, en fait des scripts, des outils d'analyse de code statique, revues de code, etc. ce qui est très efficace pour détecter les bogues qui, autrement, briseraient quelque chose dans l'application.

Sparse – un outil open-source conçu pour trouver des défauts dans le noyau Linux.

Coccinelle est un autre programme fait moteur de correspondance et de transformation qui fournit le langage SmPL (Semantic Patch Language) pour spécifier les correspondances et les transformations désirées dans le code C.

checkpatch.pl et d'Autres scripts - les problèmes de style de codage peuvent être trouvés dans le fichier Documentation/CodingStyle dans l'arbre des sources du noyau. La chose importante à retenir en le lisant, ce n'est pas que ce style soit en quelque sorte meilleur que n'importe quel autre style, juste qu'il soit cohérent. cela permet aux développeurs de trouver et de corriger facilement les problèmes de style de codage, le script scripts/checkpatch.pl dans l'arbre des sources du noyau a été développé. Ce script peut facilement pointer des problèmes, et devrait toujours être exécuté par un développeur sur leurs modifications, au lieu de faire perdre leur temps à un examinateur en pointant des problèmes plus tard.

6
répondu askb 2014-11-05 13:59:02

il y a aussi:

MMTests qui est une collection de repères et de scripts pour analyser les résultats

https://github.com/gormanm/mmtests

Trinité qui est appel système Linux fuzz testeur

http://codemonkey.org.uk/projects/trinity /

aussi le LTP pages à la sourceforge sont tout à fait périmés et le projet a déménagé à GitHub https://github.com/linux-test-project/ltp

3
répondu metan 2014-02-13 14:34:59

j'imagine qu'ils utilisent la virtualisation pour faire des tests rapides, quelque chose comme QEMU, VirtualBox ou Xen, et certains scripts pour effectuer des configurations et des tests automatisés.

test automatisé est probablement fait en essayant soit beaucoup de configurations aléatoires ou quelques unes spécifiques (si elles travaillent avec un problème spécifique). Linux a beaucoup d'outils de bas niveau (comme dmesg) pour surveiller et consigner les données de débogage du noyau, donc j'imagine que c'est aussi bien utilisé.

2
répondu emcee 2010-07-05 07:05:02

autant que je sache, il y a un outil automatique de vérification de régression de performance(nommé lkp/0 jour) fonctionnant/financé par Intel, il va tester chaque patch valide envoyé à la liste de diffusion et vérifier les scores changés à partir de microbenchmarks différents tels que hackbench, fio, unixbench, netperf, etc, une fois qu'il y a une régression/amélioration de performance, un rapport correspondant sera envoyé directement à l'auteur du patch et les mainteneurs liés au Cc.

1
répondu Yu Chen 2017-09-14 08:46:22

LTP et Memtests sont généralement des outils préférés.

0
répondu Pradeep Goswami 2015-08-31 12:39:59

adobriyan a mentionné la boucle D'Ingo de test de construction de configuration aléatoire. C'est à peu près maintenant couvert par le 0-day test bot (alias kbuild test bot). Un bel article à propos de l'infrastructure est présenté ici: Noyau/boot test

l'idée derrière cette configuration est de notifier les développeurs dès que possible afin qu'ils puissent rectifier les erreurs assez rapidement. (avant que les patches le fassent dans L'arbre de Linus dans certains cas comme l'infrastructure kbuild aussi essais par rapport aux arbres du sous-système de maintenance)

0
répondu krisharav 2016-02-02 19:51:27

j'avais fait la compilation du noyau linux et fait quelques Modifications pour android(Marshmallow et Nougat) dans lequel j'utilise la version 3 de linux. Je l'ai compilé dans le système linux, déboguer les erreurs manuellement, puis lancer son fichier image de démarrage dans Android et vérifier si elle allait dans Boucle-trou ou non. S'il fonctionne parfaitement, cela signifie qu'il est parfaitement compilé selon les exigences du système.

Pour MotoG la Compilation d'un noyau

NOTE: - le noyau Linux va changer selon les exigences qui dépendent du matériel du système

0
répondu Vineet Jain 2017-09-02 15:53:51