Closed Bug 7748 Opened 26 years ago Closed 24 years ago

DLL bloat in M6

Categories

(Core :: Internationalization, defect, P3)

x86
Windows 95
defect

Tracking

()

VERIFIED FIXED
Future

People

(Reporter: bobj, Assigned: waterson)

References

Details

(Keywords: memory-footprint)

Attachments

(2 files)

Somehow, most of the I18N modules (even those that had little or no changes), bloated from M5 to M6. lwbrk nslocale strres uconv ucvcn ucvja ucvja2 ucvlatin unicharutil 9488 25312 6800 23808 243120 60464 111360 46496 9360 25344 42192 21120 35104 255360 70656 124112 58336 21328 Something happened between 5/11 and 5/12. Possibly XPCom related changes? 1999-05-11-09-M6/size_matters.txt -rw-r--r-- 1 544 everyone 9488 May 11 09:48 lwbrk.dll 1999-05-12-16-M6/size_matters.txt -rw-r--r-- 1 544 everyone 25344 May 12 17:55 lwbrk.dll
Blocks: 7228
Assignee: dp → ftang
No big XPCOM changes went in then. I tried looking for what changed during that time frame but didn't find anything standing out. I will let frank figure it out.
ChrisY and ChrisH, We made little or no changes to most of these modules. Can we get some build/release help to help figure out what happened? Has anyone else's modules been affected like this?
Assignee: ftang → namachi
I have talk to namachi, he believe this is caused by the change waterson check in rev 3.17 of mozilla/config/WIN32 for "Clean up MOZ_PROFILE rules to get working with Quantify." However, that check in is in 6/3, not 5/11. Reassign this bug to namachi
Assignee: namachi → ftang
Frank, Shiva works on talkback. Unless we believe that this is related to talkback in any way this bug should not be assigned to him. The following CVS query can provide a listing of all the changes that were made around the time period of the increase. http://cvs-mirror.mozilla.org/webtools/bonsai/cvsquery.cgi?module=SeaMonkeyAll&b ranch=HEAD&branchtype=match&dir=&file=&filetype=match&who=&whotype=match&sortby= Date&hours=2&date=explicit&mindate=05%2F10%2F99+00%3A00%3A00&maxdate=05%2F12%2F9 9+00%3A00%3A00&cvsroot=%2Fcvsroot I see you made a number of changes in related areas during that time Have we confirmed the following are not related to the increase? add MappingCache mozilla/intl/uconv/src/ and public... add nsMappingCache.cpp add HankakuToZenkaku add nsIMappingCache.h to export list add progid to a number of files mozilla/ intl/ uconv/ public/ add progid. Add nsHankakuToZenkaku.h to the export list Can you do a detailed review of the cvs query to identify any other likely sources?
The theory was that one of the compiler switches caused the increase in size, IIRC. Specifically, for MOZ_PROFILE, I changed the compiler to use /PDB:$(PDBFILE) instead of /PDB:NONE. This creates a program database (debugger info) for each DLL in the optimized build, allowing you to actually play with the build in VC++. Since the PDB is a separate file, it seems strange that it would increase the size of the release DLLs, but, I've seen stranger things happen. Could somebody with some spare machine cycles play around with this flag to test the theory? http://lxr.mozilla.org/seamonkey/source/config/WIN32#72
Chris, It's unlikely to be due to any source change because the bloat only happened on Windows. It seems more likely that something changed in the way it is built or linked.
Status: NEW → ASSIGNED
chofmann: None of the change you mention build into lwbrk.dll except I add progid which should be several bytes, not several thousand bytes. We are sure the reason it blow is out side our source directory (e.g. mozilla/intl/ ) but we are not sure where. That dll only contains the code inside the mozilla/intl/lwbrk directory. Of course, it also link against xpcom. Add namachi to the CC list.
Okay, you guys were right. Bloat came from using /PDB:$(PDBFILE) in MOZ_PROFILE. Turns out that a DLL that is built with the PDB on is slightly larger than a splitsym-ed DLL. So I think the right thing to do is change back to /PDB:NONE in WIN32.
I should add that the difference is really not all that significant (like, 1% maybe). I'm attaching my results from today's build (1999-06-11). pdb-none-splitsym.txt lists the DLLs that were built with /PDB:NONE and then splitsym-ed. pdb-pdbfiles.txt lists the DLLs that were build with /PDB:$(PDBFILE).
Leaf is working on the change. Tomorrow's build will not generate pdb files for Release build. Instead it will generate debug info in .dll's and splitsym will seperate the release .dll and generate debug info as .dbg files. If for some reason we need .pdb files. We should create different tag than MOZ_PROFILE.
Status: ASSIGNED → RESOLVED
Closed: 26 years ago
Resolution: --- → WONTFIX
We find out there are very small changes to the PROFILE and pdb. This must not the real problem. I download the May11 build (lwbrk.dll is 9K) and May12 build (lwbrk.dll is 25K). There are no source difference between that two build for this Dll. And then I do a dumpbin /headers to this two build and the result is the following May-11 Microsoft (R) COFF Binary File Dumper Version 5.00.7022 Copyright (C) Microsoft Corp 1992-1997. All rights reserved. Dump of file lwbrk.dll PE signature found File Type: DLL FILE HEADER VALUES 14C machine (i386) 4 number of sections 3737E842 time date stamp Tue May 11 01:20:18 1999 0 file pointer to symbol table 0 number of symbols E0 size of optional header 230A characteristics Executable Symbols stripped 32 bit word machine Debug information stripped DLL OPTIONAL HEADER VALUES 10B magic # 5.10 linker version 1200 size of code C00 size of initialized data 0 size of uninitialized data 2010 address of entry point 1000 base of code 3000 base of data ----- new ----- 10000000 image base 1000 section alignment 200 file alignment 2 subsystem (Windows GUI) 4.00 operating system version 0.00 image version 4.00 subsystem version 6000 size of image 400 size of headers D4DC checksum 100000 size of stack reserve 1000 size of stack commit 100000 size of heap reserve 1000 size of heap commit 3430 [ 93] address [size] of Export Directory 3208 [ 78] address [size] of Import Directory 0 [ 0] address [size] of Resource Directory 0 [ 0] address [size] of Exception Directory 0 [ 0] address [size] of Security Directory 5000 [ 168] address [size] of Base Relocation Directory 3050 [ 38] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 0 [ 0] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 3000 [ 48] address [size] of Import Address Table Directory 0 [ 0] address [size] of Reserved Directory 0 [ 0] address [size] of Reserved Directory 0 [ 0] address [size] of Reserved Directory SECTION HEADER #1 .text name 1100 virtual size 1000 virtual address 1200 size of raw data 400 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 60000020 flags Code (no align specified) Execute Read SECTION HEADER #2 .rdata name 4C3 virtual size 3000 virtual address 600 size of raw data 1600 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 40000040 flags Initialized Data (no align specified) Read Only Debug Directories(2) Type Size Address Pointer misc 110 00000000 2200 Image Name: lwbrk.dbg fpo 200 00000000 2310 SECTION HEADER #3 .data name 310 virtual size 4000 virtual address 400 size of raw data 1C00 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write SECTION HEADER #4 .reloc name 18A virtual size 5000 virtual address 200 size of raw data 2000 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 42000040 flags Initialized Data Discardable (no align specified) Read Only Summary 1000 .data 1000 .rdata 1000 .reloc 2000 .text May 12 Microsoft (R) COFF Binary File Dumper Version 5.00.7022 Copyright (C) Microsoft Corp 1992-1997. All rights reserved. Dump of file lwbrk.dll PE signature found File Type: DLL FILE HEADER VALUES 14C machine (i386) 4 number of sections 3739E5F1 time date stamp Wed May 12 13:34:57 1999 0 file pointer to symbol table 0 number of symbols E0 size of optional header 230E characteristics Executable Line numbers stripped Symbols stripped 32 bit word machine Debug information stripped DLL OPTIONAL HEADER VALUES 10B magic # 6.00 linker version 2000 size of code 3000 size of initialized data 0 size of uninitialized data 1FC5 address of entry point 1000 base of code 3000 base of data ----- new ----- 10000000 image base 1000 section alignment 1000 file alignment 2 subsystem (Windows GUI) 4.00 operating system version 0.00 image version 4.00 subsystem version 6000 size of image 1000 size of headers 1017B checksum 100000 size of stack reserve 1000 size of stack commit 100000 size of heap reserve 1000 size of heap commit 3430 [ 93] address [size] of Export Directory 3208 [ 78] address [size] of Import Directory 0 [ 0] address [size] of Resource Directory 0 [ 0] address [size] of Exception Directory 0 [ 0] address [size] of Security Directory 5000 [ 168] address [size] of Base Relocation Directory 3050 [ 38] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 0 [ 0] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 3000 [ 48] address [size] of Import Address Table Directory 0 [ 0] address [size] of Reserved Directory 0 [ 0] address [size] of Reserved Directory 0 [ 0] address [size] of Reserved Directory SECTION HEADER #1 .text name 1088 virtual size 1000 virtual address 2000 size of raw data 1000 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 60000020 flags Code (no align specified) Execute Read SECTION HEADER #2 .rdata name 4C3 virtual size 3000 virtual address 1000 size of raw data 3000 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 40000040 flags Initialized Data (no align specified) Read Only Debug Directories(2) Type Size Address Pointer misc 110 00000000 6000 Image Name: lwbrk.dbg fpo 1F0 00000000 6110 SECTION HEADER #3 .data name 310 virtual size 4000 virtual address 1000 size of raw data 4000 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write SECTION HEADER #4 .reloc name 188 virtual size 5000 virtual address 1000 size of raw data 5000 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 42000040 flags Initialized Data Discardable (no align specified) Read Only Summary 1000 .data 1000 .rdata 1000 .reloc 2000 .text Notice that the linker version are different. And a lot of size are different there. I then check the size of of today's build in our group. Tague and my local debug build is ~30K (Both of us use VC++ 5.0) and Naoki's debug build are ~45K (He use VC++ 6.0) I believe the reason it bloat is the change of build tool not source or configuration change. Mark it "WONTFIX"
bobj thinks we should reopen this because we should fix it. Reopen this and reassign this to chofmann. chofmann, you need to find someone to investigate the linker and make decision which version we should use. BTW, both version of the lwbrk.dll waterson built are small (~11K). Waterson, can you do a dumpbin /headers lwbrk.dll and tell us the Linker Version ? Is that 5.10 ?
Status: RESOLVED → REOPENED
Assignee: ftang → chofmann
Status: REOPENED → NEW
Frank: I'm using VC5.
Resolution: WONTFIX → ---
ChrisH, Are you having someone look into the possible linker issue? The smoking gun seems to be pointing to the switch to the 6.0 linker. I want to look into linking the I18N libs with the xpcom DLL instead of xpcom.lib, but 5.0 needs to solve 7748 first (instead of hiding this problem by changing something else.)
Just to add a few more notes to this report. I was investigating some DLL bloat that also occurred between 5/11 and 5/12 on our mailnews DLLs. We had three dlls (rawemitter.dll, htmlemitter.dll, xmlemitter.dll) that were all 8K on 5/11. On 5/12 they jumped to over 20K. I was never able to figure out why as there were no code changes in these libraries. It was probably the change in linker that caused the I18N dll bloat as well.
Assignee: chofmann → jevering
over to jevevering to see if he can find someone to help on figuring out if a compiler/linker swicth might help us to recover some footprint.
Is anything going to happen with this bug?
reassigning jevering's old bugs to jar for adoption or to find them a new home
Assignee: jevering → jar
Since bobj (long ago) asked for a re-open, I'm passing it to him. My guess is that he'll say this is not an issue, and close it... but he's welcome to push it to a better person than me. Thanks, Jim
Assignee: jar → bobj
Bouncing it back to jar. I logged this bug because I thought it was significant for downloading size. If we are adding 10K to every DLL because of some linker flag, that adds up. Just for the I18N DLLs mentioned at the beginning of this bug report, the combined bloat is over 100KB. And from mscott's comment, this problem was not restricted to the I18N DLLs. If size matters, someone should look into this again. Maybe since this is a very old bug, the problem has gone away????
Assignee: bobj → jar
Chris, As you can tell by the recent commentary, this bug was assigned to me, an I'm trying to find a better home for it. Can you make a suggestion, and pass it along, or perhaps argue that this is no longer a problem, and mark it resolved? Thanks, Jim
Assignee: jar → waterson
Status: NEW → ASSIGNED
Keywords: helpwanted
Target Milestone: --- → Future
cc'd valeski. I have no idea of the status of this bug. At the time I filed it, we suddenly bloated over 100K for a handful of i18n components and probably had similar bloat in other components (e.g., mail). The last theory was something related to the linker...
linking w/ "/opt:nowin98" removes some vc6 linker cruft from shared libs. here's the savings in i18n: as we build today: 16 File(s) 1,725,529 bytes w/ the nowin98 linker option: 16 File(s) 867,328 bytes as you can see the savings is 858,201 bytes (release) which is a huge win.
Keywords: helpwantedfootprint
this is fixed as a result of 54199 being fixed (trunk).
Status: ASSIGNED → RESOLVED
Closed: 26 years ago24 years ago
Resolution: --- → FIXED
Should we consider this for Seamonkey RTM?
IMO, yes.
Definitely for RTM. See comment in bug 54199 ------- Additional Comments From Judson Valeski 2000-09-27 07:54 ------- all the info has already been posted to mozilla-seamonkey and mozilla-porkjockeys (last week). reposting here. ... I built win32 using the "/opt:nowin98" linker option and got some interesting results. release build using existing linker flags for win32 produced shared libraries who's total size is 9,326,592 bytes. release build using existing linker flags plus the nowin98 linker flag produced shared libraries who's total size is 8,482,816 bytes. Under current conditions, that's a disk space savings of 10%.
Verified.
Status: RESOLVED → VERIFIED
I should not mark verify this since I cannot verify. I changed QA contact to the engineer.
Status: VERIFIED → REOPENED
QA Contact: teruko → waterson
Resolution: FIXED → ---
thbbbt!
Status: REOPENED → RESOLVED
Closed: 24 years ago24 years ago
Resolution: --- → FIXED
unh
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: