On Thu, Nov 2, 2023 at 1:54 PM Yosry Ahmed <yosryahmed@xxxxxxxxxx> wrote: > > On Thu, Nov 2, 2023 at 1:50 PM Johannes Weiner <hannes@xxxxxxxxxxx> wrote: > > > > On Thu, Nov 02, 2023 at 01:27:24PM -0700, Yosry Ahmed wrote: > > > On Thu, Nov 2, 2023 at 1:02 PM Nhat Pham <nphamcs@xxxxxxxxx> wrote: > > > > @@ -201,6 +201,12 @@ int swap_writepage(struct page *page, struct writeback_control *wbc) > > > > folio_end_writeback(folio); > > > > return 0; > > > > } > > > > + > > > > + if (!mem_cgroup_zswap_writeback_enabled(folio_memcg(folio))) { > > > > + folio_mark_dirty(folio); > > > > + return AOP_WRITEPAGE_ACTIVATE; > > > > + } > > > > + > > > > > > I am not a fan of this, because it will disable using disk swap if > > > "zswap_writeback" is disabled, even if zswap is disabled or the page > > > was never in zswap. The term zswap_writeback makes no sense here tbh. > > > > > > I am still hoping someone else will suggest better semantics, because > > > honestly I can't think of anything. Perhaps something like > > > memory.swap.zswap_only or memory.swap.types which accepts a string > > > (e.g. "zswap"/"all",..). > > > > I had suggested the writeback name. > > > > My thinking was this: from a user pov, the way zswap is presented and > > described, is a fast writeback cache that sits on top of swap. It's > > implemented as this lookaside thing right now, but that's never how it > > was sold. And frankly, that's not how it's expected to work, either. > > > > From the docs: > > > > Zswap is a lightweight compressed cache for swap pages. > > > > Zswap evicts pages from compressed cache on an LRU basis to the > > backing swap device when the compressed pool reaches its size limit. > > > > When zswap is enabled, IO to the swap device is expected to come from > > zswap. Everything else would be a cache failure. There are a few cases > > now where zswap rejects and bypasses to swap. It's not a stretch to > > call them accelerated writeback or writethrough. But also, these > > represent failures and LRU inversions, we're working on fixing them. > > > > So from a user POV it's reasonable to say if I have zswap enabled and > > disable writeback, I don't expect swapfile IO. > > Makes sense (although now you had me thinking whether > memory.zswap.writethrough is a better name). Hmmm I lean towards writeback because it's already used in zswap context. Users not familiar with the writethrough concept might be confused by the naming. > > > > > But yes, if zswap isn't enabled at all, this shouldn't prevent pages > > from going to swap. > > Right, at least mem_cgroup_zswap_writeback_enabled() should always > return true if zswap is disabled. Sure enough! In the next version, I'll always return true in this case. > > One more unrelated thing, I think we should drop the > cgroup_subsys_on_dfl() check there. I understand the interface is only > exposed in v2, but I don't see any reason why it wouldn't work in v1. > Let's not make it harder for anyone who tries to expose this in v1 > (whether upstream or in an internal patch). I don't have anything against cgroup v1 per se :) I just happened to notice that zswap charging is not available in v1, so I just played it safe here. If nobody objects I can unguard this feature from v1. Seems reasonable to me tbh.