linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Andrew Morton <akpm@linux-foundation.org>,
	Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Sergey Senozhatsky <senozhatsky@chromium.org>
Subject: [PATCH 6/6] zsmalloc: make sure we select best zspage size
Date: Tue, 25 Oct 2022 01:12:13 +0900	[thread overview]
Message-ID: <20221024161213.3221725-7-senozhatsky@chromium.org> (raw)
In-Reply-To: <20221024161213.3221725-1-senozhatsky@chromium.org>

We currently decide the best zspage size by looking at
used percentage value. This is not exactly enough as
zspage usage percentage calculation is not accurate.

For example, let's look at size class 208

pages per zspage       wasted bytes         used%
       1                   144               96
       2                    80               99
       3                    16               99
       4                   160               99

We will select 2 page per zspage configuration, as it
is the first one to reach 99%. However, 3 pages per
zspage wastes less memory. Hence we need to also consider
wasted space metrics when device zspage size.

Additionally, rename max_usedpc_order because it does
not hold zspage order, it holds maximum pages per-zspage
value.

Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
---
 mm/zsmalloc.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index 40a09b1f63b5..5de56f4cd16a 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -775,8 +775,9 @@ static enum fullness_group fix_fullness_group(struct size_class *class,
 static int get_pages_per_zspage(struct zs_pool *pool, int class_size)
 {
 	int i, max_usedpc = 0;
-	/* zspage order which gives maximum used size per KB */
-	int max_usedpc_order = 1;
+	/* zspage size which gives maximum used size per KB */
+	int pages_per_zspage = 1;
+	int min_waste = INT_MAX;
 
 	for (i = 1; i <= pool->max_pages_per_zspage; i++) {
 		int zspage_size;
@@ -788,14 +789,19 @@ static int get_pages_per_zspage(struct zs_pool *pool, int class_size)
 
 		if (usedpc > max_usedpc) {
 			max_usedpc = usedpc;
-			max_usedpc_order = i;
+			pages_per_zspage = i;
 		}
 
 		if (usedpc == 100)
 			break;
+
+		if (waste < min_waste) {
+			min_waste = waste;
+			pages_per_zspage = i;
+		}
 	}
 
-	return max_usedpc_order;
+	return pages_per_zspage;
 }
 
 static struct zspage *get_zspage(struct page *page)
-- 
2.38.0.135.g90850a2211-goog



  parent reply	other threads:[~2022-10-24 16:12 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-24 16:12 [PATCH 0/6] zsmalloc/zram: configurable " Sergey Senozhatsky
2022-10-24 16:12 ` [PATCH 1/6] zsmalloc: turn zspage order into runtime variable Sergey Senozhatsky
2022-10-24 16:12 ` [PATCH 2/6] zsmalloc/zram: pass zspage order to zs_create_pool() Sergey Senozhatsky
2022-10-24 16:12 ` [PATCH 3/6] zram: add pool_page_order device attribute Sergey Senozhatsky
2022-10-24 16:12 ` [PATCH 4/6] Documentation: document zram pool_page_order attribute Sergey Senozhatsky
2022-10-24 16:12 ` [PATCH 5/6] zsmalloc: break out of loop when found perfect zspage order Sergey Senozhatsky
2022-10-24 16:12 ` Sergey Senozhatsky [this message]
2022-10-25  3:26 ` [PATCH 0/6] zsmalloc/zram: configurable zspage size Bagas Sanjaya
2022-10-25  3:42   ` Sergey Senozhatsky
2022-10-25  8:40     ` Bagas Sanjaya
2022-10-25  4:30 ` Sergey Senozhatsky
2022-10-25  7:57   ` Sergey Senozhatsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221024161213.3221725-7-senozhatsky@chromium.org \
    --to=senozhatsky@chromium.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=ngupta@vflare.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox