On (22/11/22 12:42), Johannes Weiner wrote: > On Tue, Nov 22, 2022 at 10:52:58AM +0900, Sergey Senozhatsky wrote: > > On (22/11/18 16:15), Nhat Pham wrote: > > [..] > > > @@ -1249,6 +1267,15 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, > > > obj_to_location(obj, &page, &obj_idx); > > > zspage = get_zspage(page); > > > > > > +#ifdef CONFIG_ZPOOL > > > + /* Move the zspage to front of pool's LRU */ > > > + if (mm == ZS_MM_WO) { > > > + if (!list_empty(&zspage->lru)) > > > + list_del(&zspage->lru); > > > + list_add(&zspage->lru, &pool->lru); > > > + } > > > +#endif > > > > Do we consider pages that were mapped for MM_RO/MM_RW as cold? > > I wonder why, we use them, so technically they are not exactly > > "least recently used". > > This is a swap LRU. Per definition there are no ongoing accesses to > the memory while the page is swapped out that would make it "hot". Hmm. Not arguing, just trying to understand some things. There are no accesses to swapped out pages yes, but zspage holds multiple objects, which are compressed swapped out pages in this particular case. For example, zspage in class size 176 (bytes) can hold 93 objects per-zspage, that is 93 compressed swapped out pages. Consider ZS_FULL zspages which is at the tail of the LRU list. Suppose that we page-faulted 20 times and read 20 objects from that zspage, IOW zspage has been in use 20 times very recently, while writeback still considers it to be "not-used" and will evict it. So if this works for you then I'm fine. But we probably, like you suggested, can document a couple of things here - namely why WRITE access to zspage counts as "zspage is in use" but READ access to the same zspage does not count as "zspage is in use".