• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Profiling blueprints
 

Profiling blueprints

on

  • 1,244 views

Alexandre Bergel, Romain Robbes and Walter Binder, Visualizing Dynamic Metrics with Profiling Blueprints, In Proceedings of the 48th International Conference on Objects, Models, Components, Patterns ...

Alexandre Bergel, Romain Robbes and Walter Binder, Visualizing Dynamic Metrics with Profiling Blueprints, In Proceedings of the 48th International Conference on Objects, Models, Components, Patterns (TOOLS EUROPE'10), July 2010, LNCS Springer Verlag

http://www.bergel.eu/download/papers/Berg10aProfiling.pdf

Statistics

Views

Total Views
1,244
Views on SlideShare
1,149
Embed Views
95

Actions

Likes
0
Downloads
5
Comments
0

3 Embeds 95

http://bergel.eu 64
http://www.bergel.eu 30
file:// 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Whether an optimization can be realized depends on many parameters not easily detectable. <br />
  • <br />
  • <br />

Profiling blueprints Profiling blueprints Presentation Transcript

  • Visualizing Dynamic Metrics with Profiling Blueprints Alexandre Bergel, Romain Robbes, Walter Binder University of Chile University of Chile Lugano
  • { { { { } } } } { } 2
  • 1.4 { 5.2 { { } } { } 5.6 } { } 2.3 0.5 ... 3
  • 1.4 { 5.2 } { 5.6 } { { } } } { } } } { 2.3 { } { } { { 0.5 ... Understanding why 4
  • gprof: flat profile Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 33.34 0.02 0.02 7208 0.00 0.00 open 16.67 0.03 0.01 244 0.04 0.12 offtime 16.67 0.04 0.01 8 1.25 1.25 memccpy 16.67 0.05 0.01 7 1.43 1.43 write 16.67 0.06 0.01 mcount 0.00 0.06 0.00 236 0.00 0.00 tzset 0.00 0.06 0.00 192 0.00 0.00 tolower 0.00 0.06 0.00 47 0.00 0.00 strlen 0.00 0.06 0.00 45 0.00 0.00 strchr 5
  • gprof: call graph (~1984) index % time self children called name <spontaneous> [1] 100.0 0.00 0.05 start [1] 0.00 0.05 1/1 main [2] 0.00 0.00 1/2 on_exit [28] 0.00 0.00 1/1 exit [59] ----------------------------------------------- 0.00 0.05 1/1 start [1] [2] 100.0 0.00 0.05 1 main [2] 0.00 0.05 1/1 report [3] ----------------------------------------------- 0.00 0.05 1/1 main [2] [3] 100.0 0.00 0.05 1 report [3] 0.00 0.03 8/8 timelocal [6] 0.00 0.01 1/1 print [9] 0.00 0.01 9/9 fgets [12] 0.00 0.00 12/34 strncmp <cycle 1> [40] 0.00 0.00 8/8 lookup [20] 0.00 0.00 1/1 fopen [21] 0.00 0.00 8/8 chewtime [24] 0.00 0.00 8/16 skipspace [44] ----------------------------------------------- [4] 59.8 0.01 0.02 8+472 <cycle 2 as a whole> [4] 0.01 0.02 244+260 offtime <cycle 2> [7] 0.00 0.00 236+1 tzset <cycle 2> [26] ----------------------------------------------- 6
  • YourKit 7
  • YourKit 8
  • JProfiler 9
  • JProfiler 10
  • JProfiler 11
  • Retrospective on profiling Information conveyed hasn’t evolved since gprof Useful to understand what happened But is of little help to understand why and how Is there a “slow” function that is called too often? What makes a function “slow”? 12
  • Roadmap 1.Polymetric views 2.Profiling Blueprint 3.Implementation 13
  • Polymetric view can map up to 5 dimensions width property color height property property X property Y property [Lanza 2003] 14
  • KaiProfiler viewProfiling: [ | view | view := MOViewRenderer new. view nodes: (1 to: 100) forEach: [:each | view nodes: (1 to: 100)]. view root applyLayout ] 15
  • Structural blueprint legend for methods # executions (color) execution #different time receiver 16
  • Structural blueprint bounds legend for methods # executions (color) execution #different time receiver 17
  • Behavioral blueprint legend for methods # executions gray = return m1 m3 self execution m1 time yellow = invokes constant m2 m2 and m3 on return value 18
  • Behavioral blueprint legend for methods # executions gray = return m1 m3 self execution m1 time yellow = invokes m2 m2 and m3 bounds constant on return value 19
  • Detailed behavioral blueprint computeExtentHavingChildrenFor: MOGraphElement>> origin Calling #bounds bounds Called by #bounds shapeBoundsAt:ifPresent: 20
  • Code of the bounds method MOGraphElement>>bounds "Answer the bounds of the receiver." | basicBounds | self shapeBoundsAt: self shape ifPresent: [ :b | ^ b ]. basicBounds := shape computeBoundsFor: self. self shapeBoundsAt: self shape put: basicBounds. ^ basicBounds 21
  • Memoizing MOGraphElement>>bounds "Answer the bounds of the receiver." | basicBounds | boundsCache ifNotNil: [ ^ boundsCache ]. self shapeBoundsAt: self shape ifPresent: [ :b | ^ b ]. basicBounds := shape computeBoundsFor: self. self shapeBoundsAt: self shape put: basicBounds. ^ boundsCache := basicBounds 22
  • Upgrading MOGraphElement>>bounds A B C 23
  • 43% speedup Upgrading MOGraphElement>>bounds A B C 24
  • A Upgrading MOGraphElement>>bounds B 25
  • B C A cached absoluteBounds ins A' C' B' C' 26
  • B C A D cached make display:on: absoluteBounds call absoluteBounds instead of absoluteBoundsFor: A' C' B' C' 26
  • B C D make display:on: call absoluteBounds instead of absoluteBoundsFor: C' B' C' 26
  • Implementation We use the following metrics: execution time for a method (% and ms) number of executions number of different object receivers Dynamic properties a method performs a side effect a method is void (i.e., return self in Pharo) 27
  • Naive (but effective) implementation Code to profile is executed twice using a sampling method to get the execution time instrumentation to get all the remaining metrics Use hash values to distinguish between different receiver objects Built a kind of AOP mechanism for the low level instrumentation 28
  • Implementation techniques Visualizations are generated using a scripting languages ... in Mondrian 29
  • Implemented in Pharo Smalltalk dialect Dynamically typed language 30
  • Conclusion Effective visualizations Smooth integration in the programming environment Implemented in Pharo 31
  • Conclusion A number of bottlenecks were identified No general rule for pattern identification Visualizations are effective for identifying potential candidate for optimization 32
  • Conclusion Future work close integration in the programming environment dedicated visualization for comparison additional metrics, e.g., the number of executed bytecodes, memory usage 33
  • Visualizing Dynamic Metrics with Profiling Blueprints www.moosetechnology.org/tools/Spy A Alexandre Bergel, Romain Robbes, Walter Binder B C abergel@dcc.uchile.cl 34