[Mono-dev] [PATCH] Implement support for compiled regular expressions in profile 1.x
Mantas Puida
mantas at unity3d.com
Wed Apr 8 10:50:15 EDT 2009
Hi,
>>
>>
>> Can you give us a breakdown of the size of the many files produced
>> by mono?
>> Like sizes of the runtime, assemblies after linking/stripping and
>> AOT'd binaries.
I can't get exact numbers for profile 2.0 because it doesn't work with
mono-2-0 AOT, so best what I can do is to extrapolate numbers from
profile 1.0 data.
There are some numbers for profile 1.0 when mono linker is NOT used:
Total size for sample iPhone application made with Unity (it includes
Unity engine + .NET interface to its functions, physX, libcurl, mono
runtime and AOTed mscorlib.dll):
15,999,648 bytes
breakdown of this number
a) Mono runtime compiled for ARM with --enable-
minimal=jit,reflection_emit,profiler,com option takes 1,790,384 bytes.
b) mscorlib.dll (.dll size 2,081,280 bytes) AOTed code size: 6,703,136
c) UnityEngine.dll (.dll size 376,320 bytes) AOTed code size: 2,313,696
Numbers when mono linker IS used:
Total size for sample iPhone application made with Unity (it includes
Unity engine + .NET interface to its functions, physX, libcurl, mono
runtime and AOTed mscorlib.dll):
11,791,088 bytes
breakdown of this number
a) Mono runtime compiled for ARM with --enable-
minimal=jit,reflection_emit,profiler,com option takes 1,790,384 bytes.
b) mscorlib.dll (.dll size 1,418,240 bytes, we use less strict than
default monolinker blacklist for mscorlib) AOTed code size: 4,259,216
bytes
c) UnityEngine.dll (.dll size 112,128 bytes) AOTed code size: 543,024
bytes
In general mono linker does great job (when supplied with "optimized"
blacklists).
Numbers written above are just for empty application and if you add
something useful like Sockets to you C# scripts then suddenly main
binary size explodes, reaches 28 MB and more, iPhone SDK linker fails
to link it, so use of .NET Sockets without mono linker step is
impossible.
Numbers for application that uses Sockets and goes through mono linker:
Total size: 14,0334,40 bytes.
breakdown of this number
a) Mono runtime compiled for ARM with --enable-
minimal=jit,reflection_emit,profiler,com option takes 1,790,384 bytes.
b) mscorlib.dll (.dll size 1,430,016 bytes) AOTed code size: 4,298,672
c) System.Xml.dll (.dll size 557,056 bytes after mono linker) AOTed
code size: 1,725,872 bytes
d) System.dll (.dll size 130048 bytes after mono linker) AOTed code
size: 462,416 bytes
e) UnityEngine.dll (.dll size 112,128 bytes) AOTed code size: 543,024
So adding of reference to .NET Socket API adds two new dependencies
System.dll and System.Xml.dll and ends up with 2.1 MB of additional
ARM code.
I checked what dependencies would be in the case of 2.0 profile when
application is using sockets:
Mono.Security.dll - official size 285,696 bytes, after monolinker - N/A*
System.Configuration.dll - official size 117,760 bytes, after
monolinker - N/A*
System.Security.dll - official size 132,608 bytes, after monolinker -
N/A*
System.Xml.dll - official size 1,250,304 bytes, after monolinker - N/A*
System.dll - official size 1,467,392 bytes, after monolinker - N/A*
mscorlib.dll - official size 2,508,288 bytes, after monolinker -
1,640,960.
after monolinker - N/A* means that currently my version of monolinker
strips these dll too much (no exported types are left), so I can't get
these numbers without fixing mono linker.
I would estimate that in total it would increase our footprint for
sample Sockets application at least by 1 MB (bigger mscorlib + 3
additional dependencies)
Would us help Silverlight profile? I doubt it, because we are using
shorter mono linker blacklist for mscorlib and we are achieving
smaller working size of this lib already.
I think these big binary size (and also big memory footprint) is
common for other embedded devices, not just iPhone.
I see mscorlib (and other libraries) profile 1.0 as best fit for
embedded devices.
Miguel, I saw your comment that people who are using profile 1.0
should stick with mono-2-4 then I would like to ask what about AOT on
other platforms support? Let's say mono adds PPC AOT support to
mono-2-6 will it be backported to mono-2-4? If not then I see the
problem how mono based applications could be developed for small
devices that currently are not supported by mono-2-4, but maybe will
be supported in the next versions.
>>
>>
>> There are a lot of optimizations that can be done to reduce
>> footprint like embedding
>> assemblies content in the AOT'd image in a compact form and
>> improving the ARM code
>> generator.
>>
>>
>
Embedding something into AOT'd image (mean linked into main app
binary) makes everything worse in respect to binary size and maybe
memory footprint.
Maybe I'm missing something in your idea?
Mantas Puida
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20090408/b4411eaf/attachment-0001.html
More information about the Mono-devel-list
mailing list