Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Profiling sous Linux

5 réponses
Avatar
Guillaume ALLEON
Bonsoir,

J'ai une application multi-processus fonctionnant sur un
multi-processeur. Ces processus sont instanciés à partir de
librairies partagées (dl_open, ...)

Je souhaite "profilé" certains des processus malheureusement
j'ai peu de degré de latitude sur:
- le lancement de ces derniers (appli chapeau complexe)
- la possibilité de recompiler les librairies (trop intrusif ?)

Je pensais donc utiliser sprof mais mes premiers essais me laissent
douter des résultats obtenus (temps parfois nuls, comptage des appels
aux fonctions différents de ceux escomptés ??)

Que pensez vous de cette solutions ?
Existe-t-il des documents (récents) expliquant l'utilisation de sprof ?
(google ne donnant rien de bien convaincant)
Y-a-t-il d'autres voies à explorer à la vue de mes contraintes ?

Merci de votre aide.
Guillaume

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

5 réponses

Avatar
Emmanuel Fleury
Bonjour,

Guillaume ALLEON wrote:

J'ai une application multi-processus fonctionnant sur un
multi-processeur. Ces processus sont instanciés à partir de
librairies partagées (dl_open, ...)

Je souhaite "profilé" certains des processus malheureusement
j'ai peu de degré de latitude sur:
- le lancement de ces derniers (appli chapeau complexe)
- la possibilité de recompiler les librairies (trop intrusif ?)

Je pensais donc utiliser sprof mais mes premiers essais me laissent
douter des résultats obtenus (temps parfois nuls, comptage des appels
aux fonctions différents de ceux escomptés ??)

Que pensez vous de cette solutions ?



Que tu ne nous donnes pas assez d'information pour pouvoir espérer une
réponse pertinente. Je t'avais déjà suggéré oprofile, je peux y ajouter
que comme tu fais des experiences sur un SMP, regarder la fonction C
sched_setaffinity pourrait être utile.

Existe-t-il des documents (récents) expliquant l'utilisation de sprof ?
(google ne donnant rien de bien convaincant)



sprof n'est plus maintenu depuis quelques années.

Y-a-t-il d'autres voies à explorer à la vue de mes contraintes ?



Nous expliquer de quelles applis tu veux parler, de ce que tu veux dire
par "appli chapeau complexe", par ""(trop intrusif?)", etc...

Amicalement
--
Emmanuel Fleury

I worry about my child and the Internet all the time, even though
she's too young to have logged on yet. Here's what I worry about.
I worry that 10 or 15 years from now, she will come to me and say
'Daddy, where were you when they took freedom of the press away
from the Internet?'.
-- Mike Godwin

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Guillaume ALLEON
Emmanuel Fleury a écrit :
Bonjour,




Que pensez vous de cette solutions ?



Que tu ne nous donnes pas assez d'information pour pouvoir espérer une
réponse pertinente. Je t'avais déjà suggéré oprofile, je peux y ajouter
que comme tu fais des experiences sur un SMP, regarder la fonction C
sched_setaffinity pourrait être utile.



oprofile de ce que j'en ai vu et compris:
- est bien car non intrusif sur l'application(pas de recompilation),
- l'est moins car nécessite (vraisemblablement) l'installation d'un
module. Il faut que je vois si je peux faire cela sur notre système.


Existe-t-il des documents (récents) expliquant l'utilisation de sprof ?
(google ne donnant rien de bien convaincant)



sprof n'est plus maintenu depuis quelques années.



