Hello Raster,

On Fri, Jul 10, 2015 at 11:52 AM, Carsten Haitzler <[email protected]>
wrote:

> i've just been dumping some info on efl mem footprint. for now forget
> massif
> and looking at mem usage we malloc etc.
>
> looking at just dirty pages that are a result of our actual compiled code
> and
> what we link to. here is a list of dirty private pages for elementary_test
> -
> just starting and sitting idle. these are REAL used pages .. that don't
> show up
> on massif and friends:
>
>    212 /usr/local/lib/libelementary.so.1.15.0
>    120 /usr/lib/libcrypto.so.1.0.0
>    112 /usr/lib/libvorbisenc.so.2.0.10
>     80 /usr/lib/libOSMesa.so.8.0.0
>     72 /usr/local/lib/libevas.so.1.15.0
>     64 /usr/lib/libscim-1.0.so.8.2.6
>     48 /usr/lib/libcrypto.so.1.0.0
>     32 /usr/lib/libstdc++.so.6.0.20
>     28 /usr/local/lib/edje/modules/elm/v-1.15/module.so
>     28 /usr/lib/libssl.so.1.0.0
>     28 /usr/lib/libBulletCollision.so.2.82
>     24 /usr/local/lib/libedje.so.1.15.0
>     24 /usr/lib/libgcrypt.so.20.0.2
>     24 /usr/lib/libfreetype.so.6.11.4
>     24 /usr/lib/libevdev.so.2.1.5
>     20 /usr/lib/libX11.so.6.3.0
>     20 /usr/lib/libssl.so.1.0.0
>     16 /usr/local/lib/libecore_x.so.1.15.0
>     16 /usr/lib/libscim-1.0.so.8.2.6
>     16 /usr/lib/libOSMesa.so.8.0.0
>     16 /usr/lib/libc-2.21.so
>     12 /usr/local/lib/libefl.so.1.15.0
>     12 /usr/local/lib/libector.so.1.15.0
>     12 /usr/local/lib/libecore_fb.so.1.15.0
>     12 /usr/local/lib/libecore_con.so.1.15.0
>     12 /usr/lib/libwayland-client.so.0.3.0
>     12 /usr/lib/libglapi.so.0.0.0
>     12 /usr/lib/libexpat.so.1.6.0
>     12 /usr/lib/libblkid.so.1.1.0
>      8 /usr/local/lib/libephysics.so.1.15.0
>      8 /usr/local/lib/libemotion.so.1.15.0
>      8 /usr/local/lib/libeio.so.1.15.0
>      8 /usr/local/lib/libeina.so.1.15.0
>      8 /usr/local/lib/libefreet.so.1.15.0
>      8 /usr/local/lib/libecore_wayland.so.1.15.0
>      8 /usr/local/lib/libecore.so.1.15.0
>      8 /usr/local/lib/libecore_evas.so.1.15.0
>      8 /usr/local/lib/libecore_audio.so.1.15.0
>      8 /usr/local/lib/elementary/modules/prefs/v-1.15.0/module.so
>      8 /usr/local/lib/ecore_imf/modules/scim/v-1.15/module.so
>      8 /usr/local/lib/ecore_evas/engines/x/v-1.15/module.so
>      8 /usr/lib/pulseaudio/libpulsecommon-6.0.so
>      8 /usr/lib/pulseaudio/libpulsecommon-6.0.so
>      8 /usr/lib/libxkbcommon.so.0.0.0
>      8 /usr/lib/libX11.so.6.3.0
>      8 /usr/lib/libwayland-server.so.0.1.0
>      8 /usr/lib/libwayland-cursor.so.0.0.0
>      8 /usr/lib/libstdc++.so.6.0.20
>      8 /usr/lib/libsndfile.so.1.0.25
>      8 /usr/lib/libluajit-5.1.so.2.0.3
>      8 /usr/lib/libLinearMath.so.2.82
>      8 /usr/lib/libjpeg.so.8.0.2
>      8 /usr/lib/libharfbuzz.so.0.938.0
>      8 /usr/lib/libgraphite2.so.3.0.1
>      8 /usr/lib/libfontconfig.so.1.8.0
>      8 /usr/lib/libc-2.21.so
>      8 /usr/lib/libbz2.so.1.0.6
>      8 /usr/lib/libBulletSoftBody.so.2.82
>      8 /usr/lib/libBulletDynamics.so.2.82
>      4 /usr/local/lib/libethumb.so.1.15.0
>      4 /usr/local/lib/libethumb_client.so.1.15.0
>      4 /usr/local/lib/libeo.so.1.15.0
>      4 /usr/local/lib/libemile.so.1.15.0
>      4 /usr/local/lib/libembryo.so.1.15.0
>      4 /usr/local/lib/libelocation.so.1.15.0
>      4 /usr/local/lib/libeldbus.so.1.15.0
>      4 /usr/local/lib/libefreet_trash.so.1.15.0
>      4 /usr/local/lib/libefreet_mime.so.1.15.0
>      4 /usr/local/lib/libeeze.so.1.15.0
>      4 /usr/local/lib/libeet.so.1.15.0
>      4 /usr/local/lib/libecore_ipc.so.1.15.0
>      4 /usr/local/lib/libecore_input.so.1.15.0
>      4 /usr/local/lib/libecore_input_evas.so.1.15.0
>      4 /usr/local/lib/libecore_imf.so.1.15.0
>      4 /usr/local/lib/libecore_imf_evas.so.1.15.0
>      4 /usr/local/lib/libecore_file.so.1.15.0
>      4 /usr/local/lib/libecore_drm.so.1.15.0
>      4 /usr/local/lib/evas/modules/engines/software_x11/v-1.15/module.so
>      4 /usr/local/lib/ecore/system/upower/v-1.15/module.so
>      4 /usr/local/lib/ecore_imf/modules/xim/v-1.15/module.so
>      4 /usr/lib/scim-1.0/1.4.0/IMEngine/socket.so
>      4 /usr/lib/scim-1.0/1.4.0/IMEngine/socket.so
>      4 /usr/lib/scim-1.0/1.4.0/Config/socket.so
>      4 /usr/lib/scim-1.0/1.4.0/Config/socket.so
>      4 /usr/lib/libz.so.1.2.8
>      4 /usr/lib/libz.so.1.2.8
>      4 /usr/lib/libXtst.so.6.1.0
>      4 /usr/lib/libXtst.so.6.1.0
>      4 /usr/lib/libXss.so.1.0.0
>      4 /usr/lib/libXss.so.1.0.0
>      4 /usr/lib/libXrender.so.1.3.0
>      4 /usr/lib/libXrender.so.1.3.0
>      4 /usr/lib/libXrandr.so.2.2.0
>      4 /usr/lib/libXrandr.so.2.2.0
>      4 /usr/lib/libXp.so.6.2.0
>      4 /usr/lib/libXp.so.6.2.0
>      4 /usr/lib/libxkbcommon.so.0.0.0
>      4 /usr/lib/libXi.so.6.1.0
>      4 /usr/lib/libXi.so.6.1.0
>      4 /usr/lib/libXinerama.so.1.0.0
>      4 /usr/lib/libXinerama.so.1.0.0
>      4 /usr/lib/libXfixes.so.3.1.0
>      4 /usr/lib/libXfixes.so.3.1.0
>      4 /usr/lib/libXext.so.6.4.0
>      4 /usr/lib/libXext.so.6.4.0
>      4 /usr/lib/libXdmcp.so.6.0.0
>      4 /usr/lib/libXdmcp.so.6.0.0
>      4 /usr/lib/libXdamage.so.1.1.0
>      4 /usr/lib/libXdamage.so.1.1.0
>      4 /usr/lib/libXcursor.so.1.0.2
>      4 /usr/lib/libXcursor.so.1.0.2
>      4 /usr/lib/libXcomposite.so.1.0.0
>      4 /usr/lib/libXcomposite.so.1.0.0
>      4 /usr/lib/libxcb.so.1.1.0
>      4 /usr/lib/libxcb.so.1.1.0
>      4 /usr/lib/libXau.so.6.0.0
>      4 /usr/lib/libXau.so.6.0.0
>      4 /usr/lib/libwayland-server.so.0.1.0
>      4 /usr/lib/libwayland-cursor.so.0.0.0
>      4 /usr/lib/libwayland-client.so.0.3.0
>      4 /usr/lib/libvorbis.so.0.4.7
>      4 /usr/lib/libvorbis.so.0.4.7
>      4 /usr/lib/libvorbisenc.so.2.0.10
>      4 /usr/lib/libuuid.so.1.3.0
>      4 /usr/lib/libuuid.so.1.3.0
>      4 /usr/lib/libunwind-x86_64.so.8.0.1
>      4 /usr/lib/libunwind-x86_64.so.8.0.1
>      4 /usr/lib/libunwind.so.8.0.1
>      4 /usr/lib/libunwind.so.8.0.1
>      4 /usr/lib/libudev.so.1.6.2
>      4 /usr/lib/libudev.so.1.6.2
>      4 /usr/lib/libsystemd.so.0.5.1
>      4 /usr/lib/libsystemd.so.0.5.1
>      4 /usr/lib/libsndfile.so.1.0.25
>      4 /usr/lib/librt-2.21.so
>      4 /usr/lib/librt-2.21.so
>      4 /usr/lib/libresolv-2.21.so
>      4 /usr/lib/libresolv-2.21.so
>      4 /usr/lib/libpulse.so.0.18.0
>      4 /usr/lib/libpulse.so.0.18.0
>      4 /usr/lib/libpthread-2.21.so
>      4 /usr/lib/libpthread-2.21.so
>      4 /usr/lib/libpng16.so.16.16.0
>      4 /usr/lib/libpng16.so.16.16.0
>      4 /usr/lib/libpcre.so.1.2.4
>      4 /usr/lib/libpcre.so.1.2.4
>      4 /usr/lib/libogg.so.0.8.2
>      4 /usr/lib/libogg.so.0.8.2
>      4 /usr/lib/libnss_files-2.21.so
>      4 /usr/lib/libnss_files-2.21.so
>      4 /usr/lib/libnsl-2.21.so
>      4 /usr/lib/libnsl-2.21.so
>      4 /usr/lib/libmtdev.so.1.0.0
>      4 /usr/lib/libmtdev.so.1.0.0
>      4 /usr/lib/libmount.so.1.1.0
>      4 /usr/lib/libmount.so.1.1.0
>      4 /usr/lib/libm-2.21.so
>      4 /usr/lib/libm-2.21.so
>      4 /usr/lib/liblzma.so.5.2.0
>      4 /usr/lib/liblzma.so.5.2.0
>      4 /usr/lib/liblz4.so.1.5.0
>      4 /usr/lib/liblz4.so.1.5.0
>      4 /usr/lib/libluajit-5.1.so.2.0.3
>      4 /usr/lib/libltdl.so.7.3.1
>      4 /usr/lib/libltdl.so.7.3.1
>      4 /usr/lib/libLinearMath.so.2.82
>      4 /usr/lib/libjson-c.so.2.0.1
>      4 /usr/lib/libjson-c.so.2.0.1
>      4 /usr/lib/libjpeg.so.8.0.2
>      4 /usr/lib/libinput.so.7.1.1
>      4 /usr/lib/libinput.so.7.1.1
>      4 /usr/lib/libharfbuzz.so.0.938.0
>      4 /usr/lib/libgthread-2.0.so.0.4200.1
>      4 /usr/lib/libgthread-2.0.so.0.4200.1
>      4 /usr/lib/libgraphite2.so.3.0.1
>      4 /usr/lib/libgpg-error.so.0.14.0
>      4 /usr/lib/libgpg-error.so.0.14.0
>      4 /usr/lib/libglib-2.0.so.0.4200.1
>      4 /usr/lib/libglib-2.0.so.0.4200.1
>      4 /usr/lib/libglapi.so.0.0.0
>      4 /usr/lib/libgcrypt.so.20.0.2
>      4 /usr/lib/libgcc_s.so.1
>      4 /usr/lib/libgbm.so.1.0.0
>      4 /usr/lib/libgbm.so.1.0.0
>      4 /usr/lib/libfribidi.so.0.3.5
>      4 /usr/lib/libfribidi.so.0.3.5
>      4 /usr/lib/libfreetype.so.6.11.4
>      4 /usr/lib/libfontconfig.so.1.8.0
>      4 /usr/lib/libFLAC.so.8.3.0
>      4 /usr/lib/libFLAC.so.8.3.0
>      4 /usr/lib/libffi.so.6.0.4
>      4 /usr/lib/libffi.so.6.0.4
>      4 /usr/lib/libexpat.so.1.6.0
>      4 /usr/lib/libevdev.so.2.1.5
>      4 /usr/lib/libdrm.so.2.4.0
>      4 /usr/lib/libdrm.so.2.4.0
>      4 /usr/lib/libdl-2.21.so
>      4 /usr/lib/libdl-2.21.so
>      4 /usr/lib/libdbus-1.so.3.8.11
>      4 /usr/lib/libdbus-1.so.3.8.11
>      4 /usr/lib/libcap.so.2.24
>      4 /usr/lib/libBulletSoftBody.so.2.82
>      4 /usr/lib/libBulletDynamics.so.2.82
>      4 /usr/lib/libBulletCollision.so.2.82
>      4 /usr/lib/libblkid.so.1.1.0
>      4 /usr/lib/libattr.so.1.1.0
>      4 /usr/lib/libattr.so.1.1.0
>      4 /usr/lib/libasyncns.so.0.3.1
>      4 /usr/lib/libasyncns.so.0.3.1
>      4 /usr/lib/ld-2.21.so
>      4 /usr/lib/ld-2.21.so
>
> that's a total of almost 2mb of memory just for what we link to. this is
> multiplied per process. 2mb (almost) per process run. that's crazy. we
> need to
> do something about this.
>
> to a large extent i think a big offender is eo (previous email). we need to
> wait on eo stability and fix this. those 200+k for elm i think is all eo
> classes. that's a guess. (i haven't found something to map symbol
> addresses to
> pages in ram yet that are dirty).
>
> other than that we have osmesa - why is it being even loaded at all when
> it's
> not even used there in the app. until it's used - zero need to even dlopen
> osmesa at all.
>
> and as for the rest - not sure where they all come from, but we could nuke
> most
> of them by manually dlopen+dlsym ourselves like we already do with libcurl.
> only dlopen when actually needed and not before.
>
> other than this ... massif and friends + profiling definitely needs doing.
> we
> consume huge blobs of memory for edje.
>
> i think it's about time we sit down for a while and over a few releases do
> very
> little in new features and simply clean house. trim mem usage. ESPECIALLY
> private mem usage. refactor code to remove duplication. fix bugs, fix build
> system etc.
>
>
Its a great finding. I wonder which tool we should use to find memory
related issues like this.
A case study whitepaper would be great like
https://phab.enlightenment.org/phame/live/1/post/efl_memory_consumption_moo/
.

One examples is.


*commit 59db1cd0e25e830dd49013489bfc0d7527126b9cAuthor: Carsten Haitzler
(Rasterman) <[email protected] <[email protected]>>Date:   Sun Jul 12
13:17:08 2015 +0900*
*    evas - unload/scalecache self-feeding loop unload/reload fix*

it would be nice to know what are the tools you used to find the root
cause.

Thanks
Amitesh


> --
> ------------- Codito, ergo sum - "I code, therefore I am" --------------
> The Rasterman (Carsten Haitzler)    [email protected]
>
>
>
> ------------------------------------------------------------------------------
> Don't Limit Your Business. Reach for the Cloud.
> GigeNET's Cloud Solutions provide you with the tools and support that
> you need to offload your IT needs and focus on growing your business.
> Configured For All Businesses. Start Your Cloud Today.
> https://www.gigenetcloud.com/
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to