On Tue, Sep 22, 2020 at 11:31 AM Michal Hocko <mhocko@xxxxxxxx> wrote: > > On Tue 22-09-20 11:10:17, Shakeel Butt wrote: > > On Tue, Sep 22, 2020 at 9:55 AM Michal Hocko <mhocko@xxxxxxxx> wrote: > [...] > > > So far I have learned that you are primarily working around an > > > implementation detail in the zswap which is doing the swapout path > > > directly in the pageout path. > > > > Wait how did you reach this conclusion? I have explicitly said that we > > are not using uswapd like functionality in production. We are using > > this interface for proactive reclaim and proactive reclaim is not a > > workaround for implementation detail in the zswap. > > Hmm, I must have missed the distinction between the two you have > mentioned. Correct me if I am wrong but "latency sensitive" workload is > the one that cannot use the high limit, right. Yes. > For some reason I thought > that your pro-active reclaim usecase is also not compatible with the > throttling imposed by the high limit. Hence my conclusion above. > For proactive reclaim use-case, it is more about the weirdness of using memory.high interface for proactive reclaim. Let's suppose I want to reclaim 20 MiB from a job. To use memory.high, I have to read memory.current and subtract 20MiB from it and then write that to memory.high and once that is done, I have to set memory.high to the previous value (job's original high limit). There is a time window where the allocation of the target job can hit the temporary memory.high which will cause uninteresting MEMCG_HIGH event, PSI pressure and can potentially over reclaim. Also there is a race between reading memory.current and setting the temporary memory.high. There are many non-deterministic variables added to the request of reclaiming 20MiB from a job. Shakeel