* [PATCH 1/3] mm/vmscan: not necessary to re-init the list for each iteration
@ 2022-04-26 2:17 Wei Yang
2022-04-26 2:17 ` [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning Wei Yang
2022-04-26 2:17 ` [PATCH 3/3] mm/vmscan: not use NUMA_NO_NODE as indicator of page on different node Wei Yang
0 siblings, 2 replies; 6+ messages in thread
From: Wei Yang @ 2022-04-26 2:17 UTC (permalink / raw)
To: akpm; +Cc: linux-mm, Wei Yang
node_page_list is defined with LIST_HEAD and be cleaned until
list_empty.
So it is not necessary to re-init it again.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
mm/vmscan.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 0b7cc9309e70..9b5ce5778e9b 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2539,7 +2539,6 @@ unsigned long reclaim_pages(struct list_head *page_list)
page = lru_to_page(page_list);
if (nid == NUMA_NO_NODE) {
nid = page_to_nid(page);
- INIT_LIST_HEAD(&node_page_list);
}
if (nid == page_to_nid(page)) {
--
2.33.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning
2022-04-26 2:17 [PATCH 1/3] mm/vmscan: not necessary to re-init the list for each iteration Wei Yang
@ 2022-04-26 2:17 ` Wei Yang
2022-04-26 21:47 ` Andrew Morton
2022-04-26 2:17 ` [PATCH 3/3] mm/vmscan: not use NUMA_NO_NODE as indicator of page on different node Wei Yang
1 sibling, 1 reply; 6+ messages in thread
From: Wei Yang @ 2022-04-26 2:17 UTC (permalink / raw)
To: akpm; +Cc: linux-mm, Wei Yang
node_page_list would always be !empty on finishing the loop, except
page_list is empty.
Let's handle empty page_list before doing any real work including
touching PF_MEMALLOC flag.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
mm/vmscan.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 9b5ce5778e9b..3a36ebd6295d 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2533,9 +2533,12 @@ unsigned long reclaim_pages(struct list_head *page_list)
.no_demotion = 1,
};
+ if (list_empty(page_list))
+ return nr_reclaimed;
+
noreclaim_flag = memalloc_noreclaim_save();
- while (!list_empty(page_list)) {
+ do {
page = lru_to_page(page_list);
if (nid == NUMA_NO_NODE) {
nid = page_to_nid(page);
@@ -2557,17 +2560,15 @@ unsigned long reclaim_pages(struct list_head *page_list)
}
nid = NUMA_NO_NODE;
- }
+ } while (!list_empty(page_list));
- if (!list_empty(&node_page_list)) {
- nr_reclaimed += shrink_page_list(&node_page_list,
- NODE_DATA(nid),
- &sc, &dummy_stat, false);
- while (!list_empty(&node_page_list)) {
- page = lru_to_page(&node_page_list);
- list_del(&page->lru);
- putback_lru_page(page);
- }
+ nr_reclaimed += shrink_page_list(&node_page_list,
+ NODE_DATA(nid),
+ &sc, &dummy_stat, false);
+ while (!list_empty(&node_page_list)) {
+ page = lru_to_page(&node_page_list);
+ list_del(&page->lru);
+ putback_lru_page(page);
}
memalloc_noreclaim_restore(noreclaim_flag);
--
2.33.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning
2022-04-26 2:17 ` [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning Wei Yang
@ 2022-04-26 21:47 ` Andrew Morton
2022-04-27 23:25 ` Wei Yang
0 siblings, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2022-04-26 21:47 UTC (permalink / raw)
To: Wei Yang; +Cc: linux-mm
On Tue, 26 Apr 2022 02:17:42 +0000 Wei Yang <richard.weiyang@gmail.com> wrote:
> node_page_list would always be !empty on finishing the loop, except
> page_list is empty.
>
> Let's handle empty page_list before doing any real work including
> touching PF_MEMALLOC flag.
Please see
https://lkml.kernel.org/r/20220425111232.23182-3-linmiaohe@huawei.com
I'll skip this patch.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning
2022-04-26 21:47 ` Andrew Morton
@ 2022-04-27 23:25 ` Wei Yang
2022-04-27 23:29 ` Andrew Morton
0 siblings, 1 reply; 6+ messages in thread
From: Wei Yang @ 2022-04-27 23:25 UTC (permalink / raw)
To: Andrew Morton; +Cc: Wei Yang, linux-mm
On Tue, Apr 26, 2022 at 02:47:25PM -0700, Andrew Morton wrote:
>On Tue, 26 Apr 2022 02:17:42 +0000 Wei Yang <richard.weiyang@gmail.com> wrote:
>
>> node_page_list would always be !empty on finishing the loop, except
>> page_list is empty.
>>
>> Let's handle empty page_list before doing any real work including
>> touching PF_MEMALLOC flag.
>
>Please see
>https://lkml.kernel.org/r/20220425111232.23182-3-linmiaohe@huawei.com
Aha, I have thought about this.
The following change is still valid, could I rebase on top of this?
>
>I'll skip this patch.
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning
2022-04-27 23:25 ` Wei Yang
@ 2022-04-27 23:29 ` Andrew Morton
0 siblings, 0 replies; 6+ messages in thread
From: Andrew Morton @ 2022-04-27 23:29 UTC (permalink / raw)
To: Wei Yang; +Cc: linux-mm
On Wed, 27 Apr 2022 23:25:31 +0000 Wei Yang <richard.weiyang@gmail.com> wrote:
> On Tue, Apr 26, 2022 at 02:47:25PM -0700, Andrew Morton wrote:
> >On Tue, 26 Apr 2022 02:17:42 +0000 Wei Yang <richard.weiyang@gmail.com> wrote:
> >
> >> node_page_list would always be !empty on finishing the loop, except
> >> page_list is empty.
> >>
> >> Let's handle empty page_list before doing any real work including
> >> touching PF_MEMALLOC flag.
> >
> >Please see
> >https://lkml.kernel.org/r/20220425111232.23182-3-linmiaohe@huawei.com
>
> Aha, I have thought about this.
>
> The following change is still valid, could I rebase on top of this?
>
Sure, please do.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] mm/vmscan: not use NUMA_NO_NODE as indicator of page on different node
2022-04-26 2:17 [PATCH 1/3] mm/vmscan: not necessary to re-init the list for each iteration Wei Yang
2022-04-26 2:17 ` [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning Wei Yang
@ 2022-04-26 2:17 ` Wei Yang
1 sibling, 0 replies; 6+ messages in thread
From: Wei Yang @ 2022-04-26 2:17 UTC (permalink / raw)
To: akpm; +Cc: linux-mm, Wei Yang
Now we are sure there is at lease one page on page_list, so it is safe
to get the nid of it. This means it is not necessary to use NUMA_NO_NODE
as an indicator for the beginning of iteration or a page on different
node.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
mm/vmscan.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 3a36ebd6295d..f9998cba236f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2519,7 +2519,7 @@ static void shrink_active_list(unsigned long nr_to_scan,
unsigned long reclaim_pages(struct list_head *page_list)
{
- int nid = NUMA_NO_NODE;
+ int nid;
unsigned int nr_reclaimed = 0;
LIST_HEAD(node_page_list);
struct reclaim_stat dummy_stat;
@@ -2538,11 +2538,9 @@ unsigned long reclaim_pages(struct list_head *page_list)
noreclaim_flag = memalloc_noreclaim_save();
+ nid = page_to_nid(lru_to_page(page_list));
do {
page = lru_to_page(page_list);
- if (nid == NUMA_NO_NODE) {
- nid = page_to_nid(page);
- }
if (nid == page_to_nid(page)) {
ClearPageActive(page);
@@ -2559,7 +2557,7 @@ unsigned long reclaim_pages(struct list_head *page_list)
putback_lru_page(page);
}
- nid = NUMA_NO_NODE;
+ nid = page_to_nid(lru_to_page(page_list));
} while (!list_empty(page_list));
nr_reclaimed += shrink_page_list(&node_page_list,
--
2.33.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-04-27 23:29 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-26 2:17 [PATCH 1/3] mm/vmscan: not necessary to re-init the list for each iteration Wei Yang
2022-04-26 2:17 ` [PATCH 2/3] mm/vmscan: filter empty page_list at the beginning Wei Yang
2022-04-26 21:47 ` Andrew Morton
2022-04-27 23:25 ` Wei Yang
2022-04-27 23:29 ` Andrew Morton
2022-04-26 2:17 ` [PATCH 3/3] mm/vmscan: not use NUMA_NO_NODE as indicator of page on different node Wei Yang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).