linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC 0/4] Introduce unbalance proactive reclaim
@ 2023-11-08  6:58 Huan Yang
  2023-11-08  6:58 ` [PATCH 1/4] mm: vmscan: LRU unbalance cgroup reclaim Huan Yang
                   ` (7 more replies)
  0 siblings, 8 replies; 58+ messages in thread
From: Huan Yang @ 2023-11-08  6:58 UTC (permalink / raw)
  To: Tejun Heo, Zefan Li, Johannes Weiner, Jonathan Corbet,
	Michal Hocko, Roman Gushchin, Shakeel Butt, Muchun Song,
	Andrew Morton, David Hildenbrand, Matthew Wilcox, Huang Ying,
	Kefeng Wang, Peter Xu, Vishal Moola (Oracle),
	Yosry Ahmed, Liu Shixin, Hugh Dickins, cgroups, linux-doc,
	linux-kernel, linux-mm
  Cc: opensource.kernel, Huan Yang

In some cases, we need to selectively reclaim file pages or anonymous
pages in an unbalanced manner.

For example, when an application is pushed to the background and frozen,
it may not be opened for a long time, and we can safely reclaim the
application's anonymous pages, but we do not want to touch the file pages.

This patchset extends the proactive reclaim interface to achieve
unbalanced reclamation. Users can control the reclamation tendency by
inputting swappiness under the original interface. Specifically, users
can input special values to extremely reclaim specific pages.

Example:
  	echo "1G" 200 > memory.reclaim (only reclaim anon)
	  echo "1G" 0  > memory.reclaim (only reclaim file)
	  echo "1G" 1  > memory.reclaim (only reclaim file)

Note that when performing unbalanced reclamation, the cgroup swappiness
will be temporarily adjusted dynamically to the input value. Therefore,
if the cgroup swappiness is further modified during runtime, there may
be some errors.

However, this is acceptable because the interface is dynamically called
by the user and the timing should be controlled by the user.

This patchset did not implement the type-based reclamation as expected
in the documentation.(anon or file) Because in addition to extreme unbalanced
reclamation, this patchset can also adapt to the reclamation tendency
allocated according to swappiness, which is more flexible.

Self test
========
After applying the following patches and myself debug patch, my self-test
results are as follows:

1. LRU test
===========
  a. Anon unbalance reclaim
  ```
  cat memory.stat | grep anon
    inactive_anon 7634944
    active_anon 7741440

  echo "200M" 200 > memory.reclaim

  cat memory.stat | grep anon
    inactive_anon 0
    active_anon 0

  cat memory.reclaim_stat_summary(self debug interface)
    [22368]sh total reclaimed 0 file, 3754 anon, covered item=0
  ```

  b. File unbalance reclaim
  ```
  cat memory.stat | grep file
    inactive_file 82862080
    active_file 48664576

  echo "100M" 0 > memory.reclaim
  cat memory.stat | grep file
    inactive_file 34164736
    active_file 18370560

  cat memory.reclaim_stat_summary(self debug interface)
    [22368]sh total reclaimed 13732 file, 0 anon, covered item=0
  ```

2. MGLRU test
============
a. Anon unbalance reclaim
```
echo y > /sys/kernel/mm/lru_gen/enabled
cat /sys/kernel/mm/lru_gen/enabled
  0x0003

cat memory.stat | grep anon
  inactive_anon 17653760
  active_anon 1740800

echo "100M" 200 > memory.reclaim

cat memory.reclaim_stat_summary
  [8251]sh total reclaimed 0 file, 5393 anon, covered item=0
```

b. File unbalance reclaim
```
cat memory.stat | grep file
  inactive_file 17858560
  active_file 5943296

echo "100M" 0 > memory.reclaim

cat memory.stat | grep file
  inactive_file 491520
  active_file 2764800
cat memory.reclaim_stat_summary
  [8251]sh total reclaimed 5230 file, 0 anon, covered item=0
```

Patch 1-3 implement the functionality described above.
Patch 4 aims to implement proactive reclamation to the cgroupv1 interface
for use on Android.

