Review Request 116577: Call malloc_trim() when deleting a dialog

David Edmundson david at davidedmundson.co.uk
Mon Mar 3 22:42:14 UTC 2014



> On March 3, 2014, 8:51 p.m., Martin Gräßlin wrote:
> > recommendation: look at kwin/main.cpp kdemain()

Thanks.

Copy and pasted for lazy:

#ifdef M_TRIM_THRESHOLD
    // Prevent fragmentation of the heap by malloc (glibc).
    //
    // The default threshold is 128*1024, which can result in a large memory usage
    // due to fragmentation especially if we use the raster graphicssystem. On the
    // otherside if the threshold is too low, free() starts to permanently ask the kernel
    // about shrinking the heap.
#ifdef HAVE_UNISTD_H
    const int pagesize = sysconf(_SC_PAGESIZE);
#else
    const int pagesize = 4*1024;
#endif // HAVE_UNISTD_H
    mallopt(M_TRIM_THRESHOLD, 5*pagesize);
#endif // M_TRIM_THRESHOLD


>From what I understand there are two schools of thought:
1) set the options to cleanup more aggressively
2) whenever we delete a load of stuff we say "hey, we're probably super fragmented now. Can you tidy up my memory please."

For a Plasma use-case, I think 2 maybe work better as we can know when we close an applet or dialog. 


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/116577/#review51820
-----------------------------------------------------------


On March 3, 2014, 7:52 p.m., David Edmundson wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/116577/
> -----------------------------------------------------------
> 
> (Updated March 3, 2014, 7:52 p.m.)
> 
> 
> Review request for Plasma.
> 
> 
> Repository: plasma-framework
> 
> 
> Description
> -------
> 
> Call malloc_trim() when deleting a dialog
> 
> A dialog will typically contain lots and lots of tiny objects.
> 
> Tiny mallocs are not returned to the system immediately and are left for
> us to re-use.
> 
> When we delete a dialog it would be a good time to release these.
> 
> This fixes the memory growth when repeatedly opening and closing the
> widget explorer.
> 
> TBH: I don't /fully/ understand malloc_trim, but it does seem this patch makes a difference.
> 
> Also I think maybe this would be better being in the destructor of KDeclatarive::QMLObject as well?
> or maybe we should tune the malloc options so it behaves better in general.
> 
> 
> Diffs
> -----
> 
>   src/declarativeimports/core/dialog.cpp 61e8d93 
> 
> Diff: https://git.reviewboard.kde.org/r/116577/diff/
> 
> 
> Testing
> -------
> 
> The following test (courtesy of Martin K) http://paste.kde.org/pjreffopt creates 10 dialogs, waits 5 seconds and deletes them.
> 
> Before: Memory usage in ksysguard goes up to 125Mb and stays there indefinitely.
> After:Memory usage in ksysguard goes up to 125Mb and when the dialogs are removed goes back down to 35Mb
> 
> 
> Thanks,
> 
> David Edmundson
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20140303/d064bdb8/attachment.html>


More information about the Plasma-devel mailing list