From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: KSM For All Via LD_PRELOAD? Date: Wed, 09 Jun 2010 10:56:38 +0200 Message-ID: <4C0F5746.5050201@redhat.com> References: <4C0E8F3B.5060501@bobich.net> <4C0F51C8.70802@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Gordan Bobic , kvm@vger.kernel.org To: dlaor@redhat.com Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:52791 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754248Ab0FII4m (ORCPT ); Wed, 9 Jun 2010 04:56:42 -0400 Received: by fxm8 with SMTP id 8so3417518fxm.19 for ; Wed, 09 Jun 2010 01:56:41 -0700 (PDT) In-Reply-To: <4C0F51C8.70802@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 06/09/2010 10:33 AM, Dor Laor wrote: >> What I'm thinking about is somehow intercepting malloc() and wrapping it >> so that all malloc()-ed memory gets madvise()-d as well. You can also operate at a lower level and intercept mmap and brk, not malloc. (But see below). >> Or is this too crazy an idea? > > It should work. Note that the the malloced memory should be aligned in > order to get better sharing. Within glibc malloc large blocks are mmaped, so they are automatically aligned. Effective sharing of small blocks would take too much luck or too much wasted memory, so probably madvising brk memory is not too useful. Of course there are exceptions. Bitmaps are very much sharable, but not big. And some programs have their own allocator, using mmap in all likelihood and slicing the resulting block. Typically these will be virtual machines for garbage collected languages (but also GCC for example does this). They will store a lot of pointers in there too, so in this case KSM would likely work a lot for little benefit. So if you really want to apply it to _all_ processes, it comes to mind to wrap both mmap and malloc so that you can set a flag only for mmap-within-malloc... It will take some experimentation and heuristics to actually not degrade performance (and of course it will depend on the workload), but it should work. Paolo