From: Hillf Danton <hdanton@sina.com>
To: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, ying.huang@intel.com,
tim.c.chen@linux.intel.com, Shakeel Butt <shakeelb@google.com>,
Hillf Danton <hdanton@sina.com>, Michal Hocko <mhocko@suse.com>,
yuzhao@google.com, wfg@mail.ustc.edu.cn
Subject: Re: [RFC] mm/vmscan.c: avoid possible long latency caused by too_many_isolated()
Date: Fri, 30 Apr 2021 14:43:19 +0800 [thread overview]
Message-ID: <20210430064319.2189-1-hdanton@sina.com> (raw)
In-Reply-To: <9795a050-12a4-55c6-13e1-969cd4bbf795@linux.intel.com>
On Fri, 30 Apr 2021 13:33:57 +0800 Xing Zhengjun wrote:
>
> I use my compaction test case to test it, 1/10 ratio can reproduce 100ms
> sleep.
>
> 60) @ 103942.6 us | shrink_node();
>
> 60) @ 103795.8 us | shrink_node();
Thanks for your test.
In bid to cut the number of 100ms sleepers further down, add another place
for them to nap by flushing lru cache before falling in sleep, instead of
mulling why 50ms or 10ms is more adequate.
Alternatively, and simpler IMHO, take a 5ms nap one time until !tmi.
--- y/mm/vmscan.c
+++ x/mm/vmscan.c
@@ -118,6 +118,9 @@ struct scan_control {
/* The file pages on the current node are dangerously low */
unsigned int file_is_tiny:1;
+ unsigned int file_tmi:1; /* too many isolated */
+ unsigned int anon_tmi:1;
+
/* Allocation order */
s8 order;
@@ -2092,6 +2095,22 @@ static int current_may_throttle(void)
bdi_write_congested(current->backing_dev_info);
}
+static void set_sc_tmi(struct scan_control *sc, bool file, int tmi)
+{
+ if (file)
+ sc->file_tmi = tmi;
+ else
+ sc->anon_tmi = tmi;
+}
+
+static bool is_sc_tmi(struct scan_control *sc, bool file)
+{
+ if (file)
+ return sc->file_tmi != 0;
+ else
+ return sc->anon_tmi != 0;
+}
+
/*
* shrink_inactive_list() is a helper for shrink_node(). It returns the number
* of reclaimed pages
@@ -2109,11 +2128,23 @@ shrink_inactive_list(unsigned long nr_to
enum vm_event_item item;
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
bool stalled = false;
+ bool drained = false;
while (unlikely(too_many_isolated(pgdat, file, sc))) {
if (stalled)
return 0;
+ if (!is_sc_tmi(sc, file)) {
+ set_sc_tmi(sc, file, 1);
+ return 0;
+ }
+
+ if (!drained) {
+ drained = true;
+ lru_add_drain_all();
+ continue;
+ }
+
/* wait a bit for the reclaimer. */
msleep(100);
stalled = true;
@@ -2123,6 +2154,9 @@ shrink_inactive_list(unsigned long nr_to
return SWAP_CLUSTER_MAX;
}
+ if (is_sc_tmi(sc, file))
+ set_sc_tmi(sc, file, 0);
+
lru_add_drain();
spin_lock_irq(&lruvec->lru_lock);
next prev parent reply other threads:[~2021-04-30 6:43 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-16 2:35 zhengjun.xing
2021-04-22 8:36 ` Xing Zhengjun
2021-04-22 10:23 ` Hillf Danton
2021-04-23 6:55 ` Xing Zhengjun
2021-04-30 5:33 ` Xing Zhengjun
2021-04-30 6:43 ` Hillf Danton [this message]
2021-05-10 8:03 ` Xing Zhengjun
2021-05-10 9:46 ` Hillf Danton
2021-04-22 17:13 ` Yu Zhao
2021-04-22 18:51 ` Shakeel Butt
2021-04-22 20:15 ` Yu Zhao
2021-04-22 20:17 ` Tim Chen
2021-04-22 20:30 ` Yu Zhao
2021-04-22 20:38 ` Tim Chen
2021-04-22 20:57 ` Yu Zhao
2021-04-22 21:02 ` Tim Chen
2021-04-23 6:57 ` Xing Zhengjun
2021-04-23 20:23 ` Yu Zhao
2021-04-25 0:48 ` Huang, Ying
2021-04-27 21:53 ` Yu Zhao
2021-04-30 5:57 ` Xing Zhengjun
2021-04-30 6:24 ` Yu Zhao
2021-04-28 11:55 ` Michal Hocko
2021-04-28 15:05 ` Yu Zhao
2021-04-29 10:00 ` Michal Hocko
2021-04-30 8:34 ` Yu Zhao
2021-04-30 9:17 ` Michal Hocko
2021-04-30 17:04 ` Yu Zhao
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=20210430064319.2189-1-hdanton@sina.com \
--to=hdanton@sina.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=shakeelb@google.com \
--cc=tim.c.chen@linux.intel.com \
--cc=wfg@mail.ustc.edu.cn \
--cc=ying.huang@intel.com \
--cc=yuzhao@google.com \
--cc=zhengjun.xing@linux.intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox