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