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? -- Yours, Muchun