linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Pradeep Sawlani <pradeep.sawlani@gmail.com>
To: linux-kernel@vger.kernel.org, hughd@google.com
Cc: linux-mm@kvack.org
Subject: KSM on Android
Date: Thu, 13 Feb 2014 16:02:49 -0800	[thread overview]
Message-ID: <CAMrOTPiZvfErHrmuDSgUeq5R5M-6xqgYXLGj8a0BjEvMmRkzkg@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2110 bytes --]

Hello

In pursuit of saving memory on Android, I started experimenting with Kernel
Same Page Merging(KSM).
Number of pages shared because of KSM is reported by
/sys/kernel/mm/pages_sharing.
Documentation/vm/ksm.txt explains this as:

"pages_sharing    - how many more sites are sharing them i.e. how much
saved"

After enabling KSM on Android device, this number was reported as 19666
pages.
Obvious optimization is to find out source of sharing and see if we can
avoid duplicate pages at first place.
In order to collect the data needed, It needed few
modifications(trace_printk) statement in mm/ksm.c.
Data should be collected from second cycle because that's when ksm starts
merging
pages. First KSM cycle is only used to calculate the checksum, pages are
added to
unstable tree and eventually moved to stable tree after this.

After analyzing data from second KSM cycle, few things which stood out:
1.  In the same cycle, KSM can scan same page multiple times. Scanning a
page involves
    comparing page with pages in stable tree, if no match is found checksum
is calculated.
    From the look of it, it seems to be cpu intensive operation and impacts
dcache as well.

2.  Same page which is already shared by multiple process can be replaced
by KSM page.
    In this case, let say a particular page is mapped 24 times and is
replaced by KSM page then
    eventually all 24 entries will point to KSM page. pages_sharing will
account for all 24 pages.
    so pages _sharing does not actually report amount of memory saved. From
the above example actual
    savings is one page.

Both cases happen very often with Android because of its architecture -
Zygote spawning(fork) multiple
applications. To calculate actual savings, we should account for same
page(pfn)replaced by same KSM page only once.
In the case 2 example, page_sharing should account only one page.
After recalculating memory saving comes out to be 8602 pages (~34MB).

I am trying to find out right solution to fix pages_sharing and eventually
optimize KSM to scan page
once even if it is mapped multiple times.

Comments?

Thanks,
Pradeep

[-- Attachment #2: Type: text/html, Size: 2654 bytes --]

             reply	other threads:[~2014-02-14  0:03 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-14  0:02 Pradeep Sawlani [this message]
2014-02-14  1:52 KSM on Android Pradeep Sawlani
2014-02-15  6:40 ` Pradeep Sawlani
2014-02-15 23:27 ` Hugh Dickins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMrOTPiZvfErHrmuDSgUeq5R5M-6xqgYXLGj8a0BjEvMmRkzkg@mail.gmail.com \
    --to=pradeep.sawlani@gmail.com \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).