Huan Yang <link@xxxxxxxx> writes: > 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. >From mem_cgroup_swappiness(), cgroupv2 doesn't have per-cgroup swappiness. So you need to add that firstly? > 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. If cgroup swappiness will be adjusted temporarily, why not just change it via a script before/after proactive reclaiming? > 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 We will not add new features to cgroupv1 in upstream. > .../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(-) -- Best Regards, Huang, Ying