Skip Menu |
 
Report information
Id: 43283
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: rnorwood <rnorwood [at] redhat.com>
Cc:
AdminCc:

Operating System: Linux
PatchStatus: (no value)
Severity: High
Type: core
Perl Version: 5.8.8
Fixed In: (no value)



Subject: Reblessing overloaded objects incurs significant performance penalty
Date: Thu, 21 Jun 2007 16:13:54 -0400
To: perlbug [...] perl.org
From: Robin Norwood <rnorwood [...] redhat.com>
Download (untitled) / with headers
text/plain 5.7k
This is a bug report for perl from rnorwood@redhat.com, generated with the help of perlbug 1.35 running under perl v5.8.8. ----------------------------------------------------------------- Apparently this change: http://rt.perl.org/rt3//Public/Bug/Display.html?id=34925 Causes a significant performance hit for user's of Fedora's perl. This issue is in Red Hat's bugzilla here: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196836 The test script mentioned in comment #6: use Benchmark; timethese(shift || 100000, { 'overload' => sub { push our @array, TestOverload->new }, 'not overload' => sub { push our @array, TestNoverload->new }, }); package TestNoverload; sub new { bless { hoge => 'hoge' }, shift } package TestOverload; use overload ( q{""} => sub {}, ); sub new { bless { hoge => 'hoge' }, shift } Produces the following results on this system: <<EOQ Benchmark: timing 100000 iterations of not overload, overload... not overload: 1 wallclock secs ( 0.47 usr + 0.16 sys = 0.63 CPU) @ 158730.16/s (n=100000) overload: 962 wallclock secs (414.86 usr + 100.95 sys = 515.81 CPU) @ 193.87/s (n=100000) EOQ Let me know if I can provide any assistance reproducing this problem. ----------------------------------------------------------------- --- Flags: category=core severity=high --- This perlbug was built using Perl v5.8.8 in the Red Hat build system. It is being executed now by Perl v5.8.8 - Wed May 16 23:22:00 EDT 2007. Site configuration information for perl v5.8.8: Configured by Red Hat, Inc. at Wed May 16 23:22:00 EDT 2007. Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.19-1.2895.fc6xen, archname=i386-linux-thread-multi uname='linux xenbuilder1.fedora.redhat.com 2.6.19-1.2895.fc6xen #1 smp wed jan 10 19:09:13 est 2007 i686 athlon i386 gnulinux ' config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dinc_version_list=5.8.7 5.8.6 5.8.5 -Dscriptdir=/usr/bin' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm', optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables', cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm' ccversion='', gccversion='4.1.2 20070502 (Red Hat 4.1.2-12)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='gcc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=/lib/libc-2.6.so, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.6' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib' Locally applied patches: --- @INC for perl v5.8.8: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 . --- Environment for perl v5.8.8: HOME=/root LANG=en_US.UTF-8 LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PERL_BADLANG (unset) SHELL=/bin/bash
Subject: Re: [perl #43283] Reblessing overloaded objects incurs significant performance penalty
Date: Fri, 22 Jun 2007 09:55:59 +0100
To: perl5-porters [...] perl.org
From: Nicholas Clark <nick [...] ccl4.org>
Download (untitled) / with headers
text/plain 920b
On Thu, Jun 21, 2007 at 01:14:46PM -0700, Robin Norwood wrote: Show quoted text
> ----------------------------------------------------------------- > Apparently this change: > > http://rt.perl.org/rt3//Public/Bug/Display.html?id=34925 > > Causes a significant performance hit for user's of Fedora's perl. This issue is in Red Hat's bugzilla here:
That change (27512) postdates the release of 5.8.8 I thought that it was fixed with change 28775. Has that been integrated to Fedora's perl? http://public.activestate.com/cgi-bin/perlbrowse?patch_num=28775&show_patch=Show+Patch Change 28775 by nicholas@nicholas-saigo on 2006/09/02 16:01:36 Integrate: [ 28771] Change the generation of {} and [] from 3 ops to 1, and avoid 1 mortal on the tempstack, by augmenting pp_anonlist and pp_anonhash to accept OPf_SPECIAL to mean "return a reference to the aggregate" on the stack rather than the aggregate itself. Nicholas Clark
Subject: Re: [perl #43283] Reblessing overloaded objects incurs significant performance penalty
Date: Fri, 22 Jun 2007 11:04:22 -0400
To: perlbug-followup [...] perl.org
From: Robin Norwood <rnorwood [...] redhat.com>
Download (untitled) / with headers
text/plain 1.2k
"Nicholas Clark via RT" <perlbug-followup@perl.org> writes: Show quoted text
> On Thu, Jun 21, 2007 at 01:14:46PM -0700, Robin Norwood wrote: >
>> ----------------------------------------------------------------- >> Apparently this change: >> >> http://rt.perl.org/rt3//Public/Bug/Display.html?id=34925 >> >> Causes a significant performance hit for user's of Fedora's perl. This issue is in Red Hat's bugzilla here:
> > That change (27512) postdates the release of 5.8.8 > I thought that it was fixed with change 28775. > Has that been integrated to Fedora's perl? > > http://public.activestate.com/cgi-bin/perlbrowse?patch_num=28775&show_patch=Show+Patch
Yep, it looks like we took the 27512 patch and neglected the 28775 patch. I'll build another perl with that patch and let you know what I see. Thanks! -RN Show quoted text
> Change 28775 by nicholas@nicholas-saigo on 2006/09/02 16:01:36 > > Integrate: > [ 28771] > Change the generation of {} and [] from 3 ops to 1, and avoid 1 mortal > on the tempstack, by augmenting pp_anonlist and pp_anonhash to accept > OPf_SPECIAL to mean "return a reference to the aggregate" on the stack > rather than the aggregate itself. > > > > Nicholas Clark > >
-- Robin Norwood Red Hat, Inc. "The Sage does nothing, yet nothing remains undone." -Lao Tzu, Te Tao Ching
Subject: Re: [perl #43283] Reblessing overloaded objects incurs significant performance penalty
Date: Fri, 22 Jun 2007 16:04:36 -0400
To: perlbug-followup [...] perl.org
From: Robin Norwood <rnorwood [...] redhat.com>
Download (untitled) / with headers
text/plain 248b
Hi, A patch derived from change #28775 fixes the problem on my test system. I'll apply it to Fedora's perl. Thanks for your help. -RN -- Robin Norwood Red Hat, Inc. "The Sage does nothing, yet nothing remains undone." -Lao Tzu, Te Tao Ching


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org