From: "Chris Friesen" <cfriesen@nortel.com>
To: Rik van Riel <riel@redhat.com>
Cc: Minchan Kim <minchan.kim@gmail.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-mm@kvack.org, Balbir Singh <balbir@linux.vnet.ibm.com>
Subject: Re: tracking memory usage/leak in "inactive" field in /proc/meminfo?
Date: Tue, 16 Feb 2010 10:52:26 -0600 [thread overview]
Message-ID: <4B7ACD4A.10101@nortel.com> (raw)
In-Reply-To: <4B797D93.5090307@redhat.com>
On 02/15/2010 11:00 AM, Rik van Riel wrote:
> On 02/15/2010 10:50 AM, Chris Friesen wrote:
>
>> Looking at the code, it looks like page_remove_rmap() clears the
>> Anonpage flag and removes it from NR_ANON_PAGES, and the caller is
>> responsible for removing it from the LRU. Is that right?
>
> Nope.
>
>> I'll keep digging in the code, but does anyone know where the removal
>> from the LRU is supposed to happen in the above code paths?
>
> Removal from the LRU is done from the page freeing code, on
> the final free of the page.
>
> It appears you have code somewhere that increments the reference
> count on user pages and then forgets to lower it afterwards.
Okay, that makes sense.
I'm still trying to get a handle on the LRU removal though. The code
path that I saw most which resulted in clearing the anon bit but leaving
the page on the LRU was the following:
[<ffffffff8029c951>] kmemleak_clear_anon+0x7f/0xbe
[<ffffffff802864c7>] page_remove_rmap+0x45/0x146
[<ffffffff8027dc7e>] unmap_vmas+0x41c/0x948
[<ffffffff80282405>] exit_mmap+0x7b/0x108
[<ffffffff8022f441>] mmput+0x33/0x110
[<ffffffff80233b05>] exit_mm+0x103/0x130
[<ffffffff802355b5>] do_exit+0x17b/0x91f
[<ffffffff80235d95>] do_group_exit+0x3c/0x9c
[<ffffffff80235e07>] sys_exit+0x0/0x12
[<ffffffff8021ddb5>] ia32_syscall_done+0x0/0xa
There are a bunch of inline functions involved, but I think the chain
from page_remove_rmap() back up to unmap_vmas() looks like this:
page_remove_rmap
zap_pte_range
zap_pmd_range
zap_pud_range
unmap_page_range
unmap_vmas
So in this scenario, where do the pages actually get removed from the
LRU list (assuming that they're not in use by anyone else)?
Thanks,
Chris
WARNING: multiple messages have this Message-ID (diff)
From: "Chris Friesen" <cfriesen@nortel.com>
To: Rik van Riel <riel@redhat.com>
Cc: Minchan Kim <minchan.kim@gmail.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-mm@kvack.org, Balbir Singh <balbir@linux.vnet.ibm.com>
Subject: Re: tracking memory usage/leak in "inactive" field in /proc/meminfo?
Date: Tue, 16 Feb 2010 10:52:26 -0600 [thread overview]
Message-ID: <4B7ACD4A.10101@nortel.com> (raw)
In-Reply-To: <4B797D93.5090307@redhat.com>
On 02/15/2010 11:00 AM, Rik van Riel wrote:
> On 02/15/2010 10:50 AM, Chris Friesen wrote:
>
>> Looking at the code, it looks like page_remove_rmap() clears the
>> Anonpage flag and removes it from NR_ANON_PAGES, and the caller is
>> responsible for removing it from the LRU. Is that right?
>
> Nope.
>
>> I'll keep digging in the code, but does anyone know where the removal
>> from the LRU is supposed to happen in the above code paths?
>
> Removal from the LRU is done from the page freeing code, on
> the final free of the page.
>
> It appears you have code somewhere that increments the reference
> count on user pages and then forgets to lower it afterwards.
Okay, that makes sense.
I'm still trying to get a handle on the LRU removal though. The code
path that I saw most which resulted in clearing the anon bit but leaving
the page on the LRU was the following:
[<ffffffff8029c951>] kmemleak_clear_anon+0x7f/0xbe
[<ffffffff802864c7>] page_remove_rmap+0x45/0x146
[<ffffffff8027dc7e>] unmap_vmas+0x41c/0x948
[<ffffffff80282405>] exit_mmap+0x7b/0x108
[<ffffffff8022f441>] mmput+0x33/0x110
[<ffffffff80233b05>] exit_mm+0x103/0x130
[<ffffffff802355b5>] do_exit+0x17b/0x91f
[<ffffffff80235d95>] do_group_exit+0x3c/0x9c
[<ffffffff80235e07>] sys_exit+0x0/0x12
[<ffffffff8021ddb5>] ia32_syscall_done+0x0/0xa
There are a bunch of inline functions involved, but I think the chain
from page_remove_rmap() back up to unmap_vmas() looks like this:
page_remove_rmap
zap_pte_range
zap_pmd_range
zap_pud_range
unmap_page_range
unmap_vmas
So in this scenario, where do the pages actually get removed from the
LRU list (assuming that they're not in use by anyone else)?
Thanks,
Chris
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-02-16 16:59 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-09 16:51 tracking memory usage/leak in "inactive" field in /proc/meminfo? Chris Friesen
2010-02-09 16:51 ` Chris Friesen
2010-02-10 0:32 ` KOSAKI Motohiro
2010-02-10 0:32 ` KOSAKI Motohiro
2010-02-10 3:50 ` Balbir Singh
2010-02-10 3:50 ` Balbir Singh
2010-02-10 4:09 ` KOSAKI Motohiro
2010-02-10 4:09 ` KOSAKI Motohiro
2010-02-10 17:05 ` Chris Friesen
2010-02-11 0:45 ` Minchan Kim
2010-02-11 0:45 ` Minchan Kim
2010-02-11 18:54 ` Chris Friesen
2010-02-11 18:54 ` Chris Friesen
2010-02-11 19:04 ` Rik van Riel
2010-02-11 19:04 ` Rik van Riel
2010-02-12 2:38 ` Minchan Kim
2010-02-12 2:38 ` Minchan Kim
2010-02-12 7:35 ` Chris Friesen
2010-02-12 7:35 ` Chris Friesen
2010-02-12 8:04 ` KOSAKI Motohiro
2010-02-12 8:04 ` KOSAKI Motohiro
2010-02-15 15:50 ` Chris Friesen
2010-02-15 15:50 ` Chris Friesen
2010-02-15 17:00 ` Rik van Riel
2010-02-15 17:00 ` Rik van Riel
2010-02-16 16:52 ` Chris Friesen [this message]
2010-02-16 16:52 ` Chris Friesen
2010-02-16 17:12 ` Rik van Riel
2010-02-16 17:12 ` Rik van Riel
2010-02-16 21:26 ` Chris Friesen
2010-02-16 21:26 ` Chris Friesen
2010-02-16 22:22 ` Rik van Riel
2010-02-16 22:22 ` Rik van Riel
2010-02-18 15:39 ` tracking memory usage/leak in "inactive" field in /proc/meminfo? -- solved Chris Friesen
2010-02-18 15:39 ` Chris Friesen
2010-02-12 17:50 ` tracking memory usage/leak in "inactive" field in /proc/meminfo? Catalin Marinas
2010-02-12 17:50 ` Catalin Marinas
2010-02-13 6:29 ` Balbir Singh
2010-02-13 6:29 ` Balbir Singh
2010-02-15 16:02 ` Chris Friesen
2010-02-15 16:02 ` Chris Friesen
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=4B7ACD4A.10101@nortel.com \
--to=cfriesen@nortel.com \
--cc=balbir@linux.vnet.ibm.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.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.