lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMrOTPgBtANS_ryRjan0-dTL97U7eRvtf3dCsss=Kn+Uk89fuA@mail.gmail.com>
Date:	Thu, 13 Feb 2014 17:52:43 -0800
From:	Pradeep Sawlani <pradeep.sawlani@...il.com>
To:	hughd@...gle.com, linux-mm@...ck.org, linux-kernel@...r.kernel.org
Cc:	surim@...126.com, ieidus@...hat.com
Subject: KSM on Android

Re-sending this in plain text format (Apologies)

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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