version courte:échantillon de temps Linux profileur basé
est-il un bon profileur d'échantillonnage basé sur le temps pour Linux?
version longue:
J'utilise généralement OProfile pour optimiser mes applications. J'ai récemment trouvé une lacune qui m'a fait me demander.
Le problème était une boucle serrée, générant C++ filt pour démêler un nom C++. J'ai seulement trébuché sur le code par accident tout en poursuivant un autre goulot d'étranglement. L'OProfile n'affichait rien d'inhabituel à propos du code, donc je l'ai presque ignoré mais mon sens du code m'a dit d'optimiser l'appel et de voir ce qu'il s'est passé. J'ai changé le popen
de C++ filt à abi::__cxa_demangle
. Le temps d'exécution est passé de plus d'une minute à un peu plus d'une seconde. À propos d'une accélération de x60.
Y a-t-il un moyen que j'aurais pu configurer OProfile pour marquer l'appel popen
? Comme les données de profil se trouve maintenant OProfile pense que le col de la bouteille était le tas et std::string
appels (BTW une fois optimisé a chuté l'exécution à moins d'une seconde, plus de x2 accélérer).
Voici ma configuration OProfile:
$ sudo opcontrol --status
Daemon not running
Event 0: CPU_CLK_UNHALTED:90000:0:1:1
Separate options: library
vmlinux file: none
Image filter: /path/to/executable
Call-graph depth: 7
Buffer size: 65536
Y at-il une autre profileur pour Linux qui aurait pu trouver le goulot d'étranglement?
Je suppose que le problème est que OProfile enregistre uniquement ses échantillons dans le processus en cours d'exécution. Je voudrais qu'il enregistre toujours ses échantillons dans le processus que je profile. Donc, si le processus est actuellement désactivé (blocage sur IO ou appel popen
), OProfile placera simplement son échantillon à l'appel bloqué.
Si je ne peux pas résoudre ce problème, OProfile ne sera utile que si l'exécutable pousse près de 100% CPU. Il ne peut pas aider avec les exécutables qui ont des appels bloquants inefficaces.
Mike, votre point est très valable, je suis d'accord avec la technique à 100%. Des idées sur la façon d'activer l'échantillonnage basé sur le temps via OProfile ou dans une approche plus automatisée que juste casser dans le débogueur? –
@Caspin: Je suis sur Windows, et je ne suis pas un utilisateur d'OProfile, mais ce lien (http://oprofile.sourceforge.net/doc/opreport.html) parle de son utilisation et de la présentation des données d'exemple de pile . Aussi ce lien (http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer) parle des interruptions de minuterie. Je ne peux pas dire si cela prendra des échantillons pendant les E/S ou d'autres appels bloquants. –
... Notez que la fréquence d'échantillonnage n'a pas besoin d'être rapide, mais qu'elle doit pouvoir être échantillonnée pendant les appels de blocage, à moins que vous ne souhaitiez être aveugle. –