Arg ! Il est pourtant natif et un papier de drepper relativement récent
le cite encore (http://people.redhat.com/drepper/dsohowto.pdf). Normal
me diras tu c'est son bébé !


Y-a-t-il d'autres voies à explorer à la vue de mes contraintes ?



Nous expliquer de quelles applis tu veux parler, de ce que tu veux dire
par "appli chapeau complexe", par ""(trop intrusif?)", etc...



Mes applications sont des applis de temps réels pour lesquelles grosso
modo je dispose d'un scheduler chargé d'orchestrer différents modèles.
Chaque modèle est contenu dans une librairie partagée avec des points
d'entrée prédéfinie. Point important je n'ai pas souvent les sources des
modèles (environnement industriel multi partenaires). Les modèles (ou
librairies) sont regroupées et affectées au différents processeurs de la
machines afin de garantir les performances. Enfin les données sont
écahngées entre modèles à travers des segments de mémoire partagée.
Je suis interessé par profiler pour le moment uniquement les modèles
(donc certaines librairies partagées) de manière dynamique.
Le rêve serait aussi de pouvoir faire une analyse statique des modèles
dont j'ai le code source et là je n'ai pas l'impression qu'il existe
beaucoup de chose.
Voilà j'espère avoir été plus clair.
Merci de votre aide.

Guillaume



Amicalement



--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Olivier Croquette
Guillaume ALLEON wrote:

Y-a-t-il d'autres voies à explorer à la vue de mes contraintes ?



<http://www.daimi.au.dk/~sandmann/sysprof/> ?

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Emmanuel Fleury
Guillaume ALLEON wrote:

oprofile de ce que j'en ai vu et compris:
- est bien car non intrusif sur l'application(pas de recompilation),
- l'est moins car nécessite (vraisemblablement) l'installation d'un
module. Il faut que je vois si je peux faire cela sur notre système.



Il existe des paquetages oprofile pour toutes les bonnes distributions,
dis simplement à ton admin de te l'installer en suid root.

Arg ! Il est pourtant natif et un papier de drepper relativement récent
le cite encore (http://people.redhat.com/drepper/dsohowto.pdf). Normal
me diras tu c'est son bébé !



Le mieux serait de le contacter directement. :)

Mes applications sont des applis de temps réels pour lesquelles grosso
modo je dispose d'un scheduler chargé d'orchestrer différents modèles.
Chaque modèle est contenu dans une librairie partagée avec des points
d'entrée prédéfinie. Point important je n'ai pas souvent les sources des
modèles (environnement industriel multi partenaires). Les modèles (ou
librairies) sont regroupées et affectées au différents processeurs de la
machines afin de garantir les performances. Enfin les données sont
écahngées entre modèles à travers des segments de mémoire partagée.
Je suis interessé par profiler pour le moment uniquement les modèles
(donc certaines librairies partagées) de manière dynamique.
Le rêve serait aussi de pouvoir faire une analyse statique des modèles
dont j'ai le code source et là je n'ai pas l'impression qu'il existe
beaucoup de chose.
Voilà j'espère avoir été plus clair.



Hum, pas vraiment... J'aurai espéré que tu arrives à définir quand
commence le code/binaire que tu veux profiler, comment et dans quelles
conditions il est lancé par le code/binaire que tu lances en ligne de
commande et quel accès tu as à ce dernier (accès aux sources,
possibilité de les modifier, etc).

Toutefois, ce que je comprends entre les lignes de ton explication que
tu voudrais pouvoir tester des bibliothèques sans tester le programme
qui l'utilises. Si le binaire n'a pas été strippé c'est possible (le
profilers listent les fonctions appelées et le temps CPU qu'elles
prennent), sinon cela risque d'être très très compliqué... (il te faudra
utiliser des techniques de reverse-engineering).

Amicalement
--
Emmanuel Fleury

A child of five could understand this. Fetch me a child of five.
-- Groucho Marx

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Guillaume ALLEON
Olivier Croquette a écrit :
Guillaume ALLEON wrote:

Y-a-t-il d'autres voies à explorer à la vue de mes contraintes ?



<http://www.daimi.au.dk/~sandmann/sysprof/> ?



Merci à tous,
Juste quelques infos qui pourront (peut-être) servir à d'autres. Pour
profiler un programme multi-threadé utilisant des bibliothèques chargées
dynamiquement sous Linux deux choses à ne pas oublier:
1-faire les appels à travers la macro DL_CALL_FCT,
2-créer les threads de façon astucieuse de façon à contourner un pb de
ITIMER cf http://sam.zoy.org/writings/programming/gprof.html

Si elles sont nécessaires ces conditions ne sont pas suffisantes puisque
mon sprof ne me donne tjs pas les résulats attendus mais améliorent le
comportement d'un programme de test.

Si d'ailleurs qqn peut m'expliquer le fonctionnement du profiling et le
pb lié au point 2, je suis preneur. J'ai cru comprendre que le profiling
s'effectuait en ayant un compteur se decrementant automatiquement
(temporellement cad toutes les x ms) quand il est à zéro cela appelle
une fonction qui loggue en qq sorte le point d'entrée courant et ainsi
de suite. Le problème étant que cette structure/compteur n'était pas
partagé entre les threads d'ou un non-profiling des threads non maitres.

Merci
Guillaume

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.