Frage CPU-Auslastung eines Kernel-Moduls


Ich muss die CPU-Auslastung eines bestimmten Kernel-Moduls (z. B. iptable_mangle) in Linux (Fedora) kennen. Ich weiß, dass oben oder mpstat zeigt System CPU-Auslastung, die tatsächlich die gesamte CPU-Auslastung im Kernel-Raum ist. Gibt es eine Möglichkeit, die CPU-Auslastung eines bestimmten Kernel-Objekts zu kennen?


5
2018-05-01 06:26


Ursprung


Antworten:


Entschuldigen Sie die Enttäuschung, aber es gibt keine Möglichkeit, das zu erreichen, was Sie wollen - nicht weil Linux nicht die Fähigkeit hat, sondern per Definition:

Ein Modul kann auf zwei allgemeine Arten in den Kernel "eingesteckt" werden: Entweder durch Installieren eines Callbacks (z. B. proc oder sys-Datei, Gerät usw.) oder durch Starten eines Kernel-Threads. In Ihrem Fall wird iptable_mangle aktiviert, indem Callbacks auf iptables / netfilter gesetzt werden. Dies bedeutet, dass der Modulcode als Teil des Netzwerkstapels ausgeführt wird (genauer gesagt im Kontext von ksoftirqd).

Wenn dies in einem Kernel-Thread-Kontext stattgefunden hat, führt Linux Statistiken. Aber für Callbacks ist das nicht der Fall. Der Thread, der letztendlich den Modulcode ausführt, macht eine Menge anderer Dinge, also ist es einfach unpraktisch, den Modulcode zu isolieren (es sei denn natürlich, Sie sind im Besitz der Quelle, und dann können Sie sehr einfach Timing-Anweisungen hinzufügen) .

Eine Teillösung wäre die Verwendung des kernel ftrace-Mechanismus - dies ermöglicht die Funktionsaufrufverfolgung im Kernel - es ist unglaublich leistungsstark und kann Ihnen Statistiken für bestimmte Funktionen anzeigen. Es ist nicht genau das, was du willst, aber es ist so nah wie du kommst.


6
2018-05-24 19:56