On Fri, Jun 02, 2023 at 09:59:20AM -0700, Yosry Ahmed wrote: > On Fri, Jun 2, 2023 at 9:49 AM Johannes Weiner <hannes@xxxxxxxxxxx> wrote: > > Again, what about the zswap_tree.lock and swap_info_struct.lock? > > They're the same scope unless you use multiple swap files. Would it > > make sense to tie pools to trees, so that using multiple swapfiles for > > concurrency purposes also implies this optimization? > > Yeah, using multiple swapfiles helps with those locks, but it doesn't > help with the zpool lock. > > I am reluctant to take this path because I am trying to get rid of > zswap's dependency on swapfiles to begin with, and have it act as its > own standalone swapping backend. If I am successful, then having one > zpool per zswap_tree is just a temporary fix. What about making the pools per-cpu? This would scale nicely with the machine size. And we commonly deal with for_each_cpu() loops and per-cpu data structures, so have good developer intuition about what's reasonable to squeeze into those. It would eliminate the lock contention, for everybody, right away, and without asking questions. It would open the door to all kinds of locking optimizations on top.