39 votes

Si le profileur n'est pas la solution, quels autres choix avons-nous?

Après avoir vu la présentation de "l'Anxiété de Performance" de Joshua Bloch, j'ai lu le livre il l'a indiqué dans la présentation de "l'Évaluation de l'Exactitude des Profileurs Java". Citant la conclusion:

Nos résultats sont inquiétants parce qu'ils indiquent que profiler inexactitude est omniprésente présentes dans la plupart de nos sept points de référence et en deux la production de la JVM--et important-tous les quatre de l'état-de-la-art des profileurs de produire incorrect profils. Incorrect les profils peuvent facilement provoquer un analyste de performance de passer du temps à optimiser froid méthodes qui ont un effet minime sur les performances. Nous montrons qu'une preuve-de-concept de profils ne pas utiliser de rendement les points d'échantillonnage ne souffre pas de problèmes ci-dessus

La conclusion de l'article est que l'on ne peut pas vraiment croire que le résultat des profileurs. Mais alors, quelle est l'alternative de l'utilisation des profileurs. Devrions-nous revenir en arrière et il suffit d'utiliser notre sentiment de faire de l'optimisation?

Mise à JOUR: UN point qui semble être oubliée dans le débat est en effet d'observation. Peut-on construire un générateur de profils que vraiment"observateur effet'-libre?

42voto

Mike Dunlavey Points 25419

Oh, l'homme, par où commencer?

Tout d'abord, je suis étonné de voir que ce sont des nouvelles. Deuxièmement, le problème n'est pas que ceux-ci sont mauvais, c'est que certains des profileurs sont mauvais. Les auteurs ont construit un qu'ils se sentent, est bonne, juste en évitant les erreurs qu'ils ont trouvé dans ceux qu'ils évalués. Les erreurs sont fréquentes en raison de certains persistante des mythes sur le profilage des performances.

Mais soyons positifs. Si l'on veut trouver des opportunités d'accélération, c'est vraiment très simple:

  • L'échantillonnage doit être corrélée avec l'état du programme.
    Que signifie arrive à un véritablement aléatoire, peu importe si le programme est en I/O (à l'exception des entrées de l'utilisateur), ou dans le GC, ou dans un virage serré CPU boucle, ou quoi que ce soit.

  • L'échantillonnage doit lire la pile d'appel,
    afin de déterminer lequel des états financiers ont été "actif" à l'époque de l'échantillon. La raison en est que chaque site d'appel (à partir de laquelle une fonction est appelée) a un coût en pourcentage égal à la fraction de temps, il est sur la pile. (Remarque: le papier est intéressé entièrement soi-même avec le temps, en ignorant l'impact massif de évitables appels de fonction dans les grands logiciels. En fait, la raison derrière l'original gprof était de l'aider à trouver ces appels.)

  • Les rapports montrent pour cent par ligne) (pas en fonction).
    Si un "chaud" de la fonction est identifiée, on a encore à chasser à l'intérieur pour le "chaud" de lignes de code de la comptabilité pour le moment. Cette information est dans les échantillons! Pourquoi le cacher?

