Re: [PATCH v2] mm: show proportional swap share of the mapping
From: Jerome Marchand <hidden>
Date: 2015-07-29 11:56:46
Also in:
lkml
On 07/29/2015 12:30 PM, Minchan Kim wrote:
Hi Jerome, On Wed, Jul 29, 2015 at 10:33:53AM +0200, Jerome Marchand wrote:quoted
On 06/15/2015 03:06 PM, Minchan Kim wrote:quoted
We want to know per-process workingset size for smart memory management on userland and we use swap(ex, zram) heavily to maximize memory efficiency so workingset includes swap as well as RSS. On such system, if there are lots of shared anonymous pages, it's really hard to figure out exactly how many each process consumes memory(ie, rss + wap) if the system has lots of shared anonymous memory(e.g, android). This patch introduces SwapPss field on /proc/<pid>/smaps so we can get more exact workingset size per process. Bongkyu tested it. Result is below. 1. 50M used swap SwapTotal: 461976 kB SwapFree: 411192 kB $ adb shell cat /proc/*/smaps | grep "SwapPss:" | awk '{sum += $2} END {print sum}'; 48236 $ adb shell cat /proc/*/smaps | grep "Swap:" | awk '{sum += $2} END {print sum}'; 141184Hi Minchan, I just found out about this patch. What kind of shared memory is that? Since it's android, I'm inclined to think something specific like ashmem. I'm asking because this patch won't help for more common type of shared memory. See my comment below.It's normal heap of parent(IOW, MAP_ANON|MAP_PRIVATE memory which is share by child processes).
Ok. I didn't imagine CoW pages would represent such a big share of swapped out pages.
quoted
quoted
2. 240M used swap SwapTotal: 461976 kB SwapFree: 216808 kB $ adb shell cat /proc/*/smaps | grep "SwapPss:" | awk '{sum += $2} END {print sum}'; 230315 $ adb shell cat /proc/*/smaps | grep "Swap:" | awk '{sum += $2} END {print sum}'; 1387744snipquoted
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 6dee68d013ff..d537899f4b25 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c@@ -446,6 +446,7 @@ struct mem_size_stats { unsigned long anonymous_thp; unsigned long swap; u64 pss; + u64 swap_pss; }; static void smaps_account(struct mem_size_stats *mss, struct page *page,@@ -492,9 +493,20 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, } else if (is_swap_pte(*pte)) {This won't work for sysV shm, tmpfs and MAP_SHARED | MAP_ANONYMOUS mapping pages which are pte_none when paged out. They're currently not accounted at all when in swap.This patch doesn't handle those pages because we don't have supported thoses pages. IMHO, if someone need it, it should be another patch and he can contribute it in future.
Sure.
Thanks.
Attachments
- signature.asc [application/pgp-signature] 473 bytes