[Mono-dev] increased memory usage when embedding mono under special environment

Bernhard Urban beurba at microsoft.com
Tue Jul 4 21:51:01 UTC 2017

As hinted in my previous message I could image that your special program sets some environment variable that the malloc implementation of your embedded system respects, and thus changes the allocation behavior you observe. How about you dump all environment variables before calling into mono?

Also it would be useful to know what libc implementation you're using. What is the absolute memory usage before calling into mono in your special program vs. the example you posted? Maybe you trigger some threshold and malloc allocates some bigger chunk.

There are environment variables to control the heap size of mono (check the man page), but I doubt you set them by accident.

Just some thoughts, no idea what's going on.


From: Jovic, Vladimir
Sent: Tuesday, July 4, 15:12
Subject: AW: [Mono-dev] increased memory usage when embedding mono under specialenvironment
To: Bernhard Urban, mono-devel-list at lists.dot.net

Hello, To see where the memory goes, I used sysinfo() : https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fman7.org%2Flinux%2Fman-pages%2Fman2%2Fsysinfo.2.html&data=02%7C01%7Cbeurba%40microsoft.com%7Cea86b8b4102a4006b02d08d4c2de5d65%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636347707686498740&sdata=x9UzLkDI%2BdXcA%2BIjcedHbkcLKX1ZKgpww%2F83UvMh3fY%3D&reserved=0 and I printed before and after calling any mono function in the function bellow. Like that, I see free memory after every function. As I am developing for a PPC embedded device, I am quite limited in tools. Otherwise, I would use valgrind. Although I am not sure how it would help in this case, as the memory is allocated by mono. Could it be possible that program arguments, or environment variables, are somehow changing how much memory is allocated by mono? Cheers, Vladimir > -----Urspr√ľngliche Nachricht----- > Von: Bernhard Urban [mailto:beurba at microsoft.com] > Gesendet: Dienstag, 4. Juli 2017 15:01 > An: Jovic, Vladimir ; mono-devel-list at lists.dot.net > Betreff: Re: [Mono-dev] increased memory usage when embedding mono under > special environment > > How do you determine said memory usage? Is your special program somehow > messing with malloc? Note that mono uses malloc for quite some stuff, so if your > special program messes with the allocation pattern that could explain it. I suggest > to look at it with some profiler. > > -Bernhard > ________________________________________ > From: Mono-devel-list on behalf of > Jovic, Vladimir > Sent: Tuesday, July 4, 2017 2:39:35 PM > To: mono-devel-list at lists.dot.net > Subject: [Mono-dev] increased memory usage when embedding mono under > special environment > > Hello, > > I am crosscompiling mono 4.4.2 for PPC platform (couldn't compile newer version, > as the configuration fails). > Also, I implemented a c++ library, which executes a C# function in DLL. This library > is dynamically loaded at runtime (using dlopen) by a program with very special > environment. I wouldn't be surprised to hear that this program experience both > stack smash and memory overwrites at the same time, but I am not in a position to > pick. > > Now the problem I am having is: when I use my library in a standalone program, > then it works fine. But when I use my library with the program with this special > environment, than it uses 40 more megabytes to do some initializations. The > parameters for both programs are the same (default, as I do not set any > environment variables). > > The code to set the mono library is next. As you see, it is a code that can be > found in any example of how to execute a c# function from a DLL. > > MonoMethod* csMethodEntryPoint = NULL; > > void SetMethodEntryPoint( const std::string& ifmDllsPath ) { > mono_config_parse( NULL ); > > MonoDomain* monoDomain = mono_jit_init_version( "pdm_mono_sdk", > "v4.0.30319" ); > > const std::string assemblyName( ifmDllsPath + "/ifmApiLinuxWrapper.dll" ); > MonoAssembly* assembly = mono_domain_assembly_open( monoDomain, > assemblyName.c_str() ); > if ( NULL == assembly ) > { > throw std::runtime_error( "assembly is NULL" ); > } > > MonoImage* monoImage = mono_assembly_get_image( assembly ); > if ( NULL == monoImage ) > { > throw std::runtime_error( "monoImage is NULL" ); > } > > MonoClass* entityClass = mono_class_from_name( monoImage, > "ifmApiLinuxWrapper", "ifmApiLinuxWrapper" ); > if ( NULL == entityClass ) > { > throw std::runtime_error( "entityClass is NULL" ); > } > > csMethodEntryPoint = mono_class_get_method_from_name( entityClass, > "ApiCmdRequest", 2 ); > if ( NULL == csMethodEntryPoint ) > { > throw std::runtime_error( "entryPoint is NULL" ); > } > } > > > The function that allocates extra memory is mono_jit_init_version(). In a standalone > program, it allocates 1M, and with this special program 20M! > I said above that I lose 40M. So, 19M with mono_jit_init_version(), and extra 21M > from a call to c# function. > I took a look into the mono source code for mono_jit_init_version() function, but > the function is so huge, that I got lost quite quickly. > > The question is how to debug this. Can I set some environment variable to help me > track why extra memory is allocated? > > Cheers, > Vladimir Jovic > > > _______________________________________________ > Mono-devel-list mailing list > Mono-devel-list at lists.dot.net > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furldefense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-&data=02%7C01%7Cbeurba%40microsoft.com%7Cea86b8b4102a4006b02d08d4c2de5d65%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636347707686498740&sdata=w72x1rfEWVGqz57A5jXS2mBqfU4CS7Prna8rxuQtlFI%3D&reserved=0 > 3A__na01.safelinks.protection.outlook.com_-3Furl-3Dhttp-253A-252F- > 252Flists.dot.net-252Fmailman-252Flistinfo-252Fmono-2Ddevel-2Dlist-26data- > 3D02-257C01-257Cbeurba-2540microsoft.com- > 257Cf316d1bef9ff4526a28e08d4c2d9c199- > 257C72f988bf86f141af91ab2d7cd011db47-257C1-257C0- > 257C636347687894932396-26sdata- > 3D7STXOC7bR3PWerb3i2SWA8ZjNKY5nuxhrhNa8YdCgj4-253D-26reserved- > 3D0&d=DwIFAg&c=riR7jviByh3sGm7GIiSlHkFN0_aSATB6A8x0nHa2EM0&r=8wfds > MUxnRudpdLb_Cg4rnnnKI- > gQZ4ykr3tjUrejXg&m=UXnPdEnbJm2f8D7zbepyWHCkddBX3nmBbM20hcNRWVw > &s=HeLECPauo2viZhcAN-930TZQaRS3NLvG4xlxnV-p8sM&e=

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dot.net/pipermail/mono-devel-list/attachments/20170704/a1385256/attachment-0001.html>

More information about the Mono-devel-list mailing list