Google
  Web www.spinics.net

[forum] Re: bloatware

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


> Date: Sun, 30 Mar 2003 13:06:57 -0800 (PST)
> From: <Jim.Gettys@hp.com>
> To: forum@XFree86.Org
> Cc: Martin Konold <martin.konold@erfrakon.de>
> Subject: Re: [forum] bloatware
> Reply-To: forum@XFree86.Org
>
> > Sender: forum-admin@XFree86.Org
> > From: Martin Konold <martin.konold@erfrakon.de>
>
> material elided.
>
> > > Various stuff has bloated over the years, but it is generally on the
> > > applications side.  Sometimes you think the X server is bloating, when
> > > it is really that applications have a pixmap leak, for example.
> >
> > In order to show that X is bloated I generally kill all apps except a
> > single xterm and then check the memory usage.
>
> To begin with, what you see is VM; if the memory is never referenced
> again, it is fine for it to page out.
>
> X has to allocate space for all the memory clients ask.  There is no good
> way to reclaim it right now.  Your VM usage of the X server will be:
>   o the size of X itself
>   o however much I/O space is required to map the hardware registers and
> VRAM o the heap used for allocation of X data structures and Pixmaps.
>
> So what you are seeing is ***the high water mark of what all the bloatware
> has asked the X server on their behalf*** added up to.
>
> Ok, what can be done about this?
>
> A number of things...
>
> 1) We can try, as a stop-gap, to see if cranking down the MMAP threshold
>    in glibc (the point at which glibc calls mmap to allocate pages of
>    memory to satisfy allocations) helps.  Then if many pixmaps are larger
>    than that threshold, at least the VM gets returned when the pixmaps
>    get freed.  But we can't just set this arbitrarily low, as memory
>    allocation is very performance sensitive in respect to any windowing
>    operation (the region code in the X server pounds on malloc/free),
>    and a few apps do some amazing things with regions.
>
> 2) If we separate pixmap allocation from the general heap, it would be
>    easy to have the X server do a copying garbage collector and reclaim
>    large amounts of VM, as all pixmap access is through internal data
>    structures.  This would also avoid large amounts of heap fragmentation
>    where window data structures currently get scattered through the VM of
>    the X server (around the much larger pixmap allocations), and is
>    worth doing anyway as you'd like pixmap allocation to
>    be something a device driver can do anyway (so they'd be out in VRAM
>    when appropriate).   When clients exit, it would probably then
>    be worth copying pixmaps around to compact the virtual memory address
>    space, and one could then free the left over pages easily, returning
>    VM to the operating system.
>
> I was in the middle of 1) when things recently blew up, so I don't have
> anything to report yet; maybe something in a few weeks.  2) will take
> more work, and if someone is interested, please let us (Keith and I) know;
> it shouldn't be too hard to implement.
>
> All this was much less of a concern when displays were typically 1 or
> 8 bits/pixel, but these days most displays are 16 or 32 bits/pixel,
> compounding the heap usage problem.
>
>                                     - Jim


Is it possible to collect memory allocated by the X Server on behalf of
some client? Like a malloc-zone.  When a client disconnects, one could
then simply deallocate the entire zone.

Presumably, such a zone could be a mmap region which is dubdivided into
mallocs related to a certain client.

I don't know how feasible this is, one would have to keep track of
which memory was allocated for whom.  However, I feel it could improve
VM locality of reference and simplify garbage collection quite a bit.

I believe NeXTSTEP had something like this, too.


	regards,


			- Jeroen



-- 
+----------------------------------------------------------------------------+
| Copyright (C) 18:30 03/30/2003 Jeroen van der Zijp.   All Rights Reserved. |
+----------------------------------------------------------------------------+



[XFree86]     [XFree86]     [XFree86 Newbie]     [IETF Annouce]     [Security]     [Bugtraq]
[Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Samba]     [Linux Security]     [Linux RAID]     [Linux Resources]


  Powered by Linux