Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??

This all started with a report from a user about Class::Accessor::Grouped being much slower on 5.10 compared to 5.8.8.

At this point, I call 'not it'...but only because I really don't know what in the hell is going on. Two brand new fresh FreeBSD 6.2 installs. One with a a compiled (not ports) Perl 5.8.8 and the other with a compiled 5.10.0.

The test case is simple set_inherited, sans C::A::G in the picture, since the reporter noted set was slower as well (which BTW has no MRO interaction):

#test.pl use lib '.'; use Foo; use Benchmark ':all'; my $f = bless {}, 'Foo'; timethese(0, { set_inherited_class => sub {Foo->set_inherited('bar', 'baz')}, set_inherited_object => sub {$f->set_inherited('bar', 'baz')} }); ##Foo.pm package Foo; use Scalar::Util qw/blessed reftype/; sub set_inherited { my ($self, $set, $val) = @_; if (blessed $self) { if (reftype $self eq 'HASH') { return $self->{$set} = $val; } else { croak('Cannot set inherited value on an object instance th +at is not hash-based'); }; } else { no strict 'refs'; return ${$self.'::__cag_'.$set} = $val; }; } 1;

The results are:

Perl 5.8.8 Machine: > Benchmark: running set_inherited_class, set_inherited_object for at +least 3 CPU seconds... > set_inherited_class: 4 wallclock secs ( 3.16 usr + 0.00 sys = 3.1 +6 CPU) @ 575596.40/s (n=1821223) > set_inherited_object: 3 wallclock secs ( 3.16 usr + -0.01 sys = 3. +15 CPU) @ 687794.82/s (n=2165479) > claco@fbsd588 ~ $ Perl 5.10.0 Machine: > Benchmark: running set_inherited_class, set_inherited_object for at +least 3 CPU seconds... > set_inherited_class: 3 wallclock secs ( 3.12 usr + 0.01 sys = 3.1 +3 CPU) @ 335388.09/s (n=1050708) > set_inherited_object: 2 wallclock secs ( 3.15 usr + 0.00 sys = 3. +15 CPU) @ 412676.76/s (n=1299287) > claco@fbsd510 ~ $

My to my shock, if I whittle down the code in set_inherited to just this:

package Foo; use Scalar::Util qw/blessed reftype/; sub set_inherited { my ($self, $set, $val) = @_; } 1;

performance still seriouesly sucks:

5.8.8 > Benchmark: running set_inherited_class, set_inherited_object for at +least 3 CPU seconds... > set_inherited_class: 3 wallclock secs ( 3.08 usr + 0.02 sys = 3.0 +9 CPU) @ 1199923.07/s (n=3712262) > set_inherited_object: 4 wallclock secs ( 3.27 usr + 0.00 sys = 3. +27 CPU) @ 1380589.06/s (n=4519272) > claco@fbsd588 ~ $ 5.10.0 > Benchmark: running set_inherited_class, set_inherited_object for at +least 3 CPU seconds... > set_inherited_class: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.1 +0 CPU) @ 536733.34/s (n=1664712) > set_inherited_object: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3. +13 CPU) @ 638055.42/s (n=1998908) > claco@fbsd510 ~ $

A this point, I'm stumped. my ($, $, $) = @_; is a common idiom. Changing to this makes 5.10 faster.

package Foo; use Scalar::Util qw/blessed reftype/; sub set_inherited { my $self = shift; my $set = shift; my $val = shift; } 1;

I know shift is always faster than assigning @_, but the performaance difference of assigning @_ on 5.10 vs. 5.8.8 is worrysome to me.

Updated with -V output

Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=freebsd, osvers=6.2-release, archname=i386-freebsd uname='freebsd fbsd588.local 6.2-release freebsd 6.2-release #0: f +ri jan 12 10:40:27 utc 2007 root@dessler.cse.buffalo.edu:usrobjusrsrc +sysgeneric i386 ' config_args='-de' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultipl +icity=undef useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-stri +ct-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include' +, optimize='-O', cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasi +ng -pipe -Wdeclaration-after-statement -I/usr/local/include' ccversion='', gccversion='3.4.6 [FreeBSD] 20060305', gccosandvers= +'' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +2 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags ='-Wl,-E -L/usr/local/lib' libpth=/usr/lib /usr/local/lib libs=-lm -lcrypt -lutil -lc perllibs=-lm -lcrypt -lutil -lc libc=, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-DPIC -fPIC', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO Built under freebsd Compiled at Dec 22 2007 15:52:43 @INC: /usr/local/lib/perl5/5.8.8/i386-freebsd /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/i386-freebsd /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl . ------------- Summary of my perl5 (revision 5 version 10 subversion 0) configuration +: Platform: osname=freebsd, osvers=6.2-release, archname=i386-freebsd uname='freebsd fbsd510.local 6.2-release freebsd 6.2-release #0: f +ri jan 12 10:40:27 utc 2007 root@dessler.cse.buffalo.edu:usrobjusrsrc +sysgeneric i386 ' config_args='' hint=recommended, useposix=true, d_sigaction=define useithreads=undef, usemultiplicity=undef useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-stri +ct-aliasing -pipe -I/usr/local/include', optimize='-O', cppflags='-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasi +ng -pipe -I/usr/local/include' ccversion='', gccversion='3.4.6 [FreeBSD] 20060305', gccosandvers= +'' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +2 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags ='-Wl,-E -L/usr/local/lib' libpth=/usr/lib /usr/local/lib libs=-lm -lcrypt -lutil -lc perllibs=-lm -lcrypt -lutil -lc libc=, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-DPIC -fPIC', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO Built under freebsd Compiled at Dec 22 2007 17:32:47 @INC: /usr/local/lib/perl5/5.10.0/i386-freebsd /usr/local/lib/perl5/5.10.0 /usr/local/lib/perl5/site_perl/5.10.0/i386-freebsd /usr/local/lib/perl5/site_perl/5.10.0 .

Updated: Also this from a thread on use.perl. I hate cross posting, but given the nature of this issue...


In reply to 5:10: Why is this slower than 5.8.8? by jk2addict

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others about the Monastery: (5)
    As of 2015-07-06 06:58 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









      Results (70 votes), past polls