Re: Build with jemalloc

2013-09-01 Thread NOKUBI Takatsugu
Thanks for you reply.

On Sat, 31 Aug 2013 12:20:04 +0200
Michael Stahl mst...@redhat.com wrote:

 although as far as i vaguely remember the really bad system memory
 allocators are in Windows XP and earlier; the Vista and newer allocators
 are said to be much better.

It is a interesting things. I tried to watch memory usage on XP and 7,
And the output is a little different.

 and i would suspect if LibreOffice requires more memory than MS Office
 it is most likely not because of the memory allocator but because of
 sub-optimal data structures in the application cores (plus some constant
 overhead because LibreOffice is portable and thus needs more platform
 abstraction layers).

From my inspection, VCL calls quite many malloc/free pair (in the face,
new() call of some objects). UI compornent on LibreOffice supported
many platform, so it woud be unavoidable.

 i don't know why this does not work for the specific case of
 soffice.bin, because i don't know what symbols are in the extra
 libraries you link.  perhaps there are different calling conventions in
 the jemalloc library and the soffice.bin objects or something like that,
 so it still picks up the allocator symbols from msvcrt.lib.

Thank you your comment. I tested building avery small program with jemalloc,
and it seems fine. So I check build related things again.

 this does not work on Windows because DLLs do not have a global symbol
 namespace, their namespace is local to each DLL.  and every DLL knows
 not only the name of an imported symbol, but also which other DLL it is
 imported from.  so i think what you would need to do to replace the
 memory allocator on Windows is to link _every_ DLL and executable
 against your custom allocator.

Actually, I also tried to modify another link commands, almost passed
the build but cli_maker was not.

 oh, and for quite a lot of classes in the code base a custom memory
 allocator is used anyway due to overloading operator new for the
 particular class, see include/tools/mempool.hxx and the underlying
 rtl_cache API in include/rtl/alloc.h.  this implements a SLAB like
 allocator which is used for the most-used classes and should be quite
 efficient and reduce the fragmentation considerably.

Sounds good. 

So I understand that LibreOffice supports jemalloc in many Unix-like
systems but Windows is not. And many classes are used internal memory
allocator on Unicos and Windows.
Is this right?
___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice


Build with jemalloc

2013-08-30 Thread NOKUBI Takatsugu
Does anyone tried to build LibreOffice with jemallc?

I tried to use LibreOffice on Windows environment, and it required too much 
memory rather than Microsoft Office.

So I tryied to inspect memory usage with Microsoft Performance Analyzer.
http://msdn.microsoft.com/en-us/library/windows/desktop/hh448170.aspx

I can find many malloc/free and new/delete pair, so I suspect possibility of 
heap memory fragmantation.

Then I tried to build with jemalloc, a famous memory allocator.

I modified desktop/Executable_soffice_bin.mk like the following:
$(eval $(call gb_Executable_add_ldflags,soffice_bin,\
/STACK:1000 \
/NODEFAULTLIB:msvcrt /NODEFAULTLIB:libcmt \
'c:\cygwin\libo\jemalloc\jemalloc_s.lib' \
'c:\cygwin\libo\jemalloc\libgcc.a' \
'C:\Program Files\Microsoft Visual Studio 11.0\VC\lib\msvcrt.lib' \
'C:\Program Files\Microsoft Visual Studio 11.0\VC\lib\libcmt.lib' \

))

(it’s a dirty hack)

So gbuild invoked the following command (a little bit long):

S=C:/cygwin/libo  O=C:/cygwin/opt/lo/build2/solver/wntmsci14.pro  
W=C:/cygwin/opt/lo/build2/workdir/wntmsci14.pro   
mkdir -p $W/LinkTarget/Executable/  
rm -f $W/LinkTarget/Executable/soffice_bin.exe  
RESPONSEFILE=C:/cygwin/tmp/gbuild.ThJJlZ   
unset INCLUDE   
link   -release -opt:noref -incremental:no -debug -nxcompat -dynamicbase 
-manifest  -SUBSYSTEM:WINDOWS,5.01-LIBPATH:$O/lib 
-LIBPATH:C:/PROGRA~1/Java/JDK17~1.0_2/lib 
-LIBPATH:C:/PROGRA~1/MICROS~1.0/VC/lib -LIBPATH:C:/PROGRA~1/WI3CF2~1/8.0/lib 
-LIBPATH:C:/PROGRA~1/WI3CF2~1/8.0/lib/win8/um/x86 
-LIBPATH:C:/PROGRA~1/MICROS~1.NET/SDK/v2.0//lib 
-LIBPATH:C:/PROGRA~1/MI5E29~1/lib/x86/STACK:1000 
/NODEFAULTLIB:msvcrt
 /NODEFAULTLIB:libcmt 
'c:\cygwin\libo\jemalloc\jemalloc_s.lib' 'c:\cygwin\libo\jemalloc\libgcc.a' 
'C:\Program Files\Microsoft Visual Studio 11.0\VC\lib\msvcrt.lib' 
'C:\Program Files\Microsoft Visual Studio 11.0\VC\lib\libcmt.lib'  
@${RESPONSEFILE} isal.lib isofficeapp.lib iuwinapi.lib ooopathutils.lib 
winextendloaderenv.lib  advapi32.lib  user32.lib 
-out:$W/LinkTarget/Executable/soffice_bin.exe; RC=$?; rm ${RESPONSEFILE}
if [ -f $W/LinkTarget/Executable/soffice_bin.exe.manifest ]; then mt.exe  
-nologo -manifest $W/LinkTarget/Executable/soffice_bin.exe.manifest
 outputresource:$W/LinkTarget/Executable/soffice_bin.exe\;1 
 touch -r $W/LinkTarget/Executable/soffice_bin.exe
 W/LinkTarget/Executable/soffice_bin.exe.manifest; fi 
 if [ -f $S/solenv/inc/DeclareDPIAware.manifest ]; then 
mt.exe  -nologo -manifest $S/solenv/inc/DeclareDPIAware.manifest 
-updateresource:$W/LinkTarget/Executable/soffice_bin.exe\;1 ;
 fi  ; exit $RC

I thknk it seems fine, but the output binary hadn’t have static jemalloc code.

Does anyone tried same thing? 
Or how can I build LibreOffice with jemalloc static library?

___
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice