Re: [PATCH 2/2] mm/vmalloc: rework the drain logic

From: huang ying
Date: Mon Nov 16 2020 - 21:37:49 EST


On Tue, Nov 17, 2020 at 6:00 AM Uladzislau Rezki (Sony)
<urezki@xxxxxxxxx> wrote:
>
> A current "lazy drain" model suffers from at least two issues.
>
> First one is related to the unsorted list of vmap areas, thus
> in order to identify the [min:max] range of areas to be drained,
> it requires a full list scan. What is a time consuming if the
> list is too long.
>
> Second one and as a next step is about merging all fragments
> with a free space. What is also a time consuming because it
> has to iterate over entire list which holds outstanding lazy
> areas.
>
> See below the "preemptirqsoff" tracer that illustrates a high
> latency. It is ~24 676us. Our workloads like audio and video
> are effected by such long latency:

This seems like a real problem. But I found there's long latency
avoidance mechanism in the loop in __purge_vmap_area_lazy() as
follows,

if (atomic_long_read(&vmap_lazy_nr) < resched_threshold)
cond_resched_lock(&free_vmap_area_lock);

If it works properly, the latency problem can be solved. Can you
check whether this doesn't work for you?

Best Reagrds,
Huang, Ying

<snip>