On Tue, Sep 07, 2021 at 07:14:45AM -1000, Tejun Heo wrote: > Hello, > > On Tue, Sep 07, 2021 at 10:11:21AM -0700, Roman Gushchin wrote: > > There are two polar cases: > > 1) a big number of relatively short-living allocations, which lifetime is well > > bounded (e.g. by a lifetime of a task), > > 2) a relatively small number of long-living allocations, which lifetime > > is potentially indefinite (e.g. struct mount). > > > > We can't use the same approach for both cases, otherwise we'll run into either > > performance or garbage collection problems (which also lead to performance > > problems, but delayed). > > Wouldn't a front cache which expires after some seconds catch both cases? I'm not sure. For the second case we need to pack allocations from different tasks/cgroups into a small number of shared pages. It means the front cache should be really small/non-existing. For the first case we likely need a substantial cache. Maybe we can do something really smart with scattering the cache over multiple pages, but I really doubt.