From: Jerome Marchand <jmarchan@redhat.com>
To: Minchan Kim <minchan@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Hugh Dickins <hughd@google.com>,
Bongkyu Kim <bongkyu.kim@lge.com>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Jonathan Corbet <corbet@lwn.net>
Subject: Re: [PATCH v2] mm: show proportional swap share of the mapping
Date: Wed, 29 Jul 2015 13:56:35 +0200 [thread overview]
Message-ID: <55B8BF73.4060207@redhat.com> (raw)
In-Reply-To: <20150729102849.GA19352@bgram>
[-- Attachment #1: Type: text/plain, Size: 2813 bytes --]
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:
>> On 06/15/2015 03:06 PM, Minchan Kim wrote:
>>> 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}';
>>> 141184
>>
>> Hi 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.
>
>>
>>>
>>> 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}';
>>> 1387744
>>>
>> snip
>>> 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.
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
next prev parent reply other threads:[~2015-07-29 11:56 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-15 13:06 [PATCH v2] mm: show proportional swap share of the mapping Minchan Kim
2015-06-15 13:06 ` Minchan Kim
2015-07-07 13:47 ` Minchan Kim
2015-07-07 13:47 ` Minchan Kim
2015-07-14 21:07 ` Andrew Morton
2015-07-14 21:07 ` Andrew Morton
2015-07-15 23:49 ` Minchan Kim
2015-07-15 23:49 ` Minchan Kim
2015-07-29 8:33 ` Jerome Marchand
2015-07-29 10:30 ` Minchan Kim
2015-07-29 10:30 ` Minchan Kim
2015-07-29 11:56 ` Jerome Marchand [this message]
2015-08-05 11:38 ` Vlastimil Babka
2015-08-05 11:38 ` Vlastimil Babka
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=55B8BF73.4060207@redhat.com \
--to=jmarchan@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=bongkyu.kim@lge.com \
--cc=corbet@lwn.net \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=sergey.senozhatsky.work@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.