Quasi universel erreur (que le papier d'actions) est à être concerné aussi beaucoup avec l'exactitude de la mesure, et pas assez avec une précision de localisation. Pour exemple, voici un exemple de réglage des performances dans lequel une série de problèmes de performance ont été identifiés et résolus, résultant en un composé de l'accélération de 43 fois. Il n'était pas indispensable de connaître précisément la taille de chaque problème avant de le fixer, mais pour connaître son emplacement. Un phénomène de réglage des performances est que la fixation d'un problème, en réduisant le temps, multiplie les pourcentages de problèmes restants, de sorte qu'ils sont plus faciles à trouver. Tant que tout problème est trouvé et corrigé, un progrès vers l'objectif de trouver et de corriger tous les problèmes. Il n'est pas indispensable de les résoudre dans l'ordre décroissant, mais il est essentiel de les déterminer.

Sur le sujet de l'exactitude des statistiques de mesure, si un point est sur la pile d'un certain pourcentage de temps F (20%), et N (100) tirage au temps de la prise d'échantillons, le nombre d'échantillons qui montrent le point d'appel est une distribution binomiale, avec une moyenne de = NF = 20, écart-type = sqrt(NF(1-F)) = sqrt(16) = 4. Donc, le pourcentage d'échantillons qui montrent qu'elle sera de 20% +/- 4%. Donc, est-ce exact? Pas vraiment, mais le problème a été trouvée? Précisément.

En fait, le plus gros problème est, en termes de pourcentage, le moins d'échantillons sont nécessaires pour le localiser. Par exemple, si 3 de la prise d'échantillons, et d'un point d'appel s'affiche sur 2 d'entre eux, il est très susceptible d'être très coûteux. (Plus précisément, il s'en suit une distribution bêta. Si vous générez 4 uniforme de 0,1 nombres aléatoires, et de les trier, de la distribution de la 3e est la répartition des coûts pour que le point d'appel. C'est-à-dire est (2+1)/(3+2) = 0.6, c'est ainsi que les économies attendues, compte tenu de ces échantillons.) INSÉRÉ: Et l'accélération facteur que vous obtenez est régi par une autre distribution, BetaPrime, et sa moyenne est de 4. Donc, si vous prenez 3 échantillons, voir un problème sur 2 d'entre eux, et d'éliminer ce problème, en moyenne vous permettra de faire le programme de quatre fois plus rapide.

Il est grand temps de nous, programmeurs, a soufflé les toiles d'araignées de nos têtes sur le sujet du profilage.

Avertissement - le papier a omis de faire référence à mon article: Dunlavey, "optimisation des Performances avec le niveau d'instruction des coûts dérivés de la pile des appels d'échantillonnage", ACM SIGPLAN Notices 42, 8 (août 2007), pp. 4-8.

8voto

Michael Borgwardt Points 181658

Si j'ai bien lu, le livre ne parle que de l'échantillon basé sur le profilage. De nombreux profileurs également faire l'instrumentation à base de profilage. Il est beaucoup plus lente et de certains autres problèmes, mais il ne devrait pas souffrir de biais le papier parle.

La conclusion de l'article, c'est que nous ne peut pas vraiment croire que le résultat de les profileurs. Mais alors, qu'est-ce que l' possibilité d'utiliser des profileurs.

Pas de. La conclusion de l'article, les profileurs méthodes de mesure ont des défauts. Ils proposent une solution. Le papier est assez récente. Je m'attends à de profileurs pour appliquer ce correctif, finalement. Jusqu'alors, même un défaut de profils est encore beaucoup mieux que le "sentiment".

3voto

Andrew White Points 23508

Sauf si vous êtes la construction à la pointe des applications qui ont besoin de chaque cycle du PROCESSEUR puis j'ai trouvé que ceux-ci sont un bon moyen de trouver les 10% plus lent parties de votre code. En tant que développeur, je dirais que cela devrait être tout ce qui compte vraiment pour vous dans presque tous les cas.

J'ai de l'expérience avec http://www.dynatrace.com/en/ et je peux vous dire que c'est très bon à trouver les fruits mûrs.

Les profileurs sont comme tout autre outil, et ils ont leurs caprices, mais je voudrais leur faire confiance sur un homme toute la journée pour trouver les points chauds dans votre application à regarder.

-1voto

darioo Points 23903

Si vous n'avez pas confiance profileurs, alors vous pouvez aller dans la paranoïa mode à l'aide de la programmation orientée aspects, l'enroulant autour de chaque méthode dans votre application, puis à l'aide d'un enregistreur de journal chaque invocation de méthode.

Votre application va vraiment ralentir, mais au moins vous aurez un précis de compter combien de fois chaque méthode est invoquée. Si vous aussi vous voulez voir combien de temps chaque méthode d'exécution, enrouler autour de chaque méthode perf4j.

Après dumping toutes ces statistiques à des fichiers de texte, utiliser certains outils pour extraire toutes les informations nécessaires, puis de les visualiser. J'avais suppose que cela vous donnera un bon aperçu de la façon de ralentir votre application est en certains endroits.

-3voto

Oldpond Points 17

En fait, il est préférable de profiler au niveau de la base de données. La plupart des bases de données d'entreprise offrent la possibilité d'afficher les principales requêtes sur une période donnée. Commencez à travailler sur ces requêtes jusqu'à 300 ms ou moins, et vous aurez fait de gros progrès. Les profileurs sont utiles pour montrer le comportement du tas et pour identifier les threads bloqués, mais je n'ai personnellement jamais eu beaucoup de poids auprès des équipes de développement pour identifier des méthodes chaudes ou des objets volumineux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X