Sunday, January 25, 2009

Bloat

Dear Gnome,

This is completely ridiculous. According to top, "clock-applet" is using 353M virtual memory, of which 17M is resident. I have no swap partition, so it really makes me wonder why those 336M were allocated in the first place. If they are not resident, and not in swap, what are they? Blank pages? mmap()ed files which can be swapped in on demand?

There is also a column for "shared memory", which says 12M. Does that mean that 12M out of those 353M are shared with one or more other processes? What is this shared memory, library code and mmapped files?

Isn't 17M also too much for "clock-applet"? It should be one of the simplest applications that run on my desktop. It would be interesting to know what all of this memory is used for. I think that most of it is library code. And here's an indication...

$ ldd /usr/libexec/clock-applet
linux-vdso.so.1 => (0x00007fffb1fff000)
libpanel-applet-2.so.0 => /usr/lib64/libpanel-applet-2.so.0 (0x000000000062c000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x000000000083b000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x0000000000b46000)
libgnomeui-2.so.0 => /usr/lib64/libgnomeui-2.so.0 (0x0000000000d48000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x0000000000fe2000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x0000000004d22000)
libbonoboui-2.so.0 => /usr/lib64/libbonoboui-2.so.0 (0x0000000006c5b000)
libgnomevfs-2.so.0 => /usr/lib64/libgnomevfs-2.so.0 (0x00000000011ea000)
libgnomecanvas-2.so.0 => /usr/lib64/libgnomecanvas-2.so.0 (0x00000000064a7000)
libart_lgpl_2.so.2 => /usr/lib64/libart_lgpl_2.so.2 (0x00000000060ef000)
libecal-1.2.so.7 => /usr/lib64/libecal-1.2.so.7 (0x00000000077c7000)
libedataserverui-1.2.so.8 => /usr/lib64/libedataserverui-1.2.so.8 (0x0000000001c1c000)
libebook-1.2.so.9 => /usr/lib64/libebook-1.2.so.9 (0x0000000001453000)
libgnome-2.so.0 => /usr/lib64/libgnome-2.so.0 (0x00007f61a9ca3000)
libpopt.so.0 => /lib64/libpopt.so.0 (0x00007f61a9a99000)
libedataserver-1.2.so.11 => /usr/lib64/libedataserver-1.2.so.11 (0x00007f61a986f000)
libsoup-2.4.so.1 => /usr/lib64/libsoup-2.4.so.1 (0x00007f61a962b000)
libbonobo-2.so.0 => /usr/lib64/libbonobo-2.so.0 (0x00007f61a93b6000)
libbonobo-activation.so.4 => /usr/lib64/libbonobo-activation.so.4 (0x00007f61a919b000)
libORBit-2.so.0 => /usr/lib64/libORBit-2.so.0 (0x00007f61a8f2c000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f61a8d27000)
librt.so.1 => /lib64/librt.so.1 (0x00007f61a8b1e000)
libglade-2.0.so.0 => /usr/lib64/libglade-2.0.so.0 (0x00007f61a8905000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f61a85a8000)
librsvg-2.so.2 => /usr/lib64/librsvg-2.so.2 (0x00007f61a8373000)
libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 (0x00007f61a8153000)
libgconf-2.so.4 => /usr/lib64/libgconf-2.so.4 (0x00007f61a7f15000)
libpolkit-gnome.so.0 => /usr/lib64/libpolkit-gnome.so.0 (0x00007f61a7d0a000)
libpolkit-dbus.so.2 => /usr/lib64/libpolkit-dbus.so.2 (0x00007f61a7afe000)
libpolkit-grant.so.2 => /usr/lib64/libpolkit-grant.so.2 (0x00007f61a78f3000)
libgtk-x11-2.0.so.0 => /usr/lib64/libgtk-x11-2.0.so.0 (0x00007f61a731e000)
libpolkit.so.2 => /usr/lib64/libpolkit.so.2 (0x00007f61a7105000)
libgdk-x11-2.0.so.0 => /usr/lib64/libgdk-x11-2.0.so.0 (0x00007f61a6e66000)
libatk-1.0.so.0 => /usr/lib64/libatk-1.0.so.0 (0x00007f61a6c46000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f61a69d2000)
libpangoft2-1.0.so.0 => /usr/lib64/libpangoft2-1.0.so.0 (0x00007f61a67a4000)
libgdk_pixbuf-2.0.so.0 => /usr/lib64/libgdk_pixbuf-2.0.so.0 (0x00007f61a6587000)
libpangocairo-1.0.so.0 => /usr/lib64/libpangocairo-1.0.so.0 (0x00007f61a637c000)
libcairo.so.2 => /usr/lib64/libcairo.so.2 (0x00007f61a6107000)
libpango-1.0.so.0 => /usr/lib64/libpango-1.0.so.0 (0x00007f61a5ebe000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f61a5c25000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f61a59f3000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f61a57b0000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f61a55ad000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f61a52cb000)
libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f61a508d000)
libgweather.so.1 => /usr/lib64/libgweather.so.1 (0x00007f61a4e75000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f61a4c58000)
libc.so.6 => /lib64/libc.so.6 (0x00007f61a48e6000)
libm.so.6 => /lib64/libm.so.6 (0x00007f61a4661000)
libxcb-xlib.so.0 => /usr/lib64/libxcb-xlib.so.0 (0x00007f61a445f000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f61a4244000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f61a403f000)
libgnome-keyring.so.0 => /usr/lib64/libgnome-keyring.so.0 (0x00007f61a3e2d000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f61a3c28000)
libssl.so.7 => /lib64/libssl.so.7 (0x00007f61a39d9000)
libcrypto.so.7 => /lib64/libcrypto.so.7 (0x00007f61a3675000)
libz.so.1 => /lib64/libz.so.1 (0x00007f61a3460000)
libavahi-glib.so.1 => /usr/lib64/libavahi-glib.so.1 (0x00007f61a325d000)
libavahi-common.so.3 => /usr/lib64/libavahi-common.so.3 (0x00007f61a3050000)
libavahi-client.so.3 => /usr/lib64/libavahi-client.so.3 (0x00007f61a2e40000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f61a2c28000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f61a2a0b000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f61a2808000)
libgailutil.so.18 => /usr/lib64/libgailutil.so.18 (0x00007f61a2601000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007f61a23e6000)
libcamel-1.2.so.14 => /usr/lib64/libcamel-1.2.so.14 (0x00007f61a216b000)
libplds4.so => /lib64/libplds4.so (0x00007f61a1f67000)
libplc4.so => /lib64/libplc4.so (0x00007f61a1d63000)
libnspr4.so => /lib64/libnspr4.so (0x00007f61a1b26000)
libgnutls.so.26 => /usr/lib64/libgnutls.so.26 (0x00007f61a187b000)
libgcrypt.so.11 => /lib64/libgcrypt.so.11 (0x00007f61a1608000)
libORBitCosNaming-2.so.0 => /usr/lib64/libORBitCosNaming-2.so.0 (0x00007f61a1401000)
/lib64/ld-linux-x86-64.so.2 (0x0000000000110000)
libgsf-1.so.114 => /usr/lib64/libgsf-1.so.114 (0x00007f61a11c3000)
libcroco-0.6.so.3 => /usr/lib64/libcroco-0.6.so.3 (0x00007f61a0f87000)
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007f61a0d61000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f61a0b47000)
libXcomposite.so.1 => /usr/lib64/libXcomposite.so.1 (0x00007f61a0944000)
libXdamage.so.1 => /usr/lib64/libXdamage.so.1 (0x00007f61a0742000)
libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f61a053c000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f61a0313000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f61a0102000)
libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f619fef8000)
libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x00007f619fcf6000)
libXi.so.6 => /usr/lib64/libXi.so.6 (0x00007f619faed000)
libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x00007f619f8e5000)
libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x00007f619f6db000)
libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0 (0x00007f619f496000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f619f292000)
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f619f08c000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f619ee5d000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f619ebbb000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f619e9b7000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f619e792000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f619e559000)
libssl3.so => /lib64/libssl3.so (0x00007f619e327000)
libsmime3.so => /lib64/libsmime3.so (0x00007f619e0fc000)
libnss3.so => /lib64/libnss3.so (0x00007f619dda1000)
libnssutil3.so => /lib64/libnssutil3.so (0x00007f619db84000)
libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f619d91b000)
libtasn1.so.3 => /usr/lib64/libtasn1.so.3 (0x00007f619d70a000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f619d507000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f619d2f6000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f619d0ec000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f619cee9000)

I think that's insane. Is all of this really needed? As a random example, what is libcom_err.so? Oh, of course...

$ rpm -q -f /lib64/libcom_err.so.2
e2fsprogs-libs-1.41.3-2.fc10.x86_64

$ yum search e2fsprogs-libs
[...]
e2fsprogs-libs.i386 : Ext2/3 filesystem-specific shared libraries and headers

So I wonder... is this why the memory usage of clock-applet blows up, does it really matter, and can we do anything about it?

I have a feeling that this is yet another sign of how the GNU/Linux desktop is heading the wrong way. It smells a lot like bloat :-(


Vegard

2 comments:

Alturin said...

Bloat? Smells like Windows. Maybe they should add something with fancy tiling windows that show you which apps you are running? Or we should integrate a browser...

(Sad thing is Konquerer is about as bad as Internet Explorer about the whole doing-everything-and-the-kitchen-sink thing.)

Ananias said...

in true Geek-Tao mode, and volume of voice:

DELETE IT!!! :)

that's just obscene!