[PATCH] mm: Add Kcompressd for accelerated memory compression
Barry Song
21cnbao at gmail.com
Sun Jun 15 20:41:06 PDT 2025
Hi Nhat, Johannes,
>> The way you implemented this adds time-and-space overhead even on
>> systems that don't have any sort of swap compression enabled.
I agree — we can eliminate the time and space overhead by refining the
code to hook kcompressed only when zswap or zram is enabled.
>>
>> That seems unnecessary. There is an existing method for asynchronous
>> writeback, and pageout() is naturally fully set up to handle this.
>>
>> IMO the better way to do this is to make zswap_store() (and
>> zram_bio_write()?) asynchronous. Make those functions queue the work
>> and wake the compression daemon, and then have the daemon call
>> folio_end_writeback() / bio_endio() when it's done with it.
> +1.
But,
How could this be possible for zswap? zswap_store() is only a frontend —
we still need its return value to determine whether __swap_writepage()
is required. Waiting for the result of zswap_store() is inherently a
synchronous step.
My point is that folio_end_writeback() and bio_endio() can only be
called after the entire zswap_store() → __swap_writepage() sequence is
completed. That’s why both are placed in the new kcompressed.
The use of folio_end_writeback() and bio_endio() was the case for zRAM
in Qun-Wei's RFC.
https://lore.kernel.org/linux-mm/20250307120141.1566673-3-qun-wei.lin@mediatek.com/
However, the implementation tightly coupled zRAM with reclamation logic.
For example, zRAM needed to know whether it was running in the kswapd
context, which is not ideal for a generic block device — the role zRAM
is supposed to play. Additionally, the code was not shared between zswap
and zRAM.
Thanks
Barry
More information about the linux-arm-kernel
mailing list