+ All Categories
Home > Documents > Bench Marking Perl

Bench Marking Perl

Date post: 05-Apr-2018
Category:
Upload: orvilleburton2995
View: 219 times
Download: 0 times
Share this document with a friend
51
Be nch m ar king P erl brian d foy S tonehenge Consul ting Ser vice s Marc h 14 , 2006 Chicago UniForum
Transcript
Page 1: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 1/51

Benchmarking Perlbrian d foyStonehenge Consulting Services

March 14, 2006

Chicago UniForum

Page 2: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 2/51

Know where you are “A benchmark is a point of reference for a

measurement . The term originates from the 

chiseled horizontal marks that surveyorsmade into which an angle-iron could be placed to bracket (bench) a leveling rod, thusensuring that the leveling rod can be 

repositioned in the exact same place in the future.”

http://en.wikipedia .org/wiki/Benchmark

Page 3: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 3/51

Single Points

Page 4: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 4/51

Multiple Points

Page 5: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 5/51

Nobody is ferpect 

It’s only relative It has to be the same answer next time 

If something changes, the reference is

meaningless

Page 6: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 6/51

Computer Benchmarks

Standard Performance Evaluation

Corporat ion (SPEC)

CPU (2000, 95, 92)

Graphics

Web servers

ht tp://www.spec.org/

Page 7: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 7/51

All Things Being Equal...

There are lies, damned lies, and

benchmarks

Everyone has an agenda

You don’t run testbeds as production

Skepticism wins the day

Page 8: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 8/51

Language Shootout 

http://shootout.al ioth.debian .org/

Benchmarking programming languages?

How can we benchmark a programming language?

We can't - we benchmark programming language implementations.

How can we benchmark language implementat ions?We can't - we measure particular programs.

Page 9: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 9/51

Performance 

A major factor in determining the overallproductivity of a system, performance is

primarily tied to availability, throughput andresponse time.

ht tp://www.comptia.org/sections/ssg/glossary.aspx 

Page 10: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 10/51

Performance (2)A performance comprises

an event in which

generally one group of people behave  in apart icular way for 

another group of people 

ht tp://en.wikipedia.org/wiki/Performance 

Page 11: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 11/51

Performance (3)“Your investment'sactivity over time.Past performance does not guarantee  future results.”

My accountant 

Page 12: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 12/51

How manymetrics can youname?

Page 13: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 13/51

Availability Disk Use  Concurrent Users CPU Time 

Completion Time  Memory Use  Uptime  Bandwidth Use  

Network Lag Responsiveness Binary Size 

Page 14: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 14/51

Programmer Time 

Page 15: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 15/51

Power 

Speed

Ease of use 

Page 16: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 16/51

Pick Any Two

Page 17: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 17/51

You haven’t said “Perl”Perl is just a programming language 

It’s a High Level Language 

Measure Perl the same as other things

Measure Perl against itself 

Compare the results

Page 18: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 18/51

TIMTOWTMI

Page 19: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 19/51

It’s not   just 

speed

Page 20: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 20/51

use Devel::Size qw(size total_size);

my $size = size("A string");

my @foo = (1, 2, 3, 4, 5);my $other_size = size(\@foo);

my $foo = {a => [1, 2, 3],

b => {a => [1, 3, 4]}};my $total_size = total_size($foo);

Memory Use 

Page 21: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 21/51

use Devel::Peek;

Dump( $a );Dump( $a, 5 );DumpArray( 5, $a, $b, ... );

   mstat "Point 5";

Memory Use (2)

Need PERL_DEBUG_MSTATS

Page 22: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 22/51

Database query time 

DBI::Profile: 0.001015s (5 calls) db_script @ YYYY-MM-DD HH:MM:SS'' => 0.000024s / 2 = 0.000012s avg (first 0.000015s, min 0.000009s,

 max 0.000015s)'SELECT mode,size,name FROM table' => 

0.000991s / 3 = 0.000330s avg (first 0.000678s, min 0.000009s, max 0.000678s)

$ DBI_PROFILE=2 db_script

Page 23: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 23/51

Benchmark.pmcomes with

Perl...

Page 24: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 24/51

...and it sux ...

Sux : Sucks :: Kwalitee : Quality

Page 25: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 25/51

use Benchmark 'cmpthese';

 my @long = ('a' .. 'z', '');

 my $iter = shift || -1;

