Re: [PATCH v7 00/21] mm/zsmalloc: add zpdesc memory descriptor for zswap.zpool

From: Alex Shi
Date: Tue Sep 03 2024 - 04:01:41 EST




On 9/3/24 11:45 AM, Sergey Senozhatsky wrote:
> On (24/09/03 12:35), Sergey Senozhatsky wrote:
>> On (24/09/02 15:21), alexs@xxxxxxxxxx wrote:
>>> The descriptor still overlays the struct page; nothing has changed
>>> in that regard.
>>> [..]
>>> This patachset does not increase the descriptor size nor introduce any
>>> functional changes, and could save about 122Kbytes zsmalloc.o size.
>>
>> Is this number accurate? Where does such a large saving come from?

Hi Sergey,

Thanks for asking, I collected some data on Aug 2, before the patchset,
zsmalloc.o is 1200960 bytes, after patched, it's 1076144 bytes. At that
time it's saved about 124KB, about 10%, with some debug option enabled.

Just test again with x86defconfig + ZSMALLOC + ZSMALLOC_STAT,
on mm-unstable tree, zsmalloc.o reduces to 34960 bytes from 37328 bytes,
that's 6.3% saved.

The bloat-o-meter show in machine:
$ ./scripts/bloat-o-meter x86def/mm/zsmalloc.o x86def/mm/zsmalloc-patched.o
add/remove: 1/1 grow/shrink: 1/5 up/down: 100/-1068 (-968)
Function old new delta
create_zpdesc_chain - 92 +92
zs_compact 2352 2360 +8
zs_malloc 1334 1277 -57
__free_zspage 291 223 -68
free_zspage 289 211 -78
create_page_chain 95 - -95
zs_page_migrate 950 807 -143
async_free_zspage 1252 625 -627
Total: Before=11868, After=10900, chg -8.16%

>
> ./scripts/bloat-o-meter mm/zsmalloc.o-base mm/zsmalloc.o-patched
> add/remove: 0/0 grow/shrink: 2/6 up/down: 7/-843 (-836)
> Function old new delta
> obj_free 211 215 +4
> zs_unmap_object 568 571 +3
> zs_map_object 661 633 -28
> SetZsPageMovable 135 86 -49
> free_zspage 310 253 -57
> __free_zspage 284 226 -58
> zs_page_migrate 1304 1136 -168
> async_free_zspage 1099 616 -483

Many thanks for detailed data here!

Thanks
Alex