> On May 19, 2011, 7:34 a.m., Aaron J. Seigo wrote:
> > those are some impressive results. my guess is that we likely have a very 
> > similar issue in plasma. in both cases, we are dealing with lots of small 
> > bits of memory in the form of pixmaps, strings, etc. that are fairly 
> > constantly coming and going. switching between compositing and no 
> > compositing is probably the 'worst case' real world scenario for this.
> > 
> > if this does test out well, i'd suggest putting this code in libkworkspace 
> > so that all of our apps with this usage pattern (plasma-desktop, 
> > plasma-netbook, krunner, kwin, ..) can take advantage of a common 
> > implementation. a set of static methods in the KWorkspace namespace should 
> > suffice.
> > 
> > if you could repeat your experiment with plasma-desktop with and without 
> > such a patch, that would be great and let us know whether we should adopt 
> > such a strategy across the plasma shell components.
> > 
> > as for portability ... i'm not overly concerned about the portability of 
> > this to non-glibc systems as those systems are our primary targets. 
> > however, instead of checking for GLIBC the code could simply check for 
> > M_TRIM_THRESHOLD. for comparison, here is how busybox does this same trick 
> > for both the trim size and mmap request size threshold:
> > 
> > #ifndef PAGE_SIZE
> > # define PAGE_SIZE (4*1024) /* guess */
> > #endif
> > #ifdef M_TRIM_THRESHOLD
> >     /* M_TRIM_THRESHOLD is the maximum amount of freed top-most memory
> >     * to keep before releasing to the OS
> >     * Default is way too big: 256k
> >     */
> >    mallopt(M_TRIM_THRESHOLD, 2 * PAGE_SIZE);
> > #endif
> > #ifdef M_MMAP_THRESHOLD
> >    /* M_MMAP_THRESHOLD is the request size threshold for using mmap()
> >     * Default is too big: 256k
> >     */
> >    mallopt(M_MMAP_THRESHOLD, 8 * PAGE_SIZE - 256);
> > #endif
> > 
> > i doubt we need to tweak the mmap strategy, but i like the checks for the 
> > definitions of mallopt there. for portability to non-unix-y systems, we 
> > could wrap this whole thing in a #ifndef Q_WS_WIN block which should keep 
> > the KDE Windows team from pulling their hair out over the use of such 
> > UNIX-y API ;)

sysconf(_SC_PAGESIZE) returns the page size for mmap, no need for (4*1024)


- Ivan


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/101385/#review3402
-----------------------------------------------------------


On May 18, 2011, 8:53 p.m., Philipp Knechtges wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/101385/
> -----------------------------------------------------------
> 
> (Updated May 18, 2011, 8:53 p.m.)
> 
> 
> Review request for kwin and Plasma.
> 
> 
> Summary
> -------
> 
> The intention of this patch is to lower the heap fragmentation in KWin when 
> using the raster backend.
> 
> One can illustrate the issue with the following testcase: If one currently 
> uses the raster backend and
> switches back to non-compositing mode one gets easily a similar memory usage 
> like the following:
> 
> Situation: 14 windows, QtCurve
> KWin started with compositing: 40 MB
> KWin switched to non-compositing : more than 70 MB
> 
> The first guess might be, that this is due to a memleak because of not 
> properly released pixmaps.
> But calling malloc_stats() sheds some more light on the subject 
> (non-compositing mode):
> 
> Arena 0:
> system bytes     =   72232960
> in use bytes     =    8180512
> Arena 1:
> system bytes     =     135168
> in use bytes     =       4784
> Total (incl. mmap):
> system bytes     =   73080832
> in use bytes     =    8898000
> max mmap regions =         13
> max mmap bytes   =   36343808
> 
> In other words, the glibc has allocated more than 70 MB memory although KWin 
> uses only less than 10 MB.
> The problem is that glibc only resizes the heap if the heap has more than 128 
> KB of free space at the end, but
> many decoration pixmaps are smaller. Using mallopt to tune the threshold to 
> 20 KB (i'm open for other suggestions?)
> fixes the issue. After the patch:
> 
> KWin in compositing mode: 19 MB
> KWin switched to non-compositing: 13 MB
> 
> 
> Arena 0:
> system bytes     =   12374016
> in use bytes     =    6894544
> Arena 1:
> system bytes     =     135168
> in use bytes     =       4784
> Total (incl. mmap):
> system bytes     =   13750272
> in use bytes     =    8140416
> max mmap regions =         67
> max mmap bytes   =   99463168
> 
> Are there some negative effects?
> The only negative effect i am aware of is, that Glibc free() is calling the 
> sbrk syscall more often. But this should
> not be a bottleneck.
> 
> 
> Diffs
> -----
> 
>   kwin/composite.cpp 9edb99d 
>   kwin/main.cpp f767f54 
> 
> Diff: http://git.reviewboard.kde.org/r/101385/diff
> 
> 
> Testing
> -------
> 
> Tested using a standard Fedora 14.
> Would be nice to know, whether other OSes have similar issues?
> Martin Gräßlin had some concerns about the portability?
> 
> 
> Thanks,
> 
> Philipp
> 
>

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to