From c4bed5197cb93ba612e1c8cb83f52f720c97eb26 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Fri, 27 Aug 2021 21:56:59 +0800 Subject: [PATCH] description/memory: update 20210827 --- study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md | 27 ++++++++++++++++--- study/kernel/02-memory/00-code/tool/test.c | 9 ++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md index 1bb2f2a..466df53 100644 --- a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md +++ b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md @@ -260,13 +260,34 @@ Linux 一开始是在一台i386上的机器开发的, i386 的硬件页表是2 -## 1.7 Quicklist +## 1.7 page table pages +------- + +### 1.7.1 Quicklist ------- | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| | 2007/03/23 | Christoph Lameter | [Quicklists for page table pages V4](https://lore.kernel.org/patchwork/cover/76916) | NA | v1 ☐ | [PatchWork v1](https://lore.kernel.org/patchwork/cover/76097)
*-*-*-*-*-*-*-*
[PatchWork v2](https://lore.kernel.org/patchwork/cover/76244)
*-*-*-*-*-*-*-*
[PatchWork v3](https://lore.kernel.org/patchwork/cover/76702)
*-*-*-*-*-*-*-*
[PatchWork v4](https://lore.kernel.org/patchwork/cover/76916)
*-*-*-*-*-*-*-*
[PatchWork v5](https://lore.kernel.org/patchwork/cover/78116) | -| 2019/08/08 | Christoph Lameter | [mm: remove quicklist page table caches](https://lore.kernel.org/patchwork/cover/1112468) | NA | v1 ☐ | [PatchWork v5](https://lore.kernel.org/patchwork/cover/1112468) | +| 2019/08/08 | Christoph Lameter | [mm: remove quicklist page table caches](https://lore.kernel.org/patchwork/cover/1112468) | 内核提前直接映射好足够的 PTE 级别的页面, 引入 `__GFP_PTE_MAPPED` 标志, 当使用此标记分配 order 为 0 页面时, 将在直接映射中的 PTE 级别进行映射.
目前只是分配页表时使用 `__GFP_PTE_MAPPED` 分配页表, 以便它们在直接映射中具有 4K PTE. | v1 ☐ | [PatchWork v5](https://lore.kernel.org/patchwork/cover/1112468) | + + +### 1.7.2 Quicklist +------- + + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2021/08/23 | Mike Rapoport | [mm/page_alloc: cache pte-mapped allocations](https://lore.kernel.org/patchwork/cover/1480366) | NA | v1 ☐ | [PatchWork RFC,0/4](https://lore.kernel.org/patchwork/cover/1480366) | + + +## 1.8 memory policy +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2021/08/03 | Feng Tang | [Introduce multi-preference mempolicy](https://lore.kernel.org/patchwork/cover/1471473) | 引入 MPOL_PREFERRED_MANY 的 policy, 该 mempolicy 模式可用于 set_mempolicy 或 mbind 接口.
1. 与 MPOL_PREFERRED 模式一样, 它允许应用程序为满足内存分配请求的节点设置首选项.但是与 MPOL_PREFERRED 模式不同, 它需要一组节点.
2. 与 MPOL_BIND 接口一样, 它在一组节点上工作, 与 MPOL_BIND 不同, 如果首选节点不可用, 它不会导致 SIGSEGV 或调用 OOM killer. | v7 ☐ | [PatchWork v7,0/5](https://lore.kernel.org/patchwork/cover/1471473) | # 2 内存分配 @@ -1367,7 +1388,7 @@ active 头(热烈使用中) > active 尾 > inactive 头 > inactive 尾(被驱逐 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| -| 2021/05/20 | Yu Zhao | [Multigenerational LRU](https://lwn.net/Articles/1394674) | 将 LRU 的列表划分为多代老化. 通过 CONFIG_LRU_GEN 来控制. | v3 ☐ | [Patchwork v1,00/14](https://lore.kernel.org/patchwork/patch/1394674)
*-*-*-*-*-*-*-*
[PatchWork v2,00/16](https://lore.kernel.org/patchwork/cover/1412560)
*-*-*-*-*-*-*-*
[PatchWork v3,00/14](https://patchwork.kernel.org/project/linux-mm/cover/20210520065355.2736558-1-yuzhao@google.com)
*-*-*-*-*-*-*-*
[PatchWork v4,00/11](https://patchwork.kernel.org/project/linux-mm/cover/20210818063107.2696454-1-yuzhao@google.com) | +| 2021/05/20 | Yu Zhao | [Multigenerational LRU](https://lwn.net/Articles/1394674) | 将 LRU 的列表划分为多代老化. 通过 CONFIG_LRU_GEN 来控制. | v3 ☐ | [Patchwork v1,00/14](https://lore.kernel.org/patchwork/patch/1394674)
*-*-*-*-*-*-*-*
[PatchWork v2,00/16](https://lore.kernel.org/patchwork/cover/1412560)
*-*-*-*-*-*-*-*
[PatchWork v3,00/14](https://patchwork.kernel.org/project/linux-mm/cover/20210520065355.2736558-1-yuzhao@google.com)
*-*-*-*-*-*-*-*
[2021/08/18 PatchWork v4,00/11](https://patchwork.kernel.org/project/linux-mm/cover/20210818063107.2696454-1-yuzhao@google.com) | diff --git a/study/kernel/02-memory/00-code/tool/test.c b/study/kernel/02-memory/00-code/tool/test.c index 9d60b3b..4386642 100644 --- a/study/kernel/02-memory/00-code/tool/test.c +++ b/study/kernel/02-memory/00-code/tool/test.c @@ -1,3 +1,4 @@ +// https://zhuanlan.zhihu.com/p/320688306 #include #include #include @@ -8,6 +9,8 @@ int main(void) { + char c; + int fd = open("1.bat", O_RDWR|O_CREAT|O_TRUNC, 0777); ftruncate(fd, 5000); @@ -21,10 +24,14 @@ int main(void) printf("addr_mmap_p: %p, addr_mmap_s: %p, addr_malloc: %p\n", addr_mmap_p, addr_mmap_s, addr_malloc); + c = getchar(); addr_mmap_p[pagesize - 1] = 0; addr_mmap_s[pagesize - 1] = 0; *addr_malloc = 0; - char c = getchar(); + + c = getchar(); + printf("addr_mmap_p: %p, addr_mmap_s: %p, addr_malloc: %p\n", + addr_mmap_p, addr_mmap_s, addr_malloc); return 0; }