# Day 19 Physical Memory Model (Summary)

一样先来个简单的总结吧!
这份文件 Physical Memory Model 是在描述 Linux kernel 是怎麽样管理实体记忆体的。
Linux kernel 中有两种记忆体模型,这篇文件介绍了两种记忆体模型是如何管理实体记忆体的,
并且简单描述了这两种模型应该使用和实作的 API:

  • FLATMEM model:适用於非 NUMA 架构,且实体记忆体区段几乎都是连续的记忆体架构上,Linux 最一开始所使用的记忆体模型。
    • 优点:直觉、pfn (page frame number) 和 struct page 之间的转换简单
    • 缺点:若实体记忆体上有"孔洞",那麽将会浪费很多记忆体(struct page 物件)来储存这些孔洞
  • SPARSEMEM model:通用的记忆体模型,是想要取代 DISCONTIGMEM 这个记忆体模型
    • 优点:能够支援记忆体的热插拔、热移除(hot remove),且能有效减少纪录记忆体"孔洞"所使用的记忆体
    • 缺点:pfn 转换到 struct page 较为复杂,所以後来有引入了一些优化的机制

最後讲述到了 ZONE_DEVICE,一个搭建於 SPARSEMEM_VMEMMAP 的设施,
让驱动程序所使用的实体记忆体区块也能使用 mem_map 相关操作。

PF (Page Frame) & PFN (Page Frame Number)

实体记忆体在 Linux 的管理下,是被分为一个一个 PAGE_SIZE 大小的区块 (实际PAGE_SIZE值和架构有关),而这一块 PAGE_SIZE 大小的区块就被称为 page frame,是实体记忆体的最小管理单位,每一个 page frame 会由一个 struct page 的物件所纪录(纪录它的使用状况);
page frame number 就是 page frame 的编号,PA 位址 addr 的 PFN 就是 addr >> PAGE_SIZE

NUMA (Non-Uniform Memory Access)

这是指一种多处理器的记忆体架构,记忆体存取的速度是和记忆体与处理器的距离有关系的,处理器对不同位置的记忆体有不同的存取速度,所以称为 "Non-Uniform"

FLATMEM -> DISCONTIGMEM -> SPARSEMEM

这是一个实体记忆体管理模型的演进,最早出现的是 FLATMEM,直觉式的实作方式,把实体记忆体用 struct page 物件阵列来做纪录,struct page 和 pfn 之间的关系简单,转换也很容易;
DISCONTIGMEM 则是为了更有效率的管理不连续的实体记忆体系统,以及较好的支援 NUMA 系统而被创造出来,引进了 memory node 的概念,来符合 NUMA 架构下,每个 node 有自己独立的记忆体管理子系统;
最後 SPARSEMEM 则是因为 DISCONTIGMEM 对於 memory hotplug 和 memory hot remove 的支援性太差(NUME node 的 granularity 对於 hot plug 或是 hot remove 都太大了(coarse)),所以被实作出来,做为一个更通用并且支援 hot plug、hot remove 用来取代 DISCONTIGMEM
DISCONTIGMEM 在 5.13 版的 kernel 都还看的到它的踪迹,而在 5.14 之後看起来就被 SPARSEMEM 所彻底取代了。

後记

今天简单记录到这,感谢各位观看!
明天也许来研究一下,这些 memory model 在 RISC-V 下的实作,顺便看看 kernel 是如何取的 dtb 中的 memory 资讯以及传递下来来做这些实体记忆体管理的;
我们明天见!

参考资料

延伸阅读


<<:  Day13 主动情蒐-利用 tcpdump 观察 Netdiscover && Ping 封包

>>:  [day-13] Python 内建的数值类函式

什麽是战略分析 (Strategic Analysis)?如何使用工具进行此操作

您是否希望提高您的竞争地位? 应对外部威胁?识别新的机会或风险? 扩大您在新市场的影响力? 战略分...

Day 29 Sniffing & Spoofing 监听与欺骗 (dnschef)

前言 今天要体验的工具位於Kali的09-Sniffing & Spoofing分类,这类的...

补充…小知识?

这篇就讲玩到的小东西吧!可能会有人觉得没意思,不过我还是想写,反正是我的手在动,嘿嘿~ 关於在命令提...

Day14 逻辑斯回归实作

https://github.com/PacktPublishing/Machine-Learni...

Powershell 入门之逻辑判断(下)

今天我们来看一下 powershell 中的另一种逻辑判断 switch. switch 语法: s...