Ich versuche, den Jitter in der Interrupt-Latenz für verschiedene Linux-Kernel (mit RT-Patch aktiviert usw.) zu messen. Ich weiß, der beste Weg ist, ein Oszilloskop zu benutzen, indem ich einen Interrupt mit GPIO-Pin erzeuge und einen anderen GPIO-Pin in der Interrupt-Service-Routine togge, aber ich frage mich, ob es irgendwelche Linux-Kernel-Tools gibt Ich kann einen Vergleich der Zahlen machen.Gibt es Kernel-Tools, um Interrupt-Latenz mit angemessener Genauigkeit zu messen?
Antwort
Eine typische Methode wäre, eine hochpräzise Uhr (z. B. den Zykluszähler der CPU) einzurichten, um in der Zukunft eine zufällige, aber bekannte Zeit auszulösen, und im ISR die Differenz zwischen der Zeit zu messen Die Uhr wurde eingestellt, als die ISR tatsächlich erreicht wurde.
(Der "zufällige" Teil davon ist sicherzustellen, dass Sie systematisch Messungen während ruhiger oder belebter Zeiten vermeiden - zum Beispiel möchten Sie nicht, dass Ihr Timer-Interrupt gleichzeitig als Netzwerk gleichzeitig ausgelöst wird Card Interrupt, unfairer Push Ihre Latenzzahlen hoch.)
Ein Werkzeug, das dies etwas implementiert ist Cyclictest, obwohl es Zeit in einem Kernel-Thread anstelle der ISR selbst zu messen scheint, die Ihre gemessenen Latenzzahlen etwas nach oben drücken wird.
Ich denke an einen Signalgenerator, um den Interrupt auf einem GPIO zu generieren, so dass ich den Jitter in den Interrupt-Antwortzeiten erhalten kann, indem ich den Interrupt mehrmals erzeuge und die IRQ-Zeit mehrfach vermesse. Die PMCR- und Cycle-Zählregister für den ARM-Cortex werden es für mich tun. Jetzt ist der Logging-Teil das, was untersucht werden muss. – Nuetrino
@Nuetrino Das Problem mit * davidg * ist, dass Sie immer mit einer Systemuhr * synchronisiert * werden. Eine externe Quelle ist besser. Außerdem kann der Benutzer-Space-Code Auswirkungen auf die Interrupt-Latenz haben. Einige Anweisungen dauern länger als andere. Aber wirklich, wenn Sie diese Art von Latenz benötigen, ist wahrscheinlich etwas mit Hardware falsch. DMA usw. wäre besser. Ref: [U-boot interrupts] (http://stackoverflow.com/questions/15829601/enabling-interrupts-in-u-u-boot-for-arm-cortex-a-9) –
Verwenden Sie "cycltest" Dienstprogramm, um Latenz zu messen, habe ich Forschung und ich benutze cycltest, um Jitter von portierten RT Linux auf PowerPC-Plattform zu messen.
Es ist einfach, aber leistungsfähiges Programm zur Messung der Latenzzeit
Ein anderer Weg ist Ihre Ziel-Board ist eine GPIO-Ausgang an einem anderen GPIO-Eingang angeschlossen, um das Signal auf GPIO Ausgang ziehen und dieses Ereignis in GPIO ISR Routine zu behandeln. Überprüfen Sie die Zeitdifferenz zwischen Ziehen und Triggern des GPIO-Eingangs-ISR. hier ist die Open-Source, dies zu tun, für Raspberry Board:
Siehe auch: [Wie in Echtzeit ist Linux 2.6] (http://stackoverflow.com/questions/1362906/how-real- time-is-linux-2-6). –