From 69499bc1e0ec29889baebec7f56d6a1fd0ead737 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Sun, 29 May 2022 11:15:30 +0800 Subject: [PATCH] description/memory: update patchwork series to 20220520 --- study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md | 15 +++++++++++++-- study/kernel/00-DESCRIPTION/SCHEDULER.md | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md index 38d3f46..9b95dc7 100644 --- a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md +++ b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md @@ -3885,6 +3885,7 @@ Google 的 Yosry Ahmed 设计的 [memcg: introduce per-memcg proactive reclaim]( |:----:|:----:|:---:|:----:|:---------:|:----:| | 2022/04/07 | Yosry Ahmed | [memcg: introduce per-memcg proactive reclaim](https://patchwork.kernel.org/project/linux-mm/cover/20220407224244.1374102-1-yosryahmed@google.com/) | MEMCG 中引入 memory.reclaim 使得用户空间可以通过持续探测 MEMCG 并触发主动回收以回收少量内存. 随着 LRU 不断排序, 这将提供更准确和最新的工作集估计, 并可能提供更具确定性的内存过度使用行为. 内存超分配控制器可以对正在运行的应用程序不断变化的行为提供更主动的响应, 而不是被动响应. 在这种情况下, 用户空间回收器的目的不是完全替代 KSWAPD 或直接回收, 而是主动识别内存节约机会, 回收策略设置的一些冷页, 以释放内存, 用于要求更高的作业或安排新作业.
谷歌数据中心使用了用户空间主动回收器. 此外, Meta 的[论文 TMO](https://dl.acm.org/doi/pdf/10.1145/3503222.3507731) 最近引用了一个非常类似的特性, 用于用户空间主动回收. | v2 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/all/20220331084151.2600229-1-yosryahmed@google.com)
*-*-*-*-*-*-*-*
[LORE v2,0/4](https://lore.kernel.org/r/20220407224244.1374102-1-yosryahmed@google.com)
*-*-*-*-*-*-*-*
[LORE v3,0/4](https://lore.kernel.org/r/20220408045743.1432968-1-yosryahmed@google.com))
*-*-*-*-*-*-*-*
[LORE v4,0/4](https://lore.kernel.org/r/20220421234426.3494842-1-yosryahmed@google.com)
*-*-*-*-*-*-*-*
[LORE v5,0/4](https://lore.kernel.org/r/20220425190040.2475377-1-yosryahmed@google.com) | | 2022/04/16 | Davidlohr Bueso | [Mechanism to induce memory reclaim](https://lore.kernel.org/all/5df21376-7dd1-bf81-8414-32a73cea45dd@google.com) | LSFMM 2022 | v1 ☐☑ | [LORE RFC v1,0/6](https://lore.kernel.org/all/5df21376-7dd1-bf81-8414-32a73cea45dd@google.com) | +| 2022/05/18 | Vaibhav Jain | [memcg: provide reclaim stats via 'memory.reclaim'](https://patchwork.kernel.org/project/linux-mm/patch/20220518223815.809858-1-vaibhav@linux.ibm.com/) | 642903 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220518223815.809858-1-vaibhav@linux.ibm.com) | ### 4.4.4 主动回收与内存分级 @@ -4107,6 +4108,14 @@ do_read_fault() | 2014/5/8 | Konstantin Khlebnikov | [mm: FAULT_AROUND_ORDER patchset performance data for powerpc](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c118678bc79e8241f9d3434d9324c6400d72f48a) | Kirill A. Shutemov 在 [commit 8c6e50b029 ("mm: introduce vm_ops->map_pages()")](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=1fdb412bd825998efbced3a16f6ce7e0329728cf) 尝试围绕缺页异常的地址预读更多的文件页面, 以此减少 minor page faults 的数量.
1. 本补丁创建基础设施, 通过 mm/Kconfig 修改 FAULT_AROUND_ORDER 的值. 这将使体系结构维护者能够基于该体系结构的性能数据来决定合适的 FAULT_AROUND_ORDER 值(默认为 4).
2. 列出 powerpc (平台 pseries) 的性能数字, 并对 powerpc 的 pseries 平台进行初始化. | v1 ☑✓ 3.16-rc7 | [LKML V4,0/2](https://www.lkml.org/lkml/2014/5/8/118) | +### 6.2.4 readahead support for filesystem +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:---:|:----:|:---:|:---:|:----------:|:----:| +| 2022/05/16 | Hsin-Yi Wang | [Implement readahead for squashfs](https://patchwork.kernel.org/project/linux-mm/cover/20220516105100.1412740-1-hsinyi@chromium.org/) | 641926 | v1 ☐☑ | [LORE v1,0/2](https://lore.kernel.org/r/20220516105100.1412740-1-hsinyi@chromium.org) | + + ## 6.3 DirtyPage ------- @@ -5027,6 +5036,7 @@ khugepaged 处理流程 |:----:|:----:|:---:|:----:|:---------:|:----:| | 2019/12/19 | Colin Cross | [mm: add a field to store names for private anonymous memory](https://lore.kernel.org/patchwork/patch/416962) | 在二进制中通过 xxx_sched_class 地址顺序标记调度类的优先级, 从而可以通过直接比较两个 xxx_sched_class 地址的方式, 优化调度器中两个热点函数 pick_next_task()和check_preempt_curr(). | v2 ☐ | [PatchWork RFC](https://lore.kernel.org/patchwork/patch/416962)
*-*-*-*-*-*-*-*
[PatchWork v2](https://lore.kernel.org/patchwork/patch/416962) | | 2022/03/10 | Alex Sierra | [split vm_normal_pages for LRU and non-LRU handling](https://patnux-mm/cover/20220310172633.9151-1-alex.sierra@amd.com/) | DEVICE_COHERENT 页面在 "普通" 页面可以被内核中的各种调用者使用的方式上引入了微妙的区别.
为了在 CPU 页表中进行映射和 COW, 它们的行为就像普通页面一样. 但它们不支持 LRU 列表、NUMA 迁移或 THP. 因此, 我们将 vm_normal_page 拆分为两个函数 vm_normal_any_page 和 vm_normal_lru_page. 后者将只返回那些可以放在 LRU 列表中, 并且支持 NUMA 迁移、KSM 和 THP 的页面.
在自测试中添加了 HMM 测试, 以使用设备连贯页面来执行这些更改. 名为 hmm_cow_in_device 的新测试将测试标记为 COW 的页面, 并在设备区域中分配. 此外, 还向 hmm_gup_test 中添加了更多的配置, 以测试基本的获取用户页面和设备区域页面中的获取用户页面的快速路径. | v1 ☐☑ | [LORE v1,0/3](https://lore.kernel.org/rsierra@amd.com) | +| 2022/05/19 | Chih-En Lin | [Introduce Copy-On-Write to Page Table](https://patchwork.kernel.org/project/linux-mm/cover/20220519183127.3909598-1-shiyn.lin@gmail.com/) | 643289 | v1 ☐☑ | [LORE v1,0/6](https://lore.kernel.org/r/20220519183127.3909598-1-shiyn.lin@gmail.com) | ### 8.1.1 具名匿名页 Anonymous VMA naming @@ -5057,7 +5067,7 @@ khugepaged 处理流程 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| -| 2022/02/18 | Jakub Matěna | [Removing limitations of merging anonymous VMAs](https://patchwork.kernel.org/project/linux-mm/cover/20220218122019.130274-1-matenajakub@gmail.com/) | 615764 | v1 ☐☑ | [LORE v1,0/4](https://lore.kernel.org/r/20220218122019.130274-1-matenajakub@gmail.com) | +| 2021/10/19 | Jakub Matěna | [Removing limitations of merging anonymous VMAs](https://patchwork.kernel.org/project/linux-mm/cover/20220218122019.130274-1-matenajakub@gmail.com/) | 615764 | v1 ☐☑ | [2022/02/18 LORE v1,0/4](https://lore.kernel.org/r/20220218122019.130274-1-matenajakub@gmail.com)
*-*-*-*-*-*-*-*
[2021/10/19 LORE v3,0/6](https://lore.kernel.org/r/20220516125405.1675-1-matenajakub@gmail.com) | ## 8.2 Page Fault @@ -6399,6 +6409,7 @@ DAMON 利用两个核心机制 : **基于区域的采样**和**自适应区域 | 2022/01/14 | Baolin Wang | [mm/damon: add access checking for hugetlb pages](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=49f4203aae06ba9d67b500c90339b262b0a52637) | TODO | v1 ☐☑✓ | [LORE](https://lore.kernel.org/all/6afcbd1fda5f9c7c24f320d26a98188c727ceec3.1639623751.git.baolin.wang@linux.alibaba.com), [COMMIT](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=49f4203aae06ba9d67b500c90339b262b0a52637) | | 2022/04/29 | SeongJae Park | [mm/damon: Support online tuning](https://patchwork.kernel.org/project/linux-mm/cover/20220429160606.127307-1-sj@kernel.org/) | 637059 | v1 ☐☑ | [LORE v1,0/14](https://lore.kernel.org/r/20220429160606.127307-1-sj@kernel.org) | | 2022/05/07 | Gautam Menghani | [Add documentation for Enum value 'NR_DAMON_OPS' in](https://patchwork.kernel.org/project/linux-mm/patch/20220507165620.110706-1-gautammenghani201@gmail.com/) | 639422 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220507165620.110706-1-gautammenghani201@gmail.com) | +| 2022/05/13 | SeongJae Park | [mm/damon/schemes: Extend DAMOS for Proactive LRU-lists Sorting](https://patchwork.kernel.org/project/linux-mm/cover/20220513150000.25797-1-sj@kernel.org/) | 641448 | v1 ☐☑ | [LORE v1,0/3](https://lore.kernel.org/r/20220513150000.25797-1-sj@kernel.org) | ### 13.4.5 vmstat @@ -6514,7 +6525,7 @@ DAMON 利用两个核心机制 : **基于区域的采样**和**自适应区域 | 2021/08/19 | Zhansaya Bagdauletkyzy | [add KSM performance tests](https://lore.kernel.org/patchwork/patch/1470603) | 新增 KSM 性能相关的 selftest. | v1 ☑ NA | [PatchWork 0/2](https://patchwork.kernel.org/project/linux-mm/cover/cover.1627828548.git.zhansayabagdaulet@gmail.com)
*-*-*-*-*-*-*-*
[PatchWork v3,0/2](https://patchwork.kernel.org/project/linux-mm/cover/cover.1629386192.git.zhansayabagdaulet@gmail.com) | | 2022/03/14 | Lv Ruyi | [ksm: Count ksm-merging pages for each process](https://patchwork.kernel.org/project/linux-mm/patch/20220314015355.2111696-1-xu.xin16@zte.com.cn/) | 由于当前 KSM 只计算 KSM 合并页面的数量(例如, ksm_pages_sharing 和 ksm_pages_shared), 无法看到更细粒度的 KSM 合并, 对于上层应用程序优化, 无法根据每个进程的 KSM 页面合并概率轻松设置合并区域. 因此, 有必要添加额外的统计手段, 以便上层用户能够了解每个进程的详细 KSM 合并信息.
这个补丁在 proc 下添加了一个名为 ksm_merging_pages 的新文件, 以表示该进程中涉及的 KSM 合并页面. | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/all/20220314015355.2111696-1-xu.xin16@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v2,0/1](https://lore.kernel.org/all/20220315114849.2119443-1-xu.xin16@zte.com.cn) | | 2022/03/23 | CGEL | [mm/vmstat: add events for ksm cow](https://patchwork.kernel.org/project/linux-mm/patch/20220323031730.2342930-1-yang.yang29@zte.com.cn/) | 当用户想要节省内存时, 可以通过调用 madvise MADV_MERGEABLE 来使用 KSM, 但是这会导致 KSM COW 延迟. 用户可以通过读取 `/sys/kernel/mm/ksm/pages_sharing` 来了解 KSM 节省了多少内存, 但他们不知道 KSM COW 的成本, 这对于一些延迟敏感的任务来说是很重要的. 因此, 添加 KSM COW 事件(KSM_COW_SUCCESS 和 KSM_COW_FAIL)来帮助用户评估是否或如何使用 KSM. | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/all/20220323031730.2342930-1-yang.yang29@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v2,0/1](https://lore.kernel.org/all/20220323075714.2345743-1-yang.yang29@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v3,0/1](https://lore.kernel.org/all/20220324104332.2350482-1-yang.yang29@zte.com.cn) | -| 2022/05/08 | CGEL | [mm/ksm: introduce ksm_force for each process](https://patchwork.kernel.org/project/linux-mm/patch/20220508091426.928094-1-xu.xin16@zte.com.cn) | 要使用 KSM, 我们必须在应用程序代码中显式调用 madvise(), 这意味着在操作系统上安装的应用程序需要卸载, 源代码需要修改. 很不方便. 为了改变这种情况, 我们在 `/proc/` 下添加一个 proc 文件 ksm_force, 以支持动态地打开/关闭进程的 MM 的 KSM 扫描.
1. 如果 ksm_force 设置为 1, 强制该 mm 的所有匿名和 "合格" 的 VMA 参与 KSM 扫描, 而不显式调用 madvise() 将 VMA 标记为 MADV_MERGEABLE. 但仅当 "/sys/kernel/mm/ksm/run" 的 klob 设置为 1 时有效.
2. 如果 ksm_force 设置为 0, 则取消该进程的 ksm_force 特性, 并取消属于 vma 的合并页面, 这些 vma 不再被合并, 但是依旧保留合并的 MADV_MERGEABLE 区域的行为. | v4 ☐☑ | [LORE v4,0/1](https://lore.kernel.org/r/20220508091426.928094-1-xu.xin16@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v6,0/1](https://lore.kernel.org/r/20220510122242.1380536-1-xu.xin16@zte.com.cn) | +| 2022/05/08 | CGEL | [mm/ksm: introduce ksm_force for each process](https://patchwork.kernel.org/project/linux-mm/patch/20220508091426.928094-1-xu.xin16@zte.com.cn) | 要使用 KSM, 我们必须在应用程序代码中显式调用 madvise(), 这意味着在操作系统上安装的应用程序需要卸载, 源代码需要修改. 很不方便. 为了改变这种情况, 我们在 `/proc/` 下添加一个 proc 文件 ksm_force, 以支持动态地打开/关闭进程的 MM 的 KSM 扫描.
1. 如果 ksm_force 设置为 1, 强制该 mm 的所有匿名和 "合格" 的 VMA 参与 KSM 扫描, 而不显式调用 madvise() 将 VMA 标记为 MADV_MERGEABLE. 但仅当 "/sys/kernel/mm/ksm/run" 的 klob 设置为 1 时有效.
2. 如果 ksm_force 设置为 0, 则取消该进程的 ksm_force 特性, 并取消属于 vma 的合并页面, 这些 vma 不再被合并, 但是依旧保留合并的 MADV_MERGEABLE 区域的行为. | v4 ☐☑ | [LORE v4,0/1](https://lore.kernel.org/r/20220508091426.928094-1-xu.xin16@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v6,0/1](https://lore.kernel.org/r/20220510122242.1380536-1-xu.xin16@zte.com.cn)
*-*-*-*-*-*-*-*
[LORE v7,0/1](https://lore.kernel.org/all/20220512070347.1628163-1-xu.xin16@zte.com.cn) | diff --git a/study/kernel/00-DESCRIPTION/SCHEDULER.md b/study/kernel/00-DESCRIPTION/SCHEDULER.md index 0060a2c..39f9463 100644 --- a/study/kernel/00-DESCRIPTION/SCHEDULER.md +++ b/study/kernel/00-DESCRIPTION/SCHEDULER.md @@ -3976,7 +3976,8 @@ v5.0 EAS 合入主线之后, 引入了 EM, 各平台或者设备通过 [em_dev_r | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:-----:|:----:|:----:|:----:|:------------:|:----:| -| 2022/04/20 | Daniel Lezcano | [tools/thermal: thermal library and tools](https://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux.git/commit/?h=thermal/linux-next&id=a84a55b356add1baefcdaf9181b2f5d21f22934e) | Linaro 提出了一个与 Linux 内核的热框架接口的热库. 作为其中的一部分, 它也是一个用于用户空间的温度计实用程序, 用于监视热数据. 实现了 Netlink 通知机制, 以接收散热配置发现、跳变点更改和违规以及冷却设备更改通知. 这种抽象使用户空间更容易处理 Linux 内核的热框架. 在这个库之上构建的温控工具将允许从通过配置文件指定的一组热区域捕获温度. 这个低开销的工具可以很容易地捕获热数据, 然后集成到其他工具, 如 GNU Plot. 还提供了一个基本的 "散热" 守护程序. 参见 [New Thermal Library, "Thermometer" Tool Proposed For Linux](https://www.phoronix.com/scan.php?page=news_item&px=Linux-Thermometer-RFC), [New Thermal Library & Temperature Capture Tool Readied For Linux 5.19](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.19-New-Thermal-Lib-Tool) | v3 ☑✓ 5.19-rc1 | [LORE RFC,v1,1/4](https://lore.kernel.org/lkml/20220214210446.255780-1-daniel.lezcano@linaro.org)
*-*-*-*-*-*-*-*
[LORE v3,0/4](https://lore.kernel.org/all/20220420160933.347088-1-daniel.lezcano@linaro.org) | +| 2013/10/14 | Jacob Pan | [TMON thermal monitoring/tuning tool](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=94f69966faf8e70bd655ea25f9dd5b9400567b75) | 实现温控工具 tmon. | v1 ☑✓ 3.13-rc1 | [LORE v1](https://lore.kernel.org/lkml/1381791747-7458-1-git-send-email-jacob.jun.pan@linux.intel.com)
*-*-*-*-*-*-*-*
[LORE](https://lore.kernel.org/lkml/1381259024-25433-1-git-send-email-jacob.jun.pan@linux.intel.com)
*-*-*-*-*-*-*-*
[LORE v1](https://lore.kernel.org/all/1381791747-7458-1-git-send-email-jacob.jun.pan@linux.intel.com) | +| 2022/04/20 | Daniel Lezcano | [tools/thermal: thermal library and tools](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?id=cb4487d2b4043bbe98f60f2628387b40fa4896f8) | Linaro 提出了一个与 Linux 内核的热框架接口的热库. 作为其中的一部分, 它也是一个用于用户空间的温度计实用程序, 用于监视热数据. 实现了 Netlink 通知机制, 以接收散热配置发现、跳变点更改和违规以及冷却设备更改通知. 这种抽象使用户空间更容易处理 Linux 内核的热框架. 在这个库之上构建的温控工具将允许从通过配置文件指定的一组热区域捕获温度. 这个低开销的工具可以很容易地捕获热数据, 然后集成到其他工具, 如 GNU Plot. 还提供了一个基本的 "散热" 守护程序. 参见 [New Thermal Library, "Thermometer" Tool Proposed For Linux](https://www.phoronix.com/scan.php?page=news_item&px=Linux-Thermometer-RFC), [New Thermal Library & Temperature Capture Tool Readied For Linux 5.19](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.19-New-Thermal-Lib-Tool) | v3 ☑✓ 5.19-rc1 | [LORE v1,0/4](https://lore.kernel.org/lkml/20220218125334.995447-1-daniel.lezcano@linaro.org)
*-*-*-*-*-*-*-*
[LORE RFC,v1,1/4](https://lore.kernel.org/lkml/20220214210446.255780-1-daniel.lezcano@linaro.org)
*-*-*-*-*-*-*-*
[LORE v3,0/4](https://lore.kernel.org/all/20220420160933.347088-1-daniel.lezcano@linaro.org) | ### 7.2.5 社区其他相关讨论