auf Linux, einen Prozess (Haupt-Thread des) letzten Programm-Zählerwert wird in /proc/$PID/stat
dargestellt. Dies scheint ein wirklich einfacher und einfacher Weg zu sein, um einige gesamplete Profiling zu machen, ohne ein Programm in irgendeiner Weise instrumentieren zu müssen. JedochVerwenden/proc/*/stat zum Profilieren
Ich frage mich, ob dies irgendwelche Einschränkungen, wenn es um die Sampling-Qualität geht. Ich gehe davon aus, dass dieser Wert aktualisiert wird, wenn der Prozess aus seiner Zeitscheibe, die sollte in völlig zufälligen Abständen im Programmcode passieren, und dass Stichproben genommen mehr als Zeitscheibe Länge sollte gleichmäßig verteilt nach wo verteilt werden das Programm verbringt tatsächlich seine Zeit. Aber das ist nur eine Annahme, und mir ist klar, dass es in vielerlei Hinsicht falsch sein könnte.
Weiß jemand?
Oh, ich sehr einverstanden, dass die manuelle Probenahme mit einem Debugger ist oft die schönste, aber mein Problem ist, dass ich ein Soft-Realtime-Programm mit LLVM-JITted Code zum Profil bin versucht, die GDB führt zu nehmen ~ 1 Sekunde anhängen (um die JIT-generierten Symboltabellen zu lesen), wodurch die Echtzeitbeschränkungen aufgehoben werden. Daher versuche ich, verschiedene Wege zu finden, um es zu probieren. :) – Dolda2000
@ Dolda2000: Gedanken: 1) Kannst du die ganze Sache unter einem Debugger laufen lassen, also bezahlst du die Symboltabelle einmal im Voraus? 2) Kannst du es glatt laufen lassen und nicht auf äußere Ereignisse warten?- Wenn sich darin Verschwendungen verbergen, sollte dies offen gelegt werden. 3) Meiner Erfahrung nach ist es egal, wie viel Zeit es braucht * nachdem * ich es unterbrochen habe. Ich kann den ganzen Tag dauern, um es zu studieren. Es kommt darauf an, dass der Interrupt selbst zu einem Zeitpunkt auftritt, der für das Programm unvorhersehbar ist, so dass die Verschwendung in dem Maße erkannt wird, wie es Zeit braucht. –
Alles andere beiseite, ich möchte nur sagen, dass ich an einer tatsächlichen Antwort auf die Frage interessiert wäre, da dies mir helfen würde zu entscheiden, wann und in welchen Situationen der EIP-Wert von '/ proc/*/stat' sein könnte nützlich sein. Aber ja, wie für 1) und 3) ist das Problem dann, dass die Zeit für mich, das Programm zu unterbrechen, den Stacktrace auszudrucken und es dauert auch etwa eine Sekunde (der Vorteil des Aufrufs 'gdb' ist neu, dass ich geben kann es '-Batch -ex' Optionen). Wenn es einen Weg gibt, das zu ändern, wäre das auch sehr interessant. Wie für 2), muss ich das Programm "in Produktion" ausführen, damit die Ergebnisse sinnvoll sind. – Dolda2000