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

hints/openbsd.sh - usemymalloc slows down newer openbsd #10440

Closed
p5pRT opened this issue Jun 14, 2010 · 4 comments
Closed

hints/openbsd.sh - usemymalloc slows down newer openbsd #10440

p5pRT opened this issue Jun 14, 2010 · 4 comments

Comments

@p5pRT
Copy link

@p5pRT p5pRT commented Jun 14, 2010

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

Searchable as RT75742$

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 14, 2010

From sullr@cpan.org

Created by sullr@cpan.org

Hi,

the hints file for openbsd contains the idea, that openbsd has a better
malloc than perl. This is far from true for openbsd > 3.7 where it
replaced the malloc with a mmap based which can reclaim memory.
While this malloc might perform good for other applications it is a
nightmare for perl, slowing it down by a factor of up to 2.5 !

To get this number the following simple Benchmark was used​:

  1 for( my $i=0;$i<100000;$i++ ) {
  2 my @​x = map { $i } (1..100);
  3 my $x = join('',@​x);
  4 @​x = split('',$x);
  5 }

While this benchmark is artificial we noticed the heavy slowdown also
with real world application which prompted us to compile our own perl
with usemymalloc=y.
Another slowdown is useshrplib (25%).

Slowdowns with these options are also on Linux (Ubuntu 10.04​:
usemymalloc=n​: 15%, useshrplib=y​: 20%).

If you want more of these unscientific results see my talk (in german)
at the german perl​: workshop http​://maulwuff.de/pws/2010/ccopt.html.

Regards,
Steffen

Perl Info

Flags:
    category=install
    severity=medium

Site configuration information for perl 5.10.1:

Configured by Debian Project at Fri Apr 23 07:59:14 UTC 2010.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
   
  Platform:
    osname=linux, osvers=2.6.24-27-server, archname=i486-linux-gnu-thread-multi
    uname='linux vernadsky 2.6.24-27-server #1 smp fri mar 12 01:45:06 utc 2010 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    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='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.4.3', 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='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.11.1.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
    gnulibc_version='2.11.1'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches:
    


@INC for perl 5.10.1:
    /etc/perl
    /usr/local/lib/perl/5.10.1
    /usr/local/share/perl/5.10.1
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.10
    /usr/share/perl/5.10
    /usr/local/lib/site_perl
    .


Environment for perl 5.10.1:
    HOME=/home/steffen
    LANG=en_US.UTF-8
    LANGUAGE=
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/steffen/genua/bin:/home/steffen/bin:/Users/Shared/Software/perl-5.8.7/bin:/Users/Shared/Software/sqlite3/bin:/usr/lib/postgresql/8.3/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

Loading

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 15, 2010

From @rgs

Fixed by change below

commit 9b58b54
Author​: Rafael Garcia-Suarez <rgs@​consttype.org>
Date​: Tue Jun 15 10​:16​:35 2010 +0200

  usemymalloc slows down newer openbsd [perl #75742]

Inline Patch
diff --git a/hints/openbsd.sh b/hints/openbsd.sh
index e4b1360..f13091d 100644
--- a/hints/openbsd.sh
+++ b/hints/openbsd.sh
@@ -8,8 +8,12 @@
 #      ./Configure -des -Dopenbsd_distribution=defined
 #
 
-# OpenBSD has a better malloc than perl...
-test "$usemymalloc" || usemymalloc='n'
+# In OpenBSD > 3.7, use perl's malloc [perl #75742]
+case "$osvers" in
+3.[89]*|[4-9]*)
+    test "$usemymalloc" || usemymalloc=y
+    ;;
+esac
 
 # malloc wrap works
 case "$usemallocwrap" in

Loading

@p5pRT
Copy link
Author

@p5pRT p5pRT commented Jun 15, 2010

@rgs - Status changed from 'new' to 'resolved'

Loading

@p5pRT p5pRT closed this Jun 15, 2010
@p5pRT
Copy link
Author

@p5pRT p5pRT commented May 15, 2011

From otto@drijf.net

Indeed, OpenBSD malloc is slower, but has many other desirable features, like randomization
and unmapping of unused memory.

I'd like to mention that work has been done in OpenBSD to make the slowdown of small chunk
allocation much less while still keeping the features. This work will be in the OpenBSD 5.0
release.

-Otto

Loading

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