Maintenant, je rencontre un problème concernant Linux NMI Watchdog. Je veux utiliser Linux NMI watchdog pour détecter et récupérer le blocage du système d'exploitation. J'ajoute donc "nmi_watchdog = 1" à grub.cfg. Ensuite, vérifiez le/proc/interruption, NMI ont été déclenchés par seconde. Mais après avoir chargé un module avec un blocage (verrouillage à double acquisition), le système a été bloqué totalement, et rien ne se passe (jamais de panique!). On dirait que le chien de garde nmi n'a pas fonctionné!
Ensuite, j'ai lu la Documantation/nmi_watchdog.txt, elle dit:
Sachez que lors de l'utilisation de l'APIC local, la fréquence de NMI interruptions qu'il génère, dépend de la charge du système. L'APIC local NMI watchdog, manquant d'une meilleure source) , utilise l'événement "cycles unhalted".
Qu'est-ce que l'événement "cycles unhalted"?
Il a ajouté
mais si votre système se verrouille sur autre chose que l'instruction du processeur "hlt", le chien de garde se déclenchera très tôt car l'événement "cycles non goudronnés" se produira à chaque tick d'horloge ... S'il se bloque sur "hlt", alors vous êtes absent de chance - l'événement ne se produira pas du tout et le chien de garde ne sera pas déclencher.
Il semble que le chien de garde ne se déclenche pas si le processeur exécute l'instruction "hlt", alors je recherche "hlt" dans " Intel 64 et IA-32 Architectures Software Developer's Manual, Volumn 2A ", il décrit comme suit:
Arrête l'exécution des instructions et place le processeur dans un état HALT. Une interruption activée (y compris NMI et SMI), une exception de débogage, le signal BINIT #, le signal INIT # ou le signal RESET # --- resume exécution.
Alors j'ai perdu ...
Ma question est:
Mon système d'exploitation est Ubuntn 10.04 LTS, Linux-2.6.32.21, CPU Pentium 4 Dual-core 3,20 GHz.
Je n'ai pas lu tout le code source sur le chien de garde nmi (pas de temps), si je ne pouvais pas comprendre comment fonctionne le chien de garde nmi, je veux utiliser interruption du compteur de surveillance des performances et interruption inter-processeur (fournie par APIC) pour envoyer NMI au lieu du chien de garde nmi).
Quelqu'un pourrait-il m'aider? Merci.
La réponse dépend de votre matériel.
Les interruptions non masquables (NMI) peuvent être déclenchées de 2 manières: 1) lorsque le noyau atteint un état d'arrêt qui ne peut pas être interrompu par une autre méthode, et 2) par le matériel - en utilisant un NMI = bouton.
À l'avant de certains serveurs Dell, par exemple, vous verrez un petit cercle avec une ligne en zigzag à l'intérieur. Il s'agit du symbole NMI. À proximité il y a un trou. Insérez une épingle pour déclencher l'interruption. Si votre noyau est conçu pour le prendre en charge, cela videra une trace de panique du noyau vers la console, puis redémarrez le système.
Cela peut arriver très rapidement. Donc, si vous n'avez pas de console connectée pour enregistrer la sortie dans un fichier, cela pourrait ressembler uniquement à un redémarrage.
Comme je le sais, nmi_watchdog ne se déclencherait que pour blocage non interruptible . J'ai trouvé un exemple de code par google: http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html
Si votre blocage n'est pas non interruptible, vous pouvez essayer d'activer sysRq pour déclencher une trace (Alt-printscreen-t) ou un crash (Alt-printscreen-c) pour obtenir plus d'informations.