cmpthese($iter,{long_block_ne => q{grep {$_ ne ''} @long},long_block_len => q{grep {length} @long},long_bare_ne => q{grep $_ ne '', @long},long_bare_len => q{grep length, @long},

});

ht tp://www.perlmonks.org/index.pl?node_id=536503

Common misuse 

Page 26: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 26/51

Rate bare_ne block_len block_ne bare_len

long_bare_ne 3635361/s -- -6% -6% -8%long_block_len 3869054/s 6% -- -0% -2%long_block_ne 3872708/s 7% 0% -- -2%long_bare_len 3963159/s 9% 2% 2% --

What’s wrong with this picture?

Page 27: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 27/51

Rate bare_len bare_ne block_ne block_lenlong_bare_len 2805822/s -- -0% -1% -3%long_bare_ne 2805822/s 0% -- -1% -3%long_block_ne 2840569/s 1% 1% -- -2%long_block_len 2885232/s 3% 3% 2% --

Mac OS X.4.5

15” G4 Powerbook perl5.8.4

Page 28: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 28/51

This is perl, v5.8.4 built for darwin-2level

Summary of my perl5 (revision 5 version 8 subversion 4) configuration:Platform:osname=darwin, osvers=7.3.1, archname=darwin-2leveluname='darwin albook.local 7.3.1 darwin kernel version 7.3.1: mon mar 22

21:48:41 pst 2004; root:xnuxnu-517.4.12.obj~2release_ppc power macintosh powerpc 'config_args=''hint=recommended, useposix=true, d_sigaction=defineusethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undefuseperlio=define d_sfio=undef uselargefiles=define usesocks=undefuse64bitint=undef use64bitall=undef uselongdouble=undefusemymalloc=n, bincompat5005=undef

Compiler:  cc='cc', ccflags ='-pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing',

optimize='-Os',cppflags='-no-cpp-precomp -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-

strict-aliasing'ccversion='', gccversion='3.3 20030304 (Apple Computer, Inc. build 1640)',

gccosandvers=''intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8alignbytes=8, prototype=define

Linker and Libraries:ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =''libpth=/usr/liblibs=-ldbm -ldl -lm -lcperllibs=-ldl -lm -lclibc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.agnulibc_version=''

Dynamic Linking:dlsrc=dl_dyld.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' 'cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup'

Page 29: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 29/51

Millions 

of times

a second?

Page 30: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 30/51

use Benchmark 'cmpthese';

our @long = ('a' .. 'z', '');

 my $iter = shift || -1;

cmpthese($iter,{

long_block_ne => q{ my @array = grep {$_ ne ''} @long},long_block_len => q{ my @array = grep {length} @long},long_bare_ne => q{ my @array = grep $_ ne '', @long},long_bare_len => q{ my @array = grep length, @long},

}

);

Do something useful

Page 31: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 31/51

Rate block_ne block_len bare_ne bare_lenlong_block_ne 31210/s -- -3% -3% -5%long_block_len 32119/s 3% -- -0% -2%long_bare_ne 32237/s 3% 0% -- -2%long_bare_len 32755/s 5% 2% 2% --

These numbers make sense 

Page 32: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 32/51

use Benchmark 'cmpthese';

our @long = ('a' .. 'z', 0 .. 10_000, '');

 my $iter = shift || -1;

cmpthese($iter,{

long_block_ne => q{my @array = grep {$_ ne ''} @long},long_block_len => q{my @array = grep {length} @long},long_bare_ne => q{my @array = grep $_ ne '', @long},long_bare_len => q{my @array = grep length, @long},

});

Don’t Trust! Verify!

Page 33: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 33/51

Rate bare_ne block_ne block_len bare_len

long_bare_ne 59.8/s -- -1% -2% -3%long_block_ne 60.4/s 1% -- -1% -3%long_block_len 60.9/s 2% 1% -- -2%long_bare_len 61.9/s 4% 3% 2% --

It takes longer to do more 

Page 34: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 34/51

Theory of Measurement 

Observation changes the universe 

Nothing is objective 

Tools have inherent uncertainities

Page 35: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 35/51

Precision

is

repeatability

Page 36: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 36/51

Accuracy

isgetting the 

right answer 

Page 37: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 37/51

precision != accuracy

Page 38: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 38/51

 you

 want 

both

