[PATCH 1/1] zram: better utilization of zram swap space

From: Gopi Sai Teja
Date: Thu Dec 07 2017 - 03:26:56 EST


If the length of the compressed page is greater than 75% of the PAGE_SIZE,
then the page is stored uncompressed in zram space. Zram space utilization
is improved if the threshold is 80%(5 compressed pages can be stored in
4 pages).

If the compressed length is greater than 3068 and less than 3261, pages
still can be stored in compressed form in zs_malloc class 3264.
Currently these compressed pages belong to 4096 zs malloc class.

Tested on ARM:
Before Patch:

class size obj_allocated obj_used pages_used
190 3072 3820 3819 2865
202 3264 65 63 52
254 4096 11791 11791 11791

Total 65604 64616 29504

After Patch:

class size obj_allocated obj_used pages_used
190 3072 4244 4243 3183
202 3264 1500 1499 1200
254 4096 6306 6306 6306

Total 65983 64896 26628

Signed-off-by: Gopi Sai Teja <gopi.st@xxxxxxxxxxx>
---
drivers/block/zram/zram_drv.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
index 5ece255..f7d9ddd 100644
--- a/drivers/block/zram/zram_drv.h
+++ b/drivers/block/zram/zram_drv.h
@@ -31,8 +31,12 @@ static const unsigned max_num_devices = 32;
/*
* Pages that compress to size greater than this are stored
* uncompressed in memory.
+ * 16 is zsmalloc class interval and unsigned long is extra memory
+ * used by zsmalloc to store metadata.
*/
-static const size_t max_zpage_size = PAGE_SIZE / 4 * 3;
+
+static const size_t max_zpage_size = round_down((PAGE_SIZE / 5 * 4), 16)
+ - sizeof(unsigned long);

/*
* NOTE: max_zpage_size must be less than or equal to:
--
1.9.1