From: ric.masonn@gmail.com (Ric Mason)
To: linux-arm-kernel@lists.infradead.org
Subject: Should a swapped out page be deleted from swap cache?
Date: Wed, 06 Mar 2013 19:04:10 +0800 [thread overview]
Message-ID: <513722AA.2030001@gmail.com> (raw)
In-Reply-To: <CAFNq8R5ni4jKRsHJLyGiNPcj4epz8q5zva_0XEJrL1-uVZHb9w@mail.gmail.com>
On 03/06/2013 01:34 PM, Li Haifeng wrote:
> 2013/2/20 Ric Mason <ric.masonn@gmail.com>:
>> Hi Hugh,
>>
>>
>> On 02/20/2013 02:56 AM, Hugh Dickins wrote:
>>> On Tue, 19 Feb 2013, Ric Mason wrote:
>>>> There is a call of try_to_free_swap in function swap_writepage, if
>>>> swap_writepage is call from shrink_page_list path, PageSwapCache(page) ==
>>>> trure, PageWriteback(page) maybe false, page_swapcount(page) == 0, then
>>>> will
>>>> delete the page from swap cache and free swap slot, where I miss?
>>> That's correct. PageWriteback is sure to be false there. page_swapcount
>>> usually won't be 0 there, but sometimes it will be, and in that case we
>>> do want to delete from swap cache and free the swap slot.
>>
>> 1) If PageSwapCache(page) == true, PageWriteback(page) == false,
>> page_swapcount(page) == 0 in swap_writepage(shrink_page_list path), then
>> will delete the page from swap cache and free swap slot, in function
>> swap_writepage:
>>
>> if (try_to_free_swap(page)) {
>> unlock_page(page);
>> goto out;
>> }
>> writeback will not execute, that's wrong. Where I miss?
> when the page is deleted from swap cache and corresponding swap slot
> is free, the page is set dirty. The dirty page won't be reclaimed. It
> is not wrong.
I don't think so. For dirty pages, there are two steps: 1)writeback
2)reclaim. Since PageSwapCache(page) == true && PageWriteback(page) ==
false && page_swapcount(page) == 0 in swap_writeback(),
try_to_free_swap() will return true and writeback will be skip. Then how
can step one be executed?
>
> corresponding path lists as below.
> when swap_writepage() is called by pageout() in shrink_page_list().
> pageout() will return PAGE_SUCCESS. For PAGE_SUCCESS, when
> PageDirty(page) is true, this reclaiming page will be keeped in the
> inactive LRU list.
> shrink_page_list()
> {
> ...
> 904 switch (pageout(page, mapping, sc)) {
> 905 case PAGE_KEEP:
> 906 nr_congested++;
> 907 goto keep_locked;
> 908 case PAGE_ACTIVATE:
> 909 goto activate_locked;
> 910 case PAGE_SUCCESS:
> 911 if (PageWriteback(page))
> 912 goto keep_lumpy;
> 913 if (PageDirty(page))
> 914 goto keep;
> ...}
>
>> 2) In the function pageout, page will be set PG_Reclaim flag, since this
>> flag is set, end_swap_bio_write->end_page_writeback:
>> if (TestClearPageReclaim(page))
>> rotate_reclaimable_page(page);
>> it means that page will be add to the tail of lru list, page is clean
>> anonymous page this time and will be reclaim to buddy system soon, correct?
> correct
>> If is correct, what is the meaning of rotate here?
> Rotating here is to add the page to the tail of inactive LRU list. So
> this page will be reclaimed ASAP while reclaiming.
>
>>> Hugh
>>
WARNING: multiple messages have this Message-ID (diff)
From: Ric Mason <ric.masonn@gmail.com>
To: Li Haifeng <omycle@gmail.com>
Cc: Hugh Dickins <hughd@google.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: Should a swapped out page be deleted from swap cache?
Date: Wed, 06 Mar 2013 19:04:10 +0800 [thread overview]
Message-ID: <513722AA.2030001@gmail.com> (raw)
In-Reply-To: <CAFNq8R5ni4jKRsHJLyGiNPcj4epz8q5zva_0XEJrL1-uVZHb9w@mail.gmail.com>
On 03/06/2013 01:34 PM, Li Haifeng wrote:
> 2013/2/20 Ric Mason <ric.masonn@gmail.com>:
>> Hi Hugh,
>>
>>
>> On 02/20/2013 02:56 AM, Hugh Dickins wrote:
>>> On Tue, 19 Feb 2013, Ric Mason wrote:
>>>> There is a call of try_to_free_swap in function swap_writepage, if
>>>> swap_writepage is call from shrink_page_list path, PageSwapCache(page) ==
>>>> trure, PageWriteback(page) maybe false, page_swapcount(page) == 0, then
>>>> will
>>>> delete the page from swap cache and free swap slot, where I miss?
>>> That's correct. PageWriteback is sure to be false there. page_swapcount
>>> usually won't be 0 there, but sometimes it will be, and in that case we
>>> do want to delete from swap cache and free the swap slot.
>>
>> 1) If PageSwapCache(page) == true, PageWriteback(page) == false,
>> page_swapcount(page) == 0 in swap_writepage(shrink_page_list path), then
>> will delete the page from swap cache and free swap slot, in function
>> swap_writepage:
>>
>> if (try_to_free_swap(page)) {
>> unlock_page(page);
>> goto out;
>> }
>> writeback will not execute, that's wrong. Where I miss?
> when the page is deleted from swap cache and corresponding swap slot
> is free, the page is set dirty. The dirty page won't be reclaimed. It
> is not wrong.
I don't think so. For dirty pages, there are two steps: 1)writeback
2)reclaim. Since PageSwapCache(page) == true && PageWriteback(page) ==
false && page_swapcount(page) == 0 in swap_writeback(),
try_to_free_swap() will return true and writeback will be skip. Then how
can step one be executed?
>
> corresponding path lists as below.
> when swap_writepage() is called by pageout() in shrink_page_list().
> pageout() will return PAGE_SUCCESS. For PAGE_SUCCESS, when
> PageDirty(page) is true, this reclaiming page will be keeped in the
> inactive LRU list.
> shrink_page_list()
> {
> ...
> 904 switch (pageout(page, mapping, sc)) {
> 905 case PAGE_KEEP:
> 906 nr_congested++;
> 907 goto keep_locked;
> 908 case PAGE_ACTIVATE:
> 909 goto activate_locked;
> 910 case PAGE_SUCCESS:
> 911 if (PageWriteback(page))
> 912 goto keep_lumpy;
> 913 if (PageDirty(page))
> 914 goto keep;
> ...}
>
>> 2) In the function pageout, page will be set PG_Reclaim flag, since this
>> flag is set, end_swap_bio_write->end_page_writeback:
>> if (TestClearPageReclaim(page))
>> rotate_reclaimable_page(page);
>> it means that page will be add to the tail of lru list, page is clean
>> anonymous page this time and will be reclaim to buddy system soon, correct?
> correct
>> If is correct, what is the meaning of rotate here?
> Rotating here is to add the page to the tail of inactive LRU list. So
> this page will be reclaimed ASAP while reclaiming.
>
>>> Hugh
>>
--
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>
WARNING: multiple messages have this Message-ID (diff)
From: Ric Mason <ric.masonn@gmail.com>
To: Li Haifeng <omycle@gmail.com>
Cc: Hugh Dickins <hughd@google.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: Should a swapped out page be deleted from swap cache?
Date: Wed, 06 Mar 2013 19:04:10 +0800 [thread overview]
Message-ID: <513722AA.2030001@gmail.com> (raw)
In-Reply-To: <CAFNq8R5ni4jKRsHJLyGiNPcj4epz8q5zva_0XEJrL1-uVZHb9w@mail.gmail.com>
On 03/06/2013 01:34 PM, Li Haifeng wrote:
> 2013/2/20 Ric Mason <ric.masonn@gmail.com>:
>> Hi Hugh,
>>
>>
>> On 02/20/2013 02:56 AM, Hugh Dickins wrote:
>>> On Tue, 19 Feb 2013, Ric Mason wrote:
>>>> There is a call of try_to_free_swap in function swap_writepage, if
>>>> swap_writepage is call from shrink_page_list path, PageSwapCache(page) ==
>>>> trure, PageWriteback(page) maybe false, page_swapcount(page) == 0, then
>>>> will
>>>> delete the page from swap cache and free swap slot, where I miss?
>>> That's correct. PageWriteback is sure to be false there. page_swapcount
>>> usually won't be 0 there, but sometimes it will be, and in that case we
>>> do want to delete from swap cache and free the swap slot.
>>
>> 1) If PageSwapCache(page) == true, PageWriteback(page) == false,
>> page_swapcount(page) == 0 in swap_writepage(shrink_page_list path), then
>> will delete the page from swap cache and free swap slot, in function
>> swap_writepage:
>>
>> if (try_to_free_swap(page)) {
>> unlock_page(page);
>> goto out;
>> }
>> writeback will not execute, that's wrong. Where I miss?
> when the page is deleted from swap cache and corresponding swap slot
> is free, the page is set dirty. The dirty page won't be reclaimed. It
> is not wrong.
I don't think so. For dirty pages, there are two steps: 1)writeback
2)reclaim. Since PageSwapCache(page) == true && PageWriteback(page) ==
false && page_swapcount(page) == 0 in swap_writeback(),
try_to_free_swap() will return true and writeback will be skip. Then how
can step one be executed?
>
> corresponding path lists as below.
> when swap_writepage() is called by pageout() in shrink_page_list().
> pageout() will return PAGE_SUCCESS. For PAGE_SUCCESS, when
> PageDirty(page) is true, this reclaiming page will be keeped in the
> inactive LRU list.
> shrink_page_list()
> {
> ...
> 904 switch (pageout(page, mapping, sc)) {
> 905 case PAGE_KEEP:
> 906 nr_congested++;
> 907 goto keep_locked;
> 908 case PAGE_ACTIVATE:
> 909 goto activate_locked;
> 910 case PAGE_SUCCESS:
> 911 if (PageWriteback(page))
> 912 goto keep_lumpy;
> 913 if (PageDirty(page))
> 914 goto keep;
> ...}
>
>> 2) In the function pageout, page will be set PG_Reclaim flag, since this
>> flag is set, end_swap_bio_write->end_page_writeback:
>> if (TestClearPageReclaim(page))
>> rotate_reclaimable_page(page);
>> it means that page will be add to the tail of lru list, page is clean
>> anonymous page this time and will be reclaim to buddy system soon, correct?
> correct
>> If is correct, what is the meaning of rotate here?
> Rotating here is to add the page to the tail of inactive LRU list. So
> this page will be reclaimed ASAP while reclaiming.
>
>>> Hugh
>>
next prev parent reply other threads:[~2013-03-06 11:04 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-18 10:48 Should a swapped out page be deleted from swap cache? Li Haifeng
2013-02-18 10:48 ` Li Haifeng
2013-02-18 10:48 ` Li Haifeng
2013-02-18 18:06 ` Hugh Dickins
2013-02-18 18:06 ` Hugh Dickins
2013-02-18 18:06 ` Hugh Dickins
2013-02-19 0:39 ` Will Huck
2013-02-19 0:39 ` Will Huck
2013-02-19 0:39 ` Will Huck
2013-02-19 19:06 ` Hugh Dickins
2013-02-19 19:06 ` Hugh Dickins
2013-02-19 19:06 ` Hugh Dickins
2013-02-20 0:43 ` Will Huck
2013-02-20 0:43 ` Will Huck
2013-02-20 0:43 ` Will Huck
2013-02-19 2:04 ` Li Haifeng
2013-02-19 2:04 ` Li Haifeng
2013-02-19 2:04 ` Li Haifeng
2013-02-19 2:38 ` Will Huck
2013-02-19 2:38 ` Will Huck
2013-02-19 2:38 ` Will Huck
2013-02-19 6:53 ` Li Haifeng
2013-02-19 6:53 ` Li Haifeng
2013-02-19 6:53 ` Li Haifeng
2013-02-19 9:38 ` Sha Zhengju
2013-02-19 9:38 ` Sha Zhengju
2013-02-19 9:38 ` Sha Zhengju
2013-02-19 18:49 ` Hugh Dickins
2013-02-19 18:49 ` Hugh Dickins
2013-02-19 18:49 ` Hugh Dickins
2013-02-19 8:32 ` Ric Mason
2013-02-19 8:32 ` Ric Mason
2013-02-19 8:32 ` Ric Mason
2013-02-19 18:56 ` Hugh Dickins
2013-02-19 18:56 ` Hugh Dickins
2013-02-19 18:56 ` Hugh Dickins
2013-02-20 0:40 ` Ric Mason
2013-02-20 0:40 ` Ric Mason
2013-02-20 0:40 ` Ric Mason
2013-03-06 5:34 ` Li Haifeng
2013-03-06 5:34 ` Li Haifeng
2013-03-06 5:34 ` Li Haifeng
2013-03-06 11:04 ` Ric Mason [this message]
2013-03-06 11:04 ` Ric Mason
2013-03-06 11:04 ` Ric Mason
2013-03-06 11:10 ` Ric Mason
2013-03-06 11:10 ` Ric Mason
2013-03-06 11:10 ` Ric Mason
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=513722AA.2030001@gmail.com \
--to=ric.masonn@gmail.com \
--cc=linux-arm-kernel@lists.infradead.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 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.