This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

performance problem when linking for windows


Hello.  Is this list an appropriate place to ask questions about the
performance of binutils?

We produce a largish C++ application using free tools, cross-compiling
for linux and windows from linux.  By large, I mean 83 megabytes with
some debugging enabled, 33 megabytes stripped.  It consists of around
6000 source files plus a number of third party libraries (tk, python,
boost, etc).

I'm using these tool versions:
    gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
    GNU ld version 2.16.91 20050608

    i386-mingw32msvc-gcc (GCC) 3.2.2 (mingw special 20030208-1)
    GNU ld version 2.16.91 20050608

I'm passing --hash-size=120000 to the linker commandline by using
-Wl,--hash-size=120000---this made a big different to the link time on
Linux.  The 6000 objects are all listed in a linker script, not "ar"d
into a library.

Anyway, the problem is that the time to link mingw is much, much longer
than it is to link linux.  In both cases, I'm referring to a link with
all objects on a local system, "hot cache", and enough RAM to avoid
swapping.

The Linux binary takes under 1 CPU minute to link, while the Windows
binary can take around 8 CPU minutes to link.  I notice that the RAM
usage for the link of the .EXE is much lower (less than 200 megs instead
of nearly 1 gigabyte)

These are all the items above 1% of the link time when I build the
linker with profiling:
Each sample counts as 0.01 seconds.
  %   cumulative   self                self     total           
 time   seconds   seconds      calls   s/call   s/call  name    
 37.25     78.49    78.49  651231576     0.00     0.00  compare_section
 31.02    143.86    65.37     346588     0.00     0.00  coff_section_from_bfd_index
 10.49    165.97    22.11     104704     0.00     0.00  wild_sort
  4.04    174.49     8.52  608190154     0.00     0.00  _bfd_pei_swap_sym_in
  3.98    182.88     8.39     104704     0.00     0.00  output_section_callback
  2.88    188.94     6.06 1220538500     0.00     0.00  bfd_getl32
  2.20    193.58     4.64 1218124193     0.00     0.00  bfd_getl16
  2.12    198.04     4.46      66684     0.00     0.00  handle_COMDAT
  1.87    201.99     3.95       7188     0.00     0.00  ldlang_add_file
  1.24    204.61     2.62    2384623     0.00     0.00  bfd_hash_lookup

Does anyone have some advice on where I might look to speed this up?
The time to run the linker is becoming a major slowdown for developers,
because all developer builds are done sequentially on a single fast
server + distcc.

Thanks in advance for any advice you can give me.  If there's more
information I could provide, please ask.

Jeff Epler
jepler@unpythonic.net

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]