On Sun, 24 Dec 2023, Chris Li wrote: > On Sat, Dec 23, 2023 at 7:01 PM David Rientjes <rientjes@xxxxxxxxxx> wrote: > > > > On Sat, 23 Dec 2023, Chris Li wrote: > > > > > > How do you quantify the impact of the delayed swap_entry_free()? > > > > > > > > Since the free and memcg uncharge are now delayed, is there not the > > > > possibility that we stay under memory pressure for longer? (Assuming at > > > > least some users are swapping because of memory pressure.) > > > > > > > > I would assume that since the free and uncharge itself is delayed that in > > > > the pathological case we'd actually be swapping *more* until the async > > > > worker can run. > > > > > > Thanks for raising this interesting question. > > > > > > First of all, the swap_entry_free() does not impact "memory.current". > > > It reduces "memory.swap.current". Technically it is the swap pressure > > > not memory pressure that suffers the extra delay. > > > > > > Secondly, we are talking about delaying up to 64 swap entries for a > > > few microseconds. > > > > What guarantees that the async freeing happens within a few microseconds? > > Linux kernel typically doesn't provide RT scheduling guarantees. You > can change microseconds to milliseconds, my following reasoning still > holds. > What guarantees that the async freeing happens even within 10s? Your responses are implying that there is some deadline by which this freeing absolutely must happen (us or ms), but I don't know of any strong guarantees. If there are no absolute guarantees about when the freeing may now occur, I'm asking how the impact of the delayed swap_entry_free() can be quantified. The benefit to the current implementation is that there *are* strong guarantees about when the freeing will occur and cannot grow exponentially before the async worker can do the freeing.