Subject: Re: SymCache optimization (was Re: New ld.elf_so from FreeBSD)
To: Bang Jun-Young <junyoung@mogua.com>
From: Charles Hannum <abuse@spamalicious.com>
List: tech-toolchain
Date: 09/05/2002 21:39:44
Actually, there is another solution for C++ startup performance:
Solaris's `-z combreloc'. It appears that BFD already sorts
relocations by symbol, so the only support necessary for this is in
ld.elf_so. I've checked in some changes, for i386, `#ifdef
COMBRELOC', that implement this. You can see that it's trivial.
Interestingly, I instrumented this and ran mozilla, and I see that
most of the lookups that benefit from it are to __pure_virtual. The
actual numbers are below.
In principal, if ld(1) is doing its job correctly, this limits the
maximum number of lookups for a given symbol to 3 (1 for
R_TYPE(32/DIR32/ABS32/REFQUAD/whatever), 1 for R_TYPE(GLOB_DAT), and 1
for R_TYPE(JMP_SLOT) in the PLT). The SymCache change limits it to 2
(since it affects everything except R_TYPE(JMP_SLOT)), at the expense
of temporary memory usage and some other overhead associated with
that.
37116 matched __pure_virtual
201 matched XtStrings
74 matched JS_PropertyStub
72 matched _PR_InvalidInt
57 matched XtShellStrings
54 matched FLG_NONE
50 matched doCreate__14nsDOMClassInfoP18nsDOMClassInfoData
49 matched doCreate__15nsHTMLElementSHP18nsDOMClassInfoData
43 matched _XtInherit
30 matched FLG_ZHTW
26 matched _PR_InvalidStatus
9 matched ParseLiteral__14BookmarkParserP14nsIRDFResourceR8nsStringPP10nsIRDFNode
9 matched doCreate__11nsElementSHP18nsDOMClassInfoData
7 matched js_InitObjectClass
6 matched FLG_ZHCN
6 matched doCreate__8nsNodeSHP18nsDOMClassInfoData
5 matched FEI_x_mathematica5
4 matched FEI_x_mathematica3
4 matched FLG_JA
4 matched FLG_KO
4 matched FLG_WESTERN
3 matched Create__17nsAboutRedirectorP11nsISupportsRC4nsIDPPv
3 matched FEI_x_mathematica1
3 matched FEI_x_mathematica2
3 matched FEI_x_mathematica4
3 matched ParseDate__14BookmarkParserP14nsIRDFResourceR8nsStringPP10nsIRDFNode
2 matched _end
2 matched js_SetProtoOrParent
1 matched Create__13nsHttpHandlerP11nsISupportsRC4nsIDPPv
1 matched Create__16nsPluginHostImplP11nsISupportsRC4nsIDPPv
1 matched FEI_windows_1252
1 matched FEI_x_mtextra
1 matched XtMenuPopupAction
1 matched _12nsXBLService$gClassLRUList
1 matched _13nsProfileLock$mPidLockList
1 matched _XimTransConf
1 matched _jsd_context_list
1 matched _pr_active_global_threadQ
1 matched _pr_active_local_threadQ
1 matched _pr_cpuQ
1 matched _pr_freeStacks
1 matched compositeClassRec
1 matched doCreate__15nsCSSRuleListSHP18nsDOMClassInfoData
1 matched doCreate__16nsCSSStyleDeclSHP18nsDOMClassInfoData
1 matched js_InitExceptionClasses
1 matched js_arguments_str
1 matched js_false_str
1 matched js_getter_str
1 matched js_in_str
1 matched js_instanceof_str
1 matched js_null_str
1 matched js_setter_str
1 matched js_this_str
1 matched js_true_str
1 matched jsj_JavaConstructorWrapper
1 matched uHitFormate0
1 matched widgetClassRec