From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/7787 Path: news.gmane.org!not-for-mail From: Alexander Monakov Newsgroups: gmane.linux.lib.musl.general Subject: Re: Question re: dynamic linking in musl Date: Wed, 27 May 2015 16:01:50 +0300 (MSK) Message-ID: References: <20150527100844.GA306@alex-ThinkPad-L530> <5565A812.9090004@gmail.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Trace: ger.gmane.org 1432731724 30393 80.91.229.3 (27 May 2015 13:02:04 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 27 May 2015 13:02:04 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-7799-gllmg-musl=m.gmane.org@lists.openwall.com Wed May 27 15:02:04 2015 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1YxayB-0006qS-Or for gllmg-musl@m.gmane.org; Wed, 27 May 2015 15:02:03 +0200 Original-Received: (qmail 23786 invoked by uid 550); 27 May 2015 13:02:02 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 23761 invoked from network); 27 May 2015 13:02:01 -0000 In-Reply-To: <5565A812.9090004@gmail.com> User-Agent: Alpine 2.11 (LNX 23 2013-08-11) Xref: news.gmane.org gmane.linux.lib.musl.general:7787 Archived-At: On Wed, 27 May 2015, Alex Dowad wrote: > > Can you also provide exact figures? For example your callgrind logs? Or > > just > > 'time' statistics for executables that spend much time in the dynamic > > linker. > Callgrind data attached. Oh. The profile makes it evident that most of the libraries lack .gnu.hash, and the lookup is almost always using SysV lookup. With many dependencies SysV lookup is slower: in my testing with Clang/LLVM I got something like 420 ms (compared to 240 ms unpatched or 110 ms patched musl with .gnu.hash lookup). I'm not familiar with Alpine. Hopefully someone else can chime in whether .gnu.hash is deliberately disabled. (since raw callgrind log is not readable, I'm pasting callgrind_annotate'd version of your data below) Alexander -------------------------------------------------------------------------------- Profile data file '/tmp/callgrind.out.8354' (creator: callgrind-3.10.1) -------------------------------------------------------------------------------- I1 cache: D1 cache: LL cache: Timerange: Basic block 0 - 2937079 Trigger: Program termination Profiled target: rrdtool update test.rrd N:0:1:U (PID 8354, part 1) Events recorded: Ir Events shown: Ir Event sort order: Ir Thresholds: 99 Include dirs: User annotated: Auto-annotation: off -------------------------------------------------------------------------------- Ir -------------------------------------------------------------------------------- 13,149,006 PROGRAM TOTALS -------------------------------------------------------------------------------- Ir file:function -------------------------------------------------------------------------------- 4,483,216 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:sysv_lookup [/lib/ld-musl-i386.so.1] 3,678,465 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strcmp.c:strcmp [/lib/ld-musl-i386.so.1] 2,002,146 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:find_sym [/lib/ld-musl-i386.so.1] 823,546 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:sysv_hash [/lib/ld-musl-i386.so.1] 779,623 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:do_relocs [/lib/ld-musl-i386.so.1] 351,069 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:gnu_lookup [/lib/ld-musl-i386.so.1] 145,380 ???:0x00011f38 [/lib/ld-musl-i386.so.1] 56,370 ???:0x0002ad86 [/usr/lib/libgobject-2.0.so.0.4200.0] 48,357 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vfprintf.c:printf_core [/lib/ld-musl-i386.so.1] 45,725 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:load_library [/lib/ld-musl-i386.so.1] 40,118 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:decode_vec [/lib/ld-musl-i386.so.1] 35,294 ???:0x0002ad34 [/usr/lib/libgobject-2.0.so.0.4200.0] 35,056 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/i386/memset.s:0x0004c919 [/lib/ld-musl-i386.so.1] 30,486 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/calloc.c:calloc [/lib/ld-musl-i386.so.1] 29,919 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/malloc.c:free [/lib/ld-musl-i386.so.1] 28,151 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/malloc.c:malloc [/lib/ld-musl-i386.so.1] 27,275 ???:g_str_hash [/usr/lib/libglib-2.0.so.0.4200.0] 26,987 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strncmp.c:strncmp [/lib/ld-musl-i386.so.1] 20,900 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strlen.c:strlen [/lib/ld-musl-i386.so.1] 20,638 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strchrnul.c:strchrnul [/lib/ld-musl-i386.so.1] 20,052 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/fwrite.c:__fwritex [/lib/ld-musl-i386.so.1] 20,046 ???:0x00032dd4 [/usr/lib/libglib-2.0.so.0.4200.0] 15,075 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:map_library [/lib/ld-musl-i386.so.1] 13,535 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strcspn.c:strcspn [/lib/ld-musl-i386.so.1] 13,074 ???:g_value_register_transform_func [/usr/lib/libgobject-2.0.so.0.4200.0] 12,988 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/i386/memcpy.s:0x0004c3ce [/lib/ld-musl-i386.so.1] 12,720 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vfprintf.c:pad [/lib/ld-musl-i386.so.1] 11,908 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/memchr.c:memchr [/lib/ld-musl-i386.so.1] 11,092 ???:0x00008060 [/usr/lib/libgobject-2.0.so.0.4200.0] 10,941 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:decode_dyn [/lib/ld-musl-i386.so.1] 9,784 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/malloc.c:trim [/lib/ld-musl-i386.so.1] 9,192 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/env/getenv.c:getenv [/lib/ld-musl-i386.so.1] 8,912 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vfprintf.c:out [/lib/ld-musl-i386.so.1] 8,593 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/malloc.c:unbin [/lib/ld-musl-i386.so.1] 8,060 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/malloc/malloc.c:bin_index [/lib/ld-musl-i386.so.1] 7,244 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/i386/memmove.s:0x0004c891 [/lib/ld-musl-i386.so.1] 6,960 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vsnprintf.c:vsnprintf [/lib/ld-musl-i386.so.1] 6,579 ???:0x000270c4 [/usr/lib/libgobject-2.0.so.0.4200.0] 6,484 ???:0x00032f3c [/usr/lib/libglib-2.0.so.0.4200.0] 6,422 ???:0x000330e7 [/usr/lib/libglib-2.0.so.0.4200.0] 6,339 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:load_deps [/lib/ld-musl-i386.so.1] 6,312 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strspn.c:strspn [/lib/ld-musl-i386.so.1] 6,171 ???:0x00050c1f [/usr/lib/libglib-2.0.so.0.4200.0] 6,080 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vfprintf.c:vfprintf [/lib/ld-musl-i386.so.1] 5,743 ???:0x00024749 [/usr/lib/libgobject-2.0.so.0.4200.0] 5,574 ???:0x00082a88 [/usr/lib/libglib-2.0.so.0.4200.0] 5,529 ???:g_hash_table_insert [/usr/lib/libglib-2.0.so.0.4200.0] 5,165 ???:0x000244d1 [/usr/lib/libgobject-2.0.so.0.4200.0] 4,860 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/strchr.c:strchr [/lib/ld-musl-i386.so.1] 4,774 ???:0x0002ad02 [/usr/lib/libgobject-2.0.so.0.4200.0] 4,648 ???:g_hash_table_lookup [/usr/lib/libglib-2.0.so.0.4200.0] 3,816 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/stdio/vfprintf.c:pop_arg [/lib/ld-musl-i386.so.1] 3,790 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/stpcpy.c:stpcpy [/lib/ld-musl-i386.so.1] 3,709 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/internal/syscall_ret.c:__syscall_ret [/lib/ld-musl-i386.so.1] 3,634 ???:g_malloc0 [/usr/lib/libglib-2.0.so.0.4200.0] 3,619 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/internal/i386/syscall.s:0x0001cbd7 [/lib/ld-musl-i386.so.1] 3,592 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/ldso/dynlink.c:path_open.constprop.3 [/lib/ld-musl-i386.so.1] 3,441 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/string/memrchr.c:memrchr [/lib/ld-musl-i386.so.1] 3,386 /home/buildozer/aports/main/musl/src/musl-1.1.5/src/thread/pthread_rwlock_unlock.c:pthread_rwlock_unlock [/lib/ld-musl-i386.so.1]