From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAE7A3B0AFA for ; Tue, 24 Mar 2026 06:05:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774332320; cv=none; b=k3xJLbrQjUUOwUIfic+U2EZzZhBZEMBYnob+NZKlzrFtnyHftNJ8dfgrWP1BdThkXxcGc2qT8UZBB9ll5LsSZXrjdFSehzi5YOv69RZ71uENu1z7fbp4yD/L4cqMf9wNBFtbW9HcP7Hxy8jq5bIMJvu4lI/vis0ALQXTXGj2HXY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774332320; c=relaxed/simple; bh=VtVrNxByXucjOn4BpP0DtM6sRFZRChy6MVVnOqVRYhA=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=YRIyEapb2jnAn4e2O2OIc8a8MzHat87huSMGy35fQLP8eE43JGhM6xXN0mExRmiZ2OvqpKdUpEcG5sKC0eDG0o8tZPzgY4v5JhU9yFwLc896fGBlVoiD+nb9jfWxW49o/J+ep2mXVrpaeeg2ypgNl6aiqNnVdrjp6ZQEl/6Hm6o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=APpO5gYi; arc=none smtp.client-ip=209.85.216.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="APpO5gYi" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-35b88a4f123so2430597a91.1 for ; Mon, 23 Mar 2026 23:05:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774332317; x=1774937117; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=JEdlrKcdSr700OtysgTmR1jEDaTt2UkGKyE2FtUG4ts=; b=APpO5gYiCmN1dvZgGog/E1YtQ6nPQHHxAPE6zzn1aVOwl7NGoPpqWdv/vSORHKcETo D398tpvr6VLB7+1/CfzWL5anpEO1zn4bzTSEWWbU+q+e8sBguo79a9Ts0ixcVA81xec3 DTacWbjE6HE8Y5XS9IliTQRFep2/avs15AaJRhtGbJVapy0MsJyeVNHqjM999uN58vlW +OdAtzhdfXyHFQemB/hk9hzXhKxqRrtY57DG6yBglvv7TWyTNFH8pbvkWVqv2g8TzIMa aR6yvgzhZ+BNap8A6ScrhNQr5ZnvEK+sVNfDraz33NAkj8z6/u0g4H09cNGwB2bB3MKW Gtjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774332317; x=1774937117; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JEdlrKcdSr700OtysgTmR1jEDaTt2UkGKyE2FtUG4ts=; b=i6avbfGbEm2WEbUnPYUspxSse4SaO346w5f1tZGOSi8M2WArhGwIAm6Q7zQBmaGIUj NNsjiTuiJZMVe7zzrXcChemBZRvqoWyx7YFIZHr9cFHNfUqXu3ONl1WBP1Viqs8NWV8Y JdpECA+aMhJ7JDJ4suEpoF0oBm6jdoD7oqxzoJM7j+ohqRTMNQLNt4flXkE70H8jnFD6 dgueH6R0xn//8eqp4lZCTVQve1plefZVv9PRZdc/7wK2Oj0YCiseSBH7XtIuwM91Xsft 29+j5zY3KIxFAhFt3gzPmrZS9y6sARb8mA6UHQ5qnnIU4/a7ZULaW74iHt9pFCuFiUQ9 ooNw== X-Forwarded-Encrypted: i=1; AJvYcCXgbb8jqt4hAebfA44CHprBZae9/y9DiJZcN9Ufxdb/Hin/r+RJYm0hAVmjpvL7EAJVIGKm5WEIr1Wh/D8=@vger.kernel.org X-Gm-Message-State: AOJu0YxOPmSMeZd/11c/nBWUoSpBVJNWGj5VOCoec9EhGXsLy7KSLi6J JQupnpk0S8aqi1yztXNZ6XNkcgJYhjUTtheVIXZ6NMV2QBt0Yp3K9QYg X-Gm-Gg: ATEYQzwf2VbYKGiTjz0xxEi3/Kyxtyn/51TrcLHA+YYR7xXeaf/yMZRaOidpOCHtRZz iYtptpQPpuxMBjl8bcdDQ2FlMn4L1EPSiGIxgrbjEijTg2UzlR5LXO7sBhJCJS+6NA+RlsiXcuv Nwt1Pv0d0l/MDtefdQeCxUZbgBA2G3TKrw4kDwFCI49pHgNCGHF+YRxSnm/Q4DuOE0BXsIBIVHQ Ut5X4tr+bVWeC9eEjpZ0wmke6x564pgJJdp7Vzo/O0fK4vWfRIHnwA2YIO5RCNyW8f7gfVcmF92 +aeKHT5C18Vd96MWN5X16RvlYjn/0xT40nwBihCf1qvgPOFZ6vC2vxqzwjgnF5aLPeOeYHcwmXo g2QN4Fn4wOH3q1Aq0bmyB7cHgH1FTptKnD86vMSmiFBdjcK/hcg33UoVbHFMPvVh7T6nlC8ls1C 4QwloBlB0bRGAM1l7EjHx4UlY+HHYJA0b0QYCpgtIxNiqlYIrBadbD6eqZEvN6u3h3L/4W X-Received: by 2002:a17:90a:ac17:b0:35b:952c:43ab with SMTP id 98e67ed59e1d1-35c00800a4dmr1211816a91.4.1774332316767; Mon, 23 Mar 2026 23:05:16 -0700 (PDT) Received: from KASONG-MC4 ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35c029a5e66sm430802a91.5.2026.03.23.23.05.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 23:05:16 -0700 (PDT) Date: Tue, 24 Mar 2026 14:05:09 +0800 From: Kairui Song To: Barry Song <21cnbao@gmail.com> Cc: kasong@tencent.com, linux-mm@kvack.org, Andrew Morton , Axel Rasmussen , Yuanchu Xie , Wei Xu , Johannes Weiner , David Hildenbrand , Michal Hocko , Qi Zheng , Shakeel Butt , Lorenzo Stoakes , David Stevens , Chen Ridong , Leno Hou , Yafang Shao , Yu Zhao , Zicheng Wang , Kalesh Singh , Suren Baghdasaryan , Chris Li , Vernon Yang , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/8] mm/mglru: relocate the LRU scan batch limit to callers Message-ID: References: <20260318-mglru-reclaim-v1-0-2c46f9eb0508@tencent.com> <20260318-mglru-reclaim-v1-2-2c46f9eb0508@tencent.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Sun, Mar 22, 2026 at 04:14:31PM +0800, Barry Song wrote: > On Wed, Mar 18, 2026 at 3:11 AM Kairui Song via B4 Relay > wrote: > > > > From: Kairui Song > > > > Same as active / inactive LRU, MGLRU isolates and scans folios in > > batches. The batch split is done hidden deep in the helper, which > > makes the code harder to follow. The helper's arguments are also > > confusing since callers usually request more folios than the batch > > size, so the helper almost never processes the full requested amount. > > > > Move the batch splitting into the top loop to make it cleaner, there > > should be no behavior change. > > > > Signed-off-by: Kairui Song > > --- > > mm/vmscan.c | 19 +++++++++++-------- > > 1 file changed, 11 insertions(+), 8 deletions(-) > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index d7fc7f1fe06d..d48074f9bd87 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -4689,10 +4689,10 @@ static int scan_folios(unsigned long nr_to_scan, struct lruvec *lruvec, > > int scanned = 0; > > int isolated = 0; > > int skipped = 0; > > - int scan_batch = min(nr_to_scan, MAX_LRU_BATCH); > > - int remaining = scan_batch; > > + unsigned long remaining = nr_to_scan; > > struct lru_gen_folio *lrugen = &lruvec->lrugen; > > > > + VM_WARN_ON_ONCE(nr_to_scan > MAX_LRU_BATCH); > > VM_WARN_ON_ONCE(!list_empty(list)); > > > > if (get_nr_gens(lruvec, type) == MIN_NR_GENS) > > @@ -4745,7 +4745,7 @@ static int scan_folios(unsigned long nr_to_scan, struct lruvec *lruvec, > > mod_lruvec_state(lruvec, item, isolated); > > mod_lruvec_state(lruvec, PGREFILL, sorted); > > mod_lruvec_state(lruvec, PGSCAN_ANON + type, isolated); > > - trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, scan_batch, > > + trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan, > > scanned, skipped, isolated, > > type ? LRU_INACTIVE_FILE : LRU_INACTIVE_ANON); > > if (type == LRU_GEN_FILE) > > @@ -4827,7 +4827,8 @@ static int isolate_folios(unsigned long nr_to_scan, struct lruvec *lruvec, > > > > *type_scanned = type; > > > > - scanned = scan_folios(nr_to_scan, lruvec, sc, type, tier, list); > > + scanned = scan_folios(nr_to_scan, lruvec, sc, > > + type, tier, list); > > Do we need to change this? That's a irrelevant blank line change, will drop it, thanks! > > > if (scanned) > > return scanned; > > > > @@ -4999,7 +5000,7 @@ static bool should_abort_scan(struct lruvec *lruvec, struct scan_control *sc) > > > > static bool try_to_shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) > > { > > - long nr_to_scan; > > + long nr_batch, nr_to_scan; > > unsigned long scanned = 0; > > int swappiness = get_swappiness(lruvec, sc); > > > > @@ -5010,7 +5011,8 @@ static bool try_to_shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) > > if (nr_to_scan <= 0) > > break; > > > > - delta = evict_folios(nr_to_scan, lruvec, sc, swappiness); > > + nr_batch = min(nr_to_scan, MAX_LRU_BATCH); > > I wonder if we should modify get_nr_to_scan() to return > a maximum of MAX_LRU_BATCH? We'll change that in a later commit to let each iteration use a smaller batch.