Huan Yang (4):
  mm: vmscan: LRU unbalance cgroup reclaim
  mm: multi-gen LRU: MGLRU unbalance reclaim
  mm: memcg: implement unbalance proactive reclaim
  mm: memcg: apply proactive reclaim into cgroupv1

 .../admin-guide/cgroup-v1/memory.rst          |  38 +++++-
 Documentation/admin-guide/cgroup-v2.rst       |  16 ++-
 include/linux/swap.h                          |   1 +
 mm/memcontrol.c                               | 126 ++++++++++++------
 mm/vmscan.c                                   |  38 +++++-
 5 files changed, 169 insertions(+), 50 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 58+ messages in thread

end of thread, other threads:[~2023-12-04  6:53 UTC | newest]

Thread overview: 58+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-08  6:58 [RFC 0/4] Introduce unbalance proactive reclaim Huan Yang
2023-11-08  6:58 ` [PATCH 1/4] mm: vmscan: LRU unbalance cgroup reclaim Huan Yang
2023-11-08  6:58 ` [PATCH 2/4] mm: multi-gen LRU: MGLRU unbalance reclaim Huan Yang
2023-11-08 12:34   ` kernel test robot
2023-11-09 11:08   ` kernel test robot
2023-12-04  6:53   ` Dan Carpenter
2023-11-08  6:58 ` [PATCH 3/4] mm: memcg: implement unbalance proactive reclaim Huan Yang
2023-11-08  6:58 ` [PATCH 4/4] mm: memcg: apply proactive reclaim into cgroupv1 Huan Yang
2023-11-08 21:06   ` kernel test robot
2023-11-08  7:35 ` [RFC 0/4] Introduce unbalance proactive reclaim Huang, Ying
2023-11-08  7:53   ` Huan Yang
2023-11-08  8:09     ` Huang, Ying
2023-11-08  8:14       ` Yosry Ahmed
2023-11-08  8:21         ` Huan Yang
2023-11-08  9:00           ` Yosry Ahmed
2023-11-08  9:05             ` Huan Yang
2023-11-08  8:00 ` Yosry Ahmed
2023-11-08  8:26   ` Huan Yang
2023-11-08  8:59     ` Yosry Ahmed
2023-11-08  9:12       ` Huan Yang
2023-11-08 14:06 ` Michal Hocko
2023-11-09  1:56   ` Huan Yang
2023-11-09  3:15     ` Huang, Ying
2023-11-09  3:38       ` Huan Yang
2023-11-09  9:57         ` Michal Hocko
2023-11-09 10:29           ` Huan Yang
2023-11-09 10:39             ` Michal Hocko
2023-11-09 10:50               ` Huan Yang
2023-11-09 12:40                 ` Michal Hocko
2023-11-09 13:07                   ` Huan Yang
2023-11-09 13:46                     ` Michal Hocko
2023-11-10  3:48                       ` Huan Yang
2023-11-10 12:24                         ` Michal Hocko
2023-11-13  2:17                           ` Huan Yang
2023-11-13  6:10                             ` Huang, Ying
2023-11-13  6:28                               ` Huan Yang
2023-11-13  8:05                                 ` Huang, Ying
2023-11-13  8:26                                   ` Huan Yang
2023-11-14  9:54                                     ` Michal Hocko
2023-11-14  9:56                                       ` Michal Hocko
2023-11-15  6:52                                     ` Huang, Ying
2023-11-14  9:50                             ` Michal Hocko
2023-11-10  1:19                 ` Huang, Ying
2023-11-10  2:44                   ` Huan Yang
2023-11-10  4:00                     ` Huang, Ying
2023-11-10  6:21                       ` Huan Yang
2023-11-10 12:32                         ` Michal Hocko
2023-11-13  1:54                           ` Huan Yang
2023-11-14 10:04                             ` Michal Hocko
2023-11-14 12:37                               ` Huan Yang
2023-11-14 13:03                                 ` Michal Hocko
2023-11-15  2:11                                   ` Huan Yang
2023-11-09  9:53     ` Michal Hocko
2023-11-09 10:55       ` Huan Yang
2023-11-09 12:45         ` Michal Hocko
2023-11-09 13:10           ` Huan Yang
2023-11-08 16:14 ` Andrew Morton
2023-11-09  1:58   ` Huan Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox