• Sergey Senozhatsky's avatar
    zram: drop max_zpage_size and use zs_huge_class_size() · 60f5921a
    Sergey Senozhatsky authored
    Remove ZRAM's enforced "huge object" value and use zsmalloc huge-class
    watermark instead, which makes more sense.
    
    TEST
    - I used a 1G zram device, LZO compression back-end, original
      data set size was 444MB. Looking at zsmalloc classes stats the
      test ended up to be pretty fair.
    
    BASE ZRAM/ZSMALLOC
    =====================
    zram mm_stat
    
    498978816 191482495 199831552        0 199831552    15634        0
    
    zsmalloc classes
    
     class  size almost_full almost_empty obj_allocated   obj_used pages_used pages_per_zspage freeable
    ...
       151  2448           0            0          1240       1240        744                3        0
       168  2720           0            0          4200       4200       2800                2        0
       190  3072           0            0         10100      10100       7575                3        0
       202  3264           0            0           380        380        304                4        0
       254  4096           0            0         10620      10620      10620                1        0
    
     Total                 7           46        106982     106187      48787                         0
    
    PATCHED ZRAM/ZSMALLOC
    =====================
    
    zram mm_stat
    
    498978816 182579184 194248704        0 194248704    15628        0
    
    zsmalloc classes
    
     class  size almost_full almost_empty obj_allocated   obj_used pages_used pages_per_zspage freeable
    ...
       151  2448           0            0          1240       1240        744                3        0
       168  2720           0            0          4200       4200       2800                2        0
       190  3072           0            0         10100      10100       7575                3        0
       202  3264           0            0          7180       7180       5744                4        0
       254  4096           0            0          3820       3820       3820                1        0
    
     Total                 8           45        106959     106193      47424                         0
    
    As we can see, we reduced the number of objects stored in class-4096,
    because a huge number of objects which we previously forcibly stored in
    class-4096 now stored in non-huge class-3264.  This results in lower
    memory consumption:
    
    - zsmalloc now uses 47424 physical pages, which is less than 48787 pages
      zsmalloc used before.
    
    - objects that we store in class-3264 share zspages.  That's why overall
      the number of pages that both class-4096 and class-3264 consumed went
      down from 10924 to 9564.
    
    [sergey.senozhatsky.work@gmail.com: add pool param to zs_huge_class_size()]
      Link: http://lkml.kernel.org/r/20180314081833.1096-3-sergey.senozhatsky@gmail.com
    Link: http://lkml.kernel.org/r/20180306070639.7389-3-sergey.senozhatsky@gmail.comSigned-off-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Acked-by: default avatarMinchan Kim <minchan@kernel.org>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    60f5921a
zram_drv.c 40.8 KB