All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Byungchul Park <byungchul@sk.com>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, kernel_team@skhynix.com
Subject: Re: [PATCH] mm/vmscan: simplify the calculation of fractions for SCAN_FRACT
Date: Wed, 28 Feb 2024 16:44:20 -0500	[thread overview]
Message-ID: <20240228214420.GA50163@cmpxchg.org> (raw)
In-Reply-To: <20240228015500.52452-1-byungchul@sk.com>

On Wed, Feb 28, 2024 at 10:55:00AM +0900, Byungchul Park wrote:
> The current way to calculate fractions for SACN_FRACT is little readable
> and more complicated than it should be.  It also performs unnecessary
> division and adjustment to avoid zero operands.  Prune away by
> multiplying the fractions by 'anon_cost * file_cost / (3 * total_cost)':
> 
> where:
>    total_cost = sc->anon_cost + sc->file_cost
>    anon_cost = total_cost + sc->anon_cost
>    file_cost = total_cost + sc->file_cost
> 
> before:
>    fraction[0] = swappiness * 3 * total_cost / anon_cost
>    fraction[1] = (200 - swappiness) * 3 * total_cost / file_cost
> 
> after:
>    fraction[0] = swappiness * file_cost
>    fraction[1] = (200 - swappiness) * anon_cost
> 
> Worth noting that this patch doesn't change the formula.
> 
> Signed-off-by: Byungchul Park <byungchul@sk.com>
> ---
>  mm/vmscan.c | 14 +++-----------
>  1 file changed, 3 insertions(+), 11 deletions(-)
> 
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 4657440854db..7b33fcc1cbdc 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -2339,7 +2339,6 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
>  	u64 fraction[ANON_AND_FILE];
>  	u64 denominator = 0;	/* gcc */
>  	enum scan_balance scan_balance;
> -	unsigned long ap, fp;
>  	enum lru_list lru;
>  
>  	/*
> @@ -2416,17 +2415,10 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
>  	total_cost = sc->anon_cost + sc->file_cost;
>  	anon_cost = total_cost + sc->anon_cost;
>  	file_cost = total_cost + sc->file_cost;
> -	total_cost = anon_cost + file_cost;
>  
> -	ap = swappiness * (total_cost + 1);
> -	ap /= anon_cost + 1;
> -
> -	fp = (200 - swappiness) * (total_cost + 1);
> -	fp /= file_cost + 1;
> -
> -	fraction[0] = ap;
> -	fraction[1] = fp;
> -	denominator = ap + fp;
> +	fraction[0] = swappiness * file_cost;
> +	fraction[1] = (200 - swappiness) * anon_cost;

Unfortunately, I don't think that

anon = swappiness * file_cost
file = (200 - swappiness) * anon_cost

is more readable. Sure it's the same, but I think it's clearer to
actually see that `anon = total_cost / anon_cost` ratio in the code.


      reply	other threads:[~2024-02-28 21:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-28  1:55 [PATCH] mm/vmscan: simplify the calculation of fractions for SCAN_FRACT Byungchul Park
2024-02-28 21:44 ` Johannes Weiner [this message]

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=20240228214420.GA50163@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=akpm@linux-foundation.org \
    --cc=byungchul@sk.com \
    --cc=kernel_team@skhynix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.