• Minchan Kim's avatar
    zsmalloc: move pages_allocated to zs_pool · 13de8933
    Minchan Kim authored
    Currently, zram has no feature to limit memory so theoretically zram can
    deplete system memory.  Users have asked for a limit several times as even
    without exhaustion zram makes it hard to control memory usage of the
    platform.  This patchset adds the feature.
    
    Patch 1 makes zs_get_total_size_bytes faster because it would be used
    frequently in later patches for the new feature.
    
    Patch 2 changes zs_get_total_size_bytes's return unit from bytes to page
    so that zsmalloc doesn't need unnecessary operation(ie, << PAGE_SHIFT).
    
    Patch 3 adds new feature.  I added the feature into zram layer, not
    zsmalloc because limiation is zram's requirement, not zsmalloc so any
    other user using zsmalloc(ie, zpool) shouldn't affected by unnecessary
    branch of zsmalloc.  In future, if every users of zsmalloc want the
    feature, then, we could move the feature from client side to zsmalloc
    easily but vice versa would be painful.
    
    Patch 4 adds news facility to report maximum memory usage of zram so that
    this avoids user polling frequently via /sys/block/zram0/ mem_used_total
    and ensures transient max are not missed.
    
    This patch (of 4):
    
    pages_allocated has counted in size_class structure and when user of
    zsmalloc want to see total_size_bytes, it should gather all of count from
    each size_class to report the sum.
    
    It's not bad if user don't see the value often but if user start to see
    the value frequently, it would be not a good deal for performance pov.
    
    This patch moves the count from size_class to zs_pool so it could reduce
    memory footprint (from [255 * 8byte] to [sizeof(atomic_long_t)]).
    Signed-off-by: default avatarMinchan Kim <minchan@kernel.org>
    Reviewed-by: default avatarDan Streetman <ddstreet@ieee.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Jerome Marchand <jmarchan@redhat.com>
    Cc: <juno.choi@lge.com>
    Cc: <seungho1.park@lge.com>
    Cc: Luigi Semenzato <semenzato@google.com>
    Cc: Nitin Gupta <ngupta@vflare.org>
    Cc: Seth Jennings <sjennings@variantweb.net>
    Reviewed-by: default avatarDavid Horner <ds2horner@gmail.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    13de8933
zsmalloc.c 30.2 KB