diff mbox series

[2/8] mm/vmscan: remove unneeded can_split_huge_page check

Message ID 20220329132619.18689-3-linmiaohe@huawei.com (mailing list archive)
State New
Headers show
Series A few cleanup and fixup patches for migration | expand

Commit Message

Miaohe Lin March 29, 2022, 1:26 p.m. UTC
can_split_huge_page is introduced via commit b8f593cd0896 ("mm, THP, swap:
check whether THP can be split firstly") to avoid deleting the THP from
the swap cache and freeing the swap cluster when the THP cannot be split.
But since commit bd4c82c22c36 ("mm, THP, swap: delay splitting THP after
swapped out"), splitting THP is delayed until THP is swapped out. There's
no need to delete the THP from the swap cache and free the swap cluster
anymore. Thus we can remove this unneeded can_split_huge_page check now to
simplify the code logic.

Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
---
 mm/vmscan.c | 3 ---
 1 file changed, 3 deletions(-)

Comments

Huang, Ying March 31, 2022, 8:38 a.m. UTC | #1
Miaohe Lin <linmiaohe@huawei.com> writes:

> can_split_huge_page is introduced via commit b8f593cd0896 ("mm, THP, swap:
> check whether THP can be split firstly") to avoid deleting the THP from
> the swap cache and freeing the swap cluster when the THP cannot be split.
> But since commit bd4c82c22c36 ("mm, THP, swap: delay splitting THP after
> swapped out"), splitting THP is delayed until THP is swapped out. There's
> no need to delete the THP from the swap cache and free the swap cluster
> anymore. Thus we can remove this unneeded can_split_huge_page check now to
> simplify the code logic.
>
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
> ---
>  mm/vmscan.c | 3 ---
>  1 file changed, 3 deletions(-)
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 7c1a9713bfc9..09b452c4d256 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1691,9 +1691,6 @@ static unsigned int shrink_page_list(struct list_head *page_list,
>  				if (folio_maybe_dma_pinned(folio))
>  					goto keep_locked;
>  				if (PageTransHuge(page)) {
> -					/* cannot split THP, skip it */
> -					if (!can_split_folio(folio, NULL))
> -						goto activate_locked;
>  					/*
>  					 * Split pages without a PMD map right
>  					 * away. Chances are some or all of the

I'm OK with the change itself.  But THP still needs to be split after
being swapped out.  The reason we don't need to check can_split_folio()
is that folio_maybe_dma_pinned() is checked before.  Which will avoid
the long term pinned pages to be swapped out.  And we can live with
short term pinned pages.  Without can_split_folio() checking we can
simplify the code as follows,

	/*
	 * Split pages without a PMD map right
	 * away. Chances are some or all of the
	 * tail pages can be freed without IO.
	 */
	if (PageTransHuge(page) && !compound_mapcount(page) &&
            split_huge_page_to_list(page, page_list))
		goto keep_locked;
                                                                
activate_locked can be changed to keep_locked too, because it's just
short term pinning.

Best Regards,
Huang, Ying
Miaohe Lin March 31, 2022, 10:47 a.m. UTC | #2
On 2022/3/31 16:38, Huang, Ying wrote:
> Miaohe Lin <linmiaohe@huawei.com> writes:
> 
>> can_split_huge_page is introduced via commit b8f593cd0896 ("mm, THP, swap:
>> check whether THP can be split firstly") to avoid deleting the THP from
>> the swap cache and freeing the swap cluster when the THP cannot be split.
>> But since commit bd4c82c22c36 ("mm, THP, swap: delay splitting THP after
>> swapped out"), splitting THP is delayed until THP is swapped out. There's
>> no need to delete the THP from the swap cache and free the swap cluster
>> anymore. Thus we can remove this unneeded can_split_huge_page check now to
>> simplify the code logic.
>>
>> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
>> ---
>>  mm/vmscan.c | 3 ---
>>  1 file changed, 3 deletions(-)
>>
>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>> index 7c1a9713bfc9..09b452c4d256 100644
>> --- a/mm/vmscan.c
>> +++ b/mm/vmscan.c
>> @@ -1691,9 +1691,6 @@ static unsigned int shrink_page_list(struct list_head *page_list,
>>  				if (folio_maybe_dma_pinned(folio))
>>  					goto keep_locked;
>>  				if (PageTransHuge(page)) {
>> -					/* cannot split THP, skip it */
>> -					if (!can_split_folio(folio, NULL))
>> -						goto activate_locked;
>>  					/*
>>  					 * Split pages without a PMD map right
>>  					 * away. Chances are some or all of the
> 
> I'm OK with the change itself.  But THP still needs to be split after
> being swapped out.  The reason we don't need to check can_split_folio()

Could you please explain the relevant code path more detailed slightly?
IIUC, if THP is swapped out, it will be freed via destroy_compound_page
after __remove_mapping in shrink_page_list. So THP can be freed without
split. Or am I miss something ?

> is that folio_maybe_dma_pinned() is checked before.  Which will avoid
> the long term pinned pages to be swapped out.  And we can live with
> short term pinned pages.  Without can_split_folio() checking we can
> simplify the code as follows,
> 
> 	/*
> 	 * Split pages without a PMD map right
> 	 * away. Chances are some or all of the
> 	 * tail pages can be freed without IO.
> 	 */
> 	if (PageTransHuge(page) && !compound_mapcount(page) &&
>             split_huge_page_to_list(page, page_list))
> 		goto keep_locked;
>                                                                 
> activate_locked can be changed to keep_locked too, because it's just
> short term pinning.
> 

The change above looks good to me. Many thanks. Should I add a Suggested-by
tag for you?

> Best Regards,
> Huang, Ying

Thanks.

> 
> .
>
diff mbox series

Patch

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 7c1a9713bfc9..09b452c4d256 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1691,9 +1691,6 @@  static unsigned int shrink_page_list(struct list_head *page_list,
 				if (folio_maybe_dma_pinned(folio))
 					goto keep_locked;
 				if (PageTransHuge(page)) {
-					/* cannot split THP, skip it */
-					if (!can_split_folio(folio, NULL))
-						goto activate_locked;
 					/*
 					 * Split pages without a PMD map right
 					 * away. Chances are some or all of the