Re: [External] Re: [PATCH] mm/vmscan: fix infinite loop in drop_slab_node

From: Muchun Song
Date: Wed Sep 09 2020 - 00:22:45 EST

Hi Chris,

On Tue, Sep 8, 2020 at 11:09 PM Chris Down <chris@xxxxxxxxxxxxxx> wrote:
> drop_caches by its very nature can be extremely performance intensive -- if
> someone wants to abort after trying too long, they can just send a
> TASK_KILLABLE signal, no? If exiting the loop and returning to usermode doesn't
> reliably work when doing that, then _that's_ something to improve, but this
> looks premature to me until that's demonstrated not to work.

Sending a TASK_KILLABLE signal? It didn't work now. Because the the
current task has no chance to handle the signal. So I think we may
need to do any of the following things to avoid this case happening.

1. Double the threshold currently hard coded as "10" with each iteration
suggested by Vlastimil. It is also a good idea.

2. In the while loop, we can check whether the TASK_KILLABLE
signal is set, if so, we should break the loop. like the following code
snippe. Thanks.

@@ -704,6 +704,9 @@ void drop_slab_node(int nid)
do {
struct mem_cgroup *memcg = NULL;

+ if (fatal_signal_pending(current))
+ return;
freed = 0;
memcg = mem_cgroup_iter(NULL, NULL, NULL);
do {

> zangchunxin@xxxxxxxxxxxxx writes:
> >In one drop caches action, only traverse memcg once maybe is better.
> >If user need more memory, they can do drop caches again.
> Can you please provide some measurements of the difference in reclamation in
> practice?