mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
mm: vmscan: fix node reclaim ignoring swappiness parameter
sc_swappiness() had two separate definitions depending on CONFIG_MEMCG.
The !CONFIG_MEMCG variant simply returned vm_swappiness, ignoring the
proactive_swappiness value passed through scan_control. This caused the
swappiness parameter written to /sys/devices/system/node/nodeX/reclaim to
have no effect when CONFIG_MEMCG is disabled.
Fix this by consolidating sc_swappiness() into a single definition that
checks sc->proactive_swappiness first, then falls back to
mem_cgroup_swappiness() which already handles both CONFIG_MEMCG and
!CONFIG_MEMCG.
Before fix (swappiness=max ignored, mostly file pages reclaimed):
# cat /proc/sys/vm/swappiness
60
# cat /proc/vmstat | grep pgsteal
pgsteal_kswapd 0
pgsteal_direct 0
pgsteal_khugepaged 0
pgsteal_proactive 1840
pgsteal_anon 25
pgsteal_file 1815
# echo "64M swappiness=max" > /sys/devices/system/node/node0/reclaim
# cat /proc/vmstat | grep pgsteal
pgsteal_kswapd 0
pgsteal_direct 0
pgsteal_khugepaged 0
pgsteal_proactive 18013
pgsteal_anon 337
pgsteal_file 17676
After fix (swappiness=max honored, anon pages reclaimed as expected):
# cat /proc/vmstat | grep pgsteal
pgsteal_kswapd 0
pgsteal_direct 0
pgsteal_khugepaged 0
pgsteal_proactive 0
pgsteal_anon 0
pgsteal_file 0
# echo "64M swappiness=max" > /sys/devices/system/node/node0/reclaim
# cat /proc/vmstat | grep pgsteal
pgsteal_kswapd 0
pgsteal_direct 0
pgsteal_khugepaged 0
pgsteal_proactive 16283
pgsteal_anon 16283
pgsteal_file 0
Link: https://lore.kernel.org/20260723032434.2016749-3-ridong.chen@linux.dev
Fixes: b980077899 ("mm: introduce per-node proactive reclaim interface")
Signed-off-by: Ridong Chen <chenridong@xiaomi.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Barry Song <baohua@kernel.org>
Acked-by: Qi Zheng <qi.zheng@linux.dev>
Tested-by: Song Hu <husong@kylinos.cn>
Reviewed-by: Song Hu <husong@kylinos.cn>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Baoquan He <baoquan.he@linux.dev>
Cc: Chris Li <chrisl@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Kairui Song <kasong@tencent.com>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Wei Xu <weixugc@google.com>
Cc: Yuanchu Xie <yuanchu@google.com>
Cc: <stable@vger.kernel.org> [6.17+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
1b7c8fe294
commit
8a90519585
19
mm/vmscan.c
19
mm/vmscan.c
|
|
@ -199,6 +199,13 @@ struct scan_control {
|
|||
*/
|
||||
int vm_swappiness = 60;
|
||||
|
||||
static int sc_swappiness(struct scan_control *sc, struct mem_cgroup *memcg)
|
||||
{
|
||||
if (sc->proactive && sc->proactive_swappiness)
|
||||
return *sc->proactive_swappiness;
|
||||
return mem_cgroup_swappiness(memcg);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMCG
|
||||
|
||||
/* Returns true for reclaim through cgroup limits or cgroup interfaces. */
|
||||
|
|
@ -239,13 +246,6 @@ static bool writeback_throttling_sane(struct scan_control *sc)
|
|||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
static int sc_swappiness(struct scan_control *sc, struct mem_cgroup *memcg)
|
||||
{
|
||||
if (sc->proactive && sc->proactive_swappiness)
|
||||
return *sc->proactive_swappiness;
|
||||
return mem_cgroup_swappiness(memcg);
|
||||
}
|
||||
#else
|
||||
static bool cgroup_reclaim(struct scan_control *sc)
|
||||
{
|
||||
|
|
@ -261,11 +261,6 @@ static bool writeback_throttling_sane(struct scan_control *sc)
|
|||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static int sc_swappiness(struct scan_control *sc, struct mem_cgroup *memcg)
|
||||
{
|
||||
return READ_ONCE(vm_swappiness);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline bool is_exec_file_folio(const struct folio *folio,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user