Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reblessing overloaded objects incurs significant performance penalty #8940

Closed
p5pRT opened this issue Jun 21, 2007 · 6 comments
Closed

Reblessing overloaded objects incurs significant performance penalty #8940

p5pRT opened this issue Jun 21, 2007 · 6 comments

Comments

@p5pRT
Copy link

@p5pRT p5pRT commented Jun 21, 2007

Migrated from rt.perl.org#43283 (status was 'resolved')

Searchable as RT43283$

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 21, 2007

From rnorwood@redhat.com

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

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 22, 2007

From @nwc10

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

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

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 22, 2007

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 22, 2007

From rnorwood@redhat.com

"Nicholas Clark via RT" <perlbug-followup@​perl.org> writes​:

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

Change 28775 by nicholas@​nicholas-saigo on 2006/09/02 16​:01​:36

Integrate&#8203;:
\[ 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

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 22, 2007

From rnorwood@redhat.com

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

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Apr 29, 2008

p5p@spam.wizbit.be - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant