On (22/11/18 16:15), Nhat Pham wrote: > +#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 Just an idea. Have you considered having size class LRU instead of pool LRU? Evicting pages from different classes can have different impact on the system, in theory. For instance, ZS_FULL zspage in class size 3264 (bytes) holds 5 compressed objects per-zspage, which are 5 compressed swapped out pages. While zspage in a class size 176 (bytes) holds 93 compressed objects (swapped pages). Both zspages consist of 4 non-contiguous 0-order physical pages, so when we free zspage from these classes we release 4 physical pages. However, in terms of major page faults evicting a page from size class 3264 looks better than from a size class 176: 5 major page faults vs 93 major page faults. Does this make sense?