Page 39: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 39/51

Benchmark.pm’s

benchmark Uses a null loop as a control

sub { }

It’s just a timer 

Subtracts the null loop time 

Introduces an error of about 7%

Page 40: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 40/51

$ time perl script.pl

real 0m0.293suser 0m0.130ssys 0m0.036s

ht tp://ppt.per l.org/

Page 41: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 41/51

The map is not the terrain my @selected = grep { ... } @array;

() = grep { ... } @array; my @selected = @array; my @selected = ( ... ); my @selected ;

Page 42: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 42/51

$ perl -MO=Concise -e 'grep { lc } @array'

a <@> leave[1 ref] vKP/REFC ->(end)1 <0> enter ->22 <;> nextstate(main 2 -e:1) v ->37 <|> grepwhile(other->8)[t4] vK/1 ->a6 <@> grepstart K*/2 ->73 <0> pushmark s ->4- <1> null lK/1 ->4- <1> null sK/1 ->7

- <@> scope sK ->7- <0> ex-nextstate v ->89 <1> lc[t2] sK/1 ->-- <1> ex-rv2sv sK/1 ->98 <$> gvsv(*_) s ->95 <1> rv2av[t3] lKM/1 ->64 <$> gv(*array) s ->5

Page 43: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 43/51

$ perl -MO=Concise -e '() = grep { lc } @array'

d <@> leave[1 ref] vKP/REFC ->(end)1 <0> enter ->22 <;> nextstate(main 2 -e:1) v ->3c <2> aassign[t5] vKS/COMMON ->d - <1> ex-list lK ->b3 <0> pushmark s ->48 <|> grepwhile(other->9)[t4] lK/1 ->b7 <@> grepstart lK*/2 ->8

4 <0> pushmark s ->5- <1> null lK/1 ->5- <1> null sK/1 ->8- <@> scope sK ->8- <0> ex-nextstate v ->9a <1> lc[t2] sK/1 ->-- <1> ex-rv2sv sK/1 ->a9 <$> gvsv(*_) s ->a6 <1> rv2av[t3] lKM/1 ->75 <$> gv(*array) s ->6- <1> ex-list lK ->c

 b <0> pushmark s ->c- <0> stub lPRM* ->-

Page 44: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 44/51

$ perl -MO=Concise -e ' my @selected = grep { lc } @array'

e <@> leave[1 ref] vKP/REFC ->(end)1 <0> enter ->22 <;> nextstate(main 2 -e:1) v ->3d <2> aassign[t6] vKS ->e- <1> ex-list lK ->b3 <0> pushmark s ->48 <|> grepwhile(other->9)[t5] lK/1 ->b7 <@> grepstart lK*/2 ->8

4 <0> pushmark s ->5- <1> null lK/1 ->5- <1> null sK/1 ->8- <@> scope sK ->8- <0> ex-nextstate v ->9a <1> lc[t3] sK/1 ->-- <1> ex-rv2sv sK/1 ->a9 <$> gvsv(*_) s ->a6 <1> rv2av[t4] lKM/1 ->75 <$> gv(*array) s ->6- <1> ex-list lK ->d 

 b <0> pushmark s ->cc <0> padav[@selected:2,3] lRM*/LVINTRO ->d 

Page 45: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 45/51

“Premature  optimization

is the 

root of allevil” Tony Hoare 

Page 46: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 46/51

What  

do I

benchmark?

Page 47: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 47/51

Find the bad partsProfile the application first 

Find out who’s taking al l the t ime/memory/network 

Compare situations

Fix that first 

Page 48: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 48/51

 perl -d:SmallProf script

Page 49: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 49/51

Better 

algorithms 

do better 

Page 50: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 50/51

SummaryDecide what is important to you

Realize you have bias

Report the situation

Don’t turn off your brain

Make predictions that you can verify

Page 51: Bench Marking Perl

7/31/2019 Bench Marking Perl

http://slidepdf.com/reader/full/bench-marking-perl 51/51

Further Reading

“Benchmarking”, The Per l Journal #11,

ht tp://www.pair.com/~comdog/Art icles/benchmark.1_4.txt 

“Wasting Time Thinking About Wasted Time”,ht tp://www.perlmonks.org/?node_id=393128

 “Profiling in Perl”,

http://www.ddj.com/documents/s=1498/ddj0104pl/


Recommended