Profiling with Devel::NYTProf

Embed Size (px)

Citation preview

Profiling with Devel::NYTProf

Profiling

Profiling: allows us to know what our programs are doing so we know where to optimize

You actually need to profile before optimizing because you never know where the problems are going to be.

Devel::NYTProf: A History

Devel::DProf

Devel::SmallProf

Old & broken!

Has issues with current versions of Perl.

Clock is too slow for current CPU times.

Devel::FastProf

Devel::NYTProfVersions 1, 2, 3

Hooray!

Per line profiling

Per line profilingbut faster

Devel::NYTProf
Why it's awesome

* Profiles per:LineSubroutineBlock* Inclusive & exclusive subroutine timing* Very fast* Awesome html reports (based on Devel::Cover)* Easy to use with mod_perlDevel::NYTProf::Apache

#Create nytprof.out:$ perl -d:NYTProf phone.cgi

#Create nytprof directory & csv files:$ nytprofcsv

Open .csv files in spreadsheetapplication or whatever

Devel::NYTProf & nytprofcsv

-d:foo executes the program under the control of a debugging, profiling or tracing module (e.g. Devel::foo)

nytprofcsv:
Time per Line

nytprofcsv:
Time per Line

Kinda icky

Devel::NYTProf & nytprofhtml

Create nytprof.out:$ perl -d:NYTProf phone.cgi

Create nytprof directory & html files:$ nytprofhtml

Open ./nytprof/index.html

nytprofhtml:
Top 15 Subroutines

Links to source code

Subroutine index with sortable columns

nytprofhtml:
Top Packages

Color coding based on median average deviation

nytprofhtml:
Top Source Code Files

nytprofhtml: treemap

nytprofhtml:
Time per
Sub

enter subroutine - leave subrountine

Color coding relative to rest of file

Annotates source code

nytprofhtml:
Time per Line

start of one statement to the next (;)expensive CPU & IO,too much detail

nytprofhtml:
Time per
Block

Compromise

Kcachegrind

Tool to generate and analyze callgraphs(graphs relationships between subroutines)

Valgrind

Cachegrind

Callgrind

Kcachegrind

Memory debugging & profiling

CPU cache profiler

Cachegrind with call graphs

GUI for Cachegrind

Devel::NYTProf & nytprofcg

Currently NYTProf v.2

NYTProf v.3: nytprofcg!

http://code.google.com/p/perl-devel-nytprof/source/checkout

Creates callgraph data that can be read by Kcachegrind

Devel::NYTProf & nytprofcg

Create nytprof.out:$ perl -d:NYTProf phone.cgi

Create nytprof.callgraph$ nytprofcg

Load callgraph into Kcachegrind$ kcachegrind nytprof.callgraph

Source Code & Callees

Callees

Source Code

Callee Map & Call Graph

Percentage of time ineach function

Call graph

Tree View

Devel::NYTProf::Apache

Profile mod_perl! (Not supported on Windows)

Add these guys to your apache conf file: PerlPassEnv NYTPROF PerlModule Devel::NYTProf::Apache

nytprof.$$.out will end up in /tmp/ unless you specify otherwise by setting the NYTPROF environment variable file=

Resources

http://en.oreilly.com/oscon2009/public/schedule/detail/7941

http://blog.timbunce.org/2008/07/15/nytprof-v2-a-major-advance-in-perl-profilers/

http://blog.timbunce.org/2009/08/07/nytprof-v3-a-sneak-peak/#more-301

http://code.google.com/p/perl-devel-nytprof/source/checkout

CPAN!

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso