From 4e68a54fc6868ef4c8fc41c582e998055c0782d0 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Sun, 18 Dec 2022 12:14:41 +0800 Subject: [PATCH] description/academia --- study/kernel/00-DESCRIPTION/ACADEMIA.md | 70 +++++++++++++++++++ study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md | 22 ++++++ study/kernel/00-DESCRIPTION/VIRT.md | 61 ++++++++++------ 3 files changed, 132 insertions(+), 21 deletions(-) create mode 100644 study/kernel/00-DESCRIPTION/ACADEMIA.md diff --git a/study/kernel/00-DESCRIPTION/ACADEMIA.md b/study/kernel/00-DESCRIPTION/ACADEMIA.md new file mode 100644 index 0000000..f888e4d --- /dev/null +++ b/study/kernel/00-DESCRIPTION/ACADEMIA.md @@ -0,0 +1,70 @@ +--- + +title: 学术界信息汇总 +date: 2021-02-15 00:32 +author: gatieme +tags: + - linux + - tools +categories: + - 技术积累 +thumbnail: +blogexcerpt: 虚拟化 & KVM 子系统 + +--- + +
+ +本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 + +知识共享许可协议 + +因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦 + +**转载请务必注明出处, 谢谢, 不胜感激** + +
+ +| 日期 | 作者 | GitHub| CSDN | BLOG | +| ------- |:-------:|:-------:|:-------:|:-------:| +| 2021-02-15 | [成坚-gatieme](https://kernel.blog.csdn.net) | [`AderXCoding/system/tools/fzf`](https://github.com/gatieme/AderXCoding/tree/master/system/tools/fzf) | [使用模糊搜索神器 FZF 来提升办公体验](https://blog.csdn.net/gatieme/article/details/113828826) | [Using FZF to Improve Productivit](https://oskernellab.com/2021/02/15/2021/0215-0001-Using_FZF_to_Improve_Productivity)| + + +
+ + **学术界信息汇总** +===================== + + + + +**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 重要功能和时间点 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*** + + + + + +下文将按此目录分析 Linux 内核中 MM 的重要功能和引入版本: + + + + +**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 正文 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*** + + +# 1 IEEE +------- + + + + +
+ +* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. + +* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. + +* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系. + +* **转载请务必注明出处, 谢谢, 不胜感激** +
diff --git a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md index d881d76..6416f6f 100644 --- a/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md +++ b/study/kernel/00-DESCRIPTION/MEMORY_MANAGER.md @@ -4090,6 +4090,8 @@ swappiness 参数值可设置范围在 `0~100` 之间. |:----:|:----:|:---:|:----:|:---------:|:----:| | 2021/07/30 | Tiberiu A Georgescu | [pagemap: swap location for shared pages](https://lore.kernel.org/patchwork/patch/1470271) | NA | v2 ☐ v5.14-rc4 | [PatchWork RFC,0/4](https://lore.kernel.org/patchwork/patch/1470271) | | 2021/08/17 | Peter Xu | [mm: Enable PM_SWAP for shmem with PTE_MARKER](https://lore.kernel.org/patchwork/patch/1473423) | 这个补丁集在 shmem 上启用 pagemap 的 PM_SWAP. IOW 用户空间将能够检测 shmem 页面是否被换出, 就像匿名页面一样.
可以使用 CONFIG_PTE_MARKER_PAGEOUT 来启用该特性. 当启用时, 它会在 shmem 页面上带来 0.8% 的换入性能开销, 所以作者还没有将它设置为默认值. 然而, 以作者的看法, 0.8% 仍然在一个可接受的范围内, 我们甚至可以使它最终默认. | v2 ☐ v5.14-rc4 | [PatchWork RFC,0/4](https://lore.kernel.org/patchwork/patch/1473423) | +| 2022/10/23 | Kairui Song | [swap: add a limit for readahead page-cluster value](https://patchwork.kernel.org/project/linux-mm/patch/20221023162533.81561-1-ryncsn@gmail.com/) | 687949 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20221023162533.81561-1-ryncsn@gmail.com) | + ## 5.4 swap IO ------- @@ -5251,6 +5253,14 @@ khugepaged 处理流程 |:---:|:----:|:---:|:----:|:---------:|:----:| | 2022/09/21 | Rongwei Wang | [[RFC] mm/khugepaged: Improve awareness for exiting processes](https://patchwork.kernel.org/project/linux-mm/patch/20220921032759.41473-1-rongwei.wang@linux.alibaba.com/) | 678876 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220921032759.41473-1-rongwei.wang@linux.alibaba.com) | +#### 7.2.9.3 khugepaged 的其他优化 +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2022/10/24 | Gautam Menghani | [mm/khugepaged: add tracepoint to collapse_file()](https://patchwork.kernel.org/project/linux-mm/patch/20221024150922.129814-1-gautammenghani201@gmail.com/) | 688257 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20221024150922.129814-1-gautammenghani201@gmail.com) | +| 2022/10/25 | Nathan Chancellor | [mm/khugepaged: Initialize index and nr in collapse_file()](https://patchwork.kernel.org/project/linux-mm/patch/20221025173407.3423241-1-nathan@kernel.org/) | 688749 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20221025173407.3423241-1-nathan@kernel.org) | +| 2022/10/26 | Johannes Weiner | [[v2] mm: vmscan: split khugepaged stats from direct reclaim stats](https://patchwork.kernel.org/project/linux-mm/patch/20221026180133.377671-1-hannes@cmpxchg.org/) | 689123 | v2 ☐☑ | [LORE v2,0/1](https://lore.kernel.org/r/20221026180133.377671-1-hannes@cmpxchg.org) | ## 7.3 复合页 Compound Page @@ -6210,6 +6220,9 @@ FRONTSWAP 对应的一个后端叫 ZRAM. 前身为 compcache, 它早在 2.6.33(2 ZRAM 是一个在内存中的块设备(块设备相对于字符设备而言, 信息存放于固定大小的块中, 支持随机访问, 磁盘就是典型的块设备, 更多将在块层子系统中讲), 因此, 内核可以复用已有的 swap 设备设施, 把这个块设备格式化为 swap 设备. 因此, 被交换出去的页面, 将通过 FRONTSWAP 前端进入到 ZRAM 这个伪 swap 设备中, 并被压缩存放! 当然, 这个ZRAM 空间有限, 因此, 页面可能不被 ZRAM 接受. 如果这种情形发生, 内核就回退到用真正的磁盘交换设备. +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:---:|:----------:|:----:| +| 2022/09/30 | Brian Geffon | [zram: Always expose rw_page](https://patchwork.kernel.org/project/linux-mm/patch/20220930195215.2360317-1-bgeffon@google.com/) | 682376 | v1 ☐☑ | [LORE v1,0/1](https://lore.kernel.org/r/20220930195215.2360317-1-bgeffon@google.com)
*-*-*-*-*-*-*-*
[LORE v2,0/1](https://lore.kernel.org/r/20221003144832.2906610-1-bgeffon@google.com) | ### 11.2.3 后端之 ZSWAP @@ -6245,6 +6258,15 @@ FRONTSWAP 对应的另一个后端叫 [ZSWAP](https://lwn.net/Articles/537422). | 2013/09/11 | Krzysztof Kozlowski | [mm: migrate zbud pages](https://lore.kernel.org/all/1378889944-23192-1-git-send-email-k.kozlowski@samsung.com) | 1378889944-23192-1-git-send-email-k.kozlowski@samsung.com | v2 ☐☑✓ | [LORE v2,0/5](https://lore.kernel.org/all/1378889944-23192-1-git-send-email-k.kozlowski@samsung.com) | | 2015/09/22 | Vitaly Wool | [zbud: allow up to PAGE_SIZE allocations](https://lore.kernel.org/all/20150922141733.d7d97f59f207d0655c3b881d@gmail.com) | 20150922141733.d7d97f59f207d0655c3b881d@gmail.com | v2 ☐☑✓ | [LORE](https://lore.kernel.org/all/20150922141733.d7d97f59f207d0655c3b881d@gmail.com) | +### 11.2.3.4 ZSMALLOC +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:-----:|:----:|:----:|:----:|:------------:|:----:| +| 2022/10/24 | Sergey Senozhatsky | [zsmalloc/zram: configurable zspage size](https://patchwork.kernel.org/project/linux-mm/cover/20221024161213.3221725-1-senozhatsky@chromium.org) | 688281 | v1 ☐☑ | [LORE v1,0/6](https://lore.kernel.org/r/20221024161213.3221725-1-senozhatsky@chromium.org)
*-*-*-*-*-*-*-*
[LORE v2,0/9](https://lore.kernel.org/r/20221026112933.4122957-1-senozhatsky@chromium.org)
*-*-*-*-*-*-*-*
[LORE v3,0/9](https://lore.kernel.org/r/20221027042651.234524-1-senozhatsky@chromium.org) | +| 2022/10/27 | Nhat Pham | [[v2,5/5] zsmalloc: Implement writeback mechanism for zsmalloc](https://patchwork.kernel.org/project/linux-mm/patch/20221027182736.513530-1-nphamcs@gmail.com/) | 689539 | v2 ☐☑ | [LORE v2,0/5](https://lore.kernel.org/r/20221027182736.513530-1-nphamcs@gmail.com) | +| 2022/10/26 | Nhat Pham | [Implement writeback for zsmalloc](https://patchwork.kernel.org/project/linux-mm/cover/20221026200613.1031261-1-nphamcs@gmail.com/) | 689169 | v1 ☐☑ | [LORE v1,0/5](https://lore.kernel.org/r/20221026200613.1031261-1-nphamcs@gmail.com) | + ## 11.3 一些细节 diff --git a/study/kernel/00-DESCRIPTION/VIRT.md b/study/kernel/00-DESCRIPTION/VIRT.md index f597099..1953b8e 100644 --- a/study/kernel/00-DESCRIPTION/VIRT.md +++ b/study/kernel/00-DESCRIPTION/VIRT.md @@ -15,24 +15,24 @@ blogexcerpt: 虚拟化 & KVM 子系统
-本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 +本作品采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可, 转载请注明出处, 谢谢合作 -知识共享许可协议 + 知识共享许可协议 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦 -**转载请务必注明出处, 谢谢, 不胜感激** +** 转载请务必注明出处, 谢谢, 不胜感激 **
| 日期 | 作者 | GitHub| CSDN | BLOG | | ------- |:-------:|:-------:|:-------:|:-------:| -| 2021-02-15 | [成坚-gatieme](https://kernel.blog.csdn.net) | [`AderXCoding/system/tools/fzf`](https://github.com/gatieme/AderXCoding/tree/master/system/tools/fzf) | [使用模糊搜索神器 FZF 来提升办公体验](https://blog.csdn.net/gatieme/article/details/113828826) | [Using FZF to Improve Productivit](https://oskernellab.com/2021/02/15/2021/0215-0001-Using_FZF_to_Improve_Productivity)| +| 2021-02-15 | [成坚 - gatieme](https://kernel.blog.csdn.net) | [`AderXCoding/system/tools/fzf`](https://github.com/gatieme/AderXCoding/tree/master/system/tools/fzf) | [使用模糊搜索神器 FZF 来提升办公体验](https://blog.csdn.net/gatieme/article/details/113828826) | [Using FZF to Improve Productivit](https://oskernellab.com/2021/02/15/2021/0215-0001-Using_FZF_to_Improve_Productivity)|
-2 **虚拟化子系统** +2 ** 虚拟化子系统 ** ===================== @@ -65,28 +65,28 @@ spinlock 在非虚拟化的环境下, 它是可以认为 CPU 不会被抢占的, 但是在虚拟化下, CPU 对应到 vcpu, 每个 vcpu 跟之前裸机上的进程调度一样, 所以 A 拿锁干活, 并不一定不会被抢占, 很有可能被调度走了, 因为 cpu 这时候还不知道 vcpu 在干嘛. B 死等 A, 但是 A 被调度了, 运行了 C, C 也要死等 A, 在一些设计不够好的系统里面, 这样就会变得很糟糕. -为了保证spinlock unlock的公平性, 有一种队列的spinlock, ticketlock, http://www.ibm.com/developerworks/cn/linux/l-cn-spinlock/这篇文章介绍的非常详细, 总之根据next, own, 来判断是否到自己了. 这样一种机制在裸机上是可以解决公平的问题, 但是放到虚拟化环境里, 它会使问题变得更糟. C必须等到B完成才可以, 如果中间B被调度了, 又开始循环了, 当然更糟的定义也是相对的, 如果vcpu的调度机制能够vcpu正在拿锁的话, 会怎样? +为了保证 spinlock unlock 的公平性, 有一种队列的 spinlock, ticketlock, http://www.ibm.com/developerworks/cn/linux/l-cn-spinlock / 这篇文章介绍的非常详细, 总之根据 next, own, 来判断是否到自己了. 这样一种机制在裸机上是可以解决公平的问题, 但是放到虚拟化环境里, 它会使问题变得更糟. C 必须等到 B 完成才可以, 如果中间 B 被调度了, 又开始循环了, 当然更糟的定义也是相对的, 如果 vcpu 的调度机制能够 vcpu 正在拿锁的话, 会怎样? -jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一段时间, 会放弃cpu, 并blocked, unlocked的时候会被唤醒, 这个针对PV制定的优化, 在vcpu拿不到锁的场景下, 并没有任何的性能损耗, 并且能够解决之前的问题, 但是当运行native linux的时候, 就会有性能损耗, 所以当时在config里面添加了一个编译选项CONFIG_PARAVIRT_SPINLOCK, 话说我们的系统里面, 这个是没打开的啊, 后面要再好好评估下 +jeremy 很早就写了一个 pv ticketlock, 原理大概就是 vcpu 在拿锁了一段时间, 会放弃 cpu, 并 blocked, unlocked 的时候会被唤醒, 这个针对 PV 制定的优化, 在 vcpu 拿不到锁的场景下, 并没有任何的性能损耗, 并且能够解决之前的问题, 但是当运行 native linux 的时候, 就会有性能损耗, 所以当时在 config 里面添加了一个编译选项 CONFIG_PARAVIRT_SPINLOCK, 话说我们的系统里面, 这个是没打开的啊, 后面要再好好评估下 -之后, 这个patch进行了改良, 在原有native linux的ticketlock的基础, 增加了一种模式, 通过检测cpu是否spinned一段时间, 判断是否要进入slow path, 之前的fast path的逻辑和原来保持不变, 进入slowpath后, 会在ticketlock里面置位, 并block vcpu, 等unlock的时候, 这个位会被clear, 因为占用了一个位, 所以能用的ticket少了一半. +之后, 这个 patch 进行了改良, 在原有 native linux 的 ticketlock 的基础, 增加了一种模式, 通过检测 cpu 是否 spinned 一段时间, 判断是否要进入 slow path, 之前的 fast path 的逻辑和原来保持不变, 进入 slowpath 后, 会在 ticketlock 里面置位, 并 block vcpu, 等 unlock 的时候, 这个位会被 clear, 因为占用了一个位, 所以能用的 ticket 少了一半. -这个方案在一些硬件(XEON x3450)上进行各种benchmark测试后, 结论是不再有任何的性能损耗. +这个方案在一些硬件 (XEON x3450) 上进行各种 benchmark 测试后, 结论是不再有任何的性能损耗. -好吧, 说了这么多理论性的东西, 再来说下, 我们实际遇到的问题. 很早以前经常有windows用户的工单投诉, 说自己的vm里面cpu没有怎么使用, 为什么cpu显示百分之百. +好吧, 说了这么多理论性的东西, 再来说下, 我们实际遇到的问题. 很早以前经常有 windows 用户的工单投诉, 说自己的 vm 里面 cpu 没有怎么使用, 为什么 cpu 显示百分之百. -由于是windows系统, 加上我是小白, 很难给出一些技术细节上的分析, 只能通过简单滴一些测试实验进行调查. +由于是 windows 系统, 加上我是小白, 很难给出一些技术细节上的分析, 只能通过简单滴一些测试实验进行调查. -最后的结果, 就是windows很多核的情况下, 比如12、16, 在一个稍微有点load的物理机上面, 跑一些cpu压力, 就很容易出现cpu百分百的问题, 后面降core之后, 情况有所缓解. 后面大致的分析结果是, windows里面很多操作是用到spinlock的, 当一个core拿到锁, 事情没有做完, 被调度了, 这时其他的core也需要拿锁, 当core越来越多的时候, 情况就越来越糟, 最后看上去就大家都很忙, 但实际什么事情也没做. +最后的结果, 就是 windows 很多核的情况下, 比如 12、16, 在一个稍微有点 load 的物理机上面, 跑一些 cpu 压力, 就很容易出现 cpu 百分百的问题, 后面降 core 之后, 情况有所缓解. 后面大致的分析结果是, windows 里面很多操作是用到 spinlock 的, 当一个 core 拿到锁, 事情没有做完, 被调度了, 这时其他的 core 也需要拿锁, 当 core 越来越多的时候, 情况就越来越糟, 最后看上去就大家都很忙, 但实际什么事情也没做. @@ -99,7 +99,7 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 | 2015/04/07 | Waiman Long | [qspinlock: a 4-byte queue spinlock with PV support](https://lore.kernel.org/patchwork/cover/558505) | PV SPINLOCK | v15 ☑ 4.2-rc1 | [PatchWork v15](https://lore.kernel.org/patchwork/cover/558505) | | 2015/11/10 | Waiman Long | [locking/qspinlock: Enhance pvqspinlock performance](https://lore.kernel.org/patchwork/cover/616398) | PV SPINLOCK | v10 ☑ 4.5-rc1 | [PatchWork v5](https://lore.kernel.org/patchwork/cover/588106)
*-*-*-*-*-*-*-*
[PatchWork v10](https://lore.kernel.org/patchwork/cover/616398) | | 2018/10/08 | Raghavendra K T | [Enable PV qspinlock for Hyper-V](https://lore.kernel.org/patchwork/cover/996494) | Hyper-V 的 PV spiclock 实现. | v2 ☑ 4.20-rc1 | [PatchWork v2](https://lore.kernel.org/patchwork/cover/996494) | -| 2019/10/23 | Zhenzhong Duan | [Add a unified parameter "nopvspin"](https://lore.kernel.org/patchwork/cover/1143398) | PV SPINLOCK | v8 ☑ 5.9-rc1 | [PatchWork v8](https://lore.kernel.org/patchwork/cover/1143398) | +| 2019/10/23 | Zhenzhong Duan | [Add a unified parameter"nopvspin"](https://lore.kernel.org/patchwork/cover/1143398) | PV SPINLOCK | v8 ☑ 5.9-rc1 | [PatchWork v8](https://lore.kernel.org/patchwork/cover/1143398) | @@ -110,7 +110,7 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| -| 2020/12/22 | Xie Yongji | [Introduce VDUSE - vDPA Device in Userspace](https://lore.kernel.org/patchwork/cover/398912) | 本系列介绍了一个框架, 可用于在用户空间程序中实现 vDPA 设备. 该工作包括两部分: 控制路径转发和数据路径卸载.
1. 在控制路径中, VDUSE 驱动程序将利用消息机制将配置操作从 vdpa 总线驱动程序转发到用户空间. 用户空间可以使用 read()/write() 来接收/回复这些控制消息.
2. 在数据路径中, 核心是将 dma 缓冲区映射到 VDUSE 守护进程的地址空间, 这可以根据 vdpa 设备所连接的 vdpa 总线以不同的方式实现.
在 virtio-vdpa 的情况下, 我们实现了一个基于 mmu 的片上 IOMMU 驱动程序, 该驱动程序带有弹跳缓冲机制. 在vhost-vdpa的情况下, dma 缓冲区驻留在用户空间内存区域, 可以通过传输shmfd共享给VDUSE用户空间进程. | v2 ☐ | [PatchWork RFC,v2,00/13](https://patchwork.kernel.org/project/linux-mm/cover/20201222145221.711-1-xieyongji@bytedance.com) | +| 2020/12/22 | Xie Yongji | [Introduce VDUSE - vDPA Device in Userspace](https://lore.kernel.org/patchwork/cover/398912) | 本系列介绍了一个框架, 可用于在用户空间程序中实现 vDPA 设备. 该工作包括两部分: 控制路径转发和数据路径卸载.
1. 在控制路径中, VDUSE 驱动程序将利用消息机制将配置操作从 vdpa 总线驱动程序转发到用户空间. 用户空间可以使用 read()/write() 来接收 / 回复这些控制消息.
2. 在数据路径中, 核心是将 dma 缓冲区映射到 VDUSE 守护进程的地址空间, 这可以根据 vdpa 设备所连接的 vdpa 总线以不同的方式实现.
在 virtio-vdpa 的情况下, 我们实现了一个基于 mmu 的片上 IOMMU 驱动程序, 该驱动程序带有弹跳缓冲机制. 在 vhost-vdpa 的情况下, dma 缓冲区驻留在用户空间内存区域, 可以通过传输 shmfd 共享给 VDUSE 用户空间进程. | v2 ☐ | [PatchWork RFC,v2,00/13](https://patchwork.kernel.org/project/linux-mm/cover/20201222145221.711-1-xieyongji@bytedance.com) | # 3 IPA @@ -119,7 +119,7 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| -| 2020/12/22 | Xie Yongji | [kvm: arm64: Dynamic IPA and 52bit IPA](https://lore.kernel.org/patchwork/cover/992057) | arm/arm64 上 VM 的物理地址空间大小(IPA 大小)被限制为 40 位的静态限制. 这组补丁增加了对使用特定于 VM 的 IPA 大小的支持, 允许使用主机支持的大小(基于主机内核配置和 CPU 支持). | v6 ☐ | [PatchWork v6,00/18](https://lore.kernel.org/patchwork/cover/992057) | +| 2020/12/22 | Xie Yongji | [kvm: arm64: Dynamic IPA and 52bit IPA](https://lore.kernel.org/patchwork/cover/992057) | arm/arm64 上 VM 的物理地址空间大小 (IPA 大小) 被限制为 40 位的静态限制. 这组补丁增加了对使用特定于 VM 的 IPA 大小的支持, 允许使用主机支持的大小 (基于主机内核配置和 CPU 支持). | v6 ☐ | [PatchWork v6,00/18](https://lore.kernel.org/patchwork/cover/992057) | @@ -136,11 +136,11 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:----:|:---------:|:----:| | 2018/07/23 | Wanpeng Li / | [KVM: X86: Implement Exit-less IPIs support](https://patchwork.kernel.org/project/kvm/cover/1532327996-17619-1-git-send-email-wanpengli@tencent.com) | 对于 xAPIC/x2APIC 物理模式, 使用 hypercall 通过一个 vmexit 发送 ip, 而不是逐个发送, 对于 x2APIC 集群模式, 每个集群使用一个 vmexit. 在 qemu 中启用中断重映射时, Intel guest 可以进入 x2apic 集群模式, 而最新的 AMD EPYC 仍然只支持 xapic 模式, 而 xapic 模式可以通过无 exit IPIs 得到很大的改进. 这个补丁集允许 guest 发送多播 ip, 64 位模式下每个超级调用最多有 128 个目的地, 32 位模式下每个超级调用最多有 64 个 vcpu. | v5 ☑ 4.19-rc1 | [PatchWork v5,0/6](https://patchwork.kernel.org/project/kvm/cover/1562376411-3533-1-git-send-email-wanpengli@tencent.com) | -| 2019/07/06 | Wanpeng Li / | [KVM: LAPIC: Implement Exitless Timer](https://patchwork.kernel.org/project/kvm/cover/1562376411-3533-1-git-send-email-wanpengli@tencent.com) | KVM 实现 pi_inject_timer. 由于模拟的 lapic 定时器以及虚拟中断等总是在在 VCPU 驻留的 PCPU 上触发, 这会造成 pcpu 上的 vcpu 退出虚拟化(VMExit), 而执行 VMExit 的开销是非常大的. 这组补丁优化了虚拟 timer 中断的模拟流程, 把虚拟集中放到某些固定的 pcpu 上, 这样其他 pcpu 上的 vcpu 就不需要退出了. | v7 ☑ 5.3-rc1 | [PatchWork v7,0/2](https://patchwork.kernel.org/project/kvm/cover/1562376411-3533-1-git-send-email-wanpengli@tencent.com) | +| 2019/07/06 | Wanpeng Li / | [KVM: LAPIC: Implement Exitless Timer](https://patchwork.kernel.org/project/kvm/cover/1562376411-3533-1-git-send-email-wanpengli@tencent.com) | KVM 实现 pi_inject_timer. 由于模拟的 lapic 定时器以及虚拟中断等总是在在 VCPU 驻留的 PCPU 上触发, 这会造成 pcpu 上的 vcpu 退出虚拟化 (VMExit), 而执行 VMExit 的开销是非常大的. 这组补丁优化了虚拟 timer 中断的模拟流程, 把虚拟集中放到某些固定的 pcpu 上, 这样其他 pcpu 上的 vcpu 就不需要退出了. | v7 ☑ 5.3-rc1 | [PatchWork v7,0/2](https://patchwork.kernel.org/project/kvm/cover/1562376411-3533-1-git-send-email-wanpengli@tencent.com) | -# 5 VIRTIO-MEM +# 5 VIRTIO ------- @@ -151,7 +151,11 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 -# 6 Guest page hinting +# 6 Guest Memory +------- + + +## 6.1 Guest page hinting ------- [Guest page hinting](https://lwn.net/Articles/198380) @@ -161,6 +165,21 @@ jeremy很早就写了一个pv ticketlock, 原理大概就是vcpu在拿锁了一 | 2019/03/06 | Nitesh Narayan Lal | [mm: Support for page hinting](https://lkml.org/lkml/2019/7/10/742) | NA | v11 ☐ | [LWN RFC v9,0/6](https://lwn.net/Articles/782470), [LKML v11,0/2](https://lkml.org/lkml/2019/7/10/742) | | 2019/07/24 | Alexander Duyck | [mm / virtio: Provide support for page hinting](https://lwn.net/Articles/794540) | NA | v2 ☐ | [LKML v2,0/5](https://lwn.net/Articles/794540) | +## 6.2 TDX and guest memory +------- + +如果 TDX 开启, Host 内核不得允许对 TD 专用内存进行任何写入. 这一要求与 KVM 设计相冲突: KVM 希望 Guest 内存映射到 Host 的用户空间 (例如 QEMU). 这时如果 TDX 主机访问受 TDX 保护的客户内存, 可能会发生 Machine Check, 从而进一步导致运行中的 Host 系统 PANIC, 这对于多租户配置来说是非常糟糕的. 主机访问包括来自 KVM 用户空间 (如 QEMU) 的访问. + + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2022/10/26 | Huang, Kai | [TDX host kernel support](https://patchwork.kernel.org/project/linux-mm/cover/cover.1666824663.git.kai.huang@intel.com/) | 689199 | v6 ☐☑ | [LORE v6,0/21](https://lore.kernel.org/r/cover.1666824663.git.kai.huang@intel.com) | +| 2021/04/16 | Kirill A. Shutemov | [TDX and guest memory unmapping](https://lore.kernel.org/all/20210416154106.23721-1-kirill.shutemov@linux.intel.com) | 作者有意不考虑 TDX, 并尝试找到一种通用的方法来从主机用户空间取消 KVM 客户内存的映射. 借助页表中 PG_hwpoison 的页和 SWP_HWPOISON 的交换项:
1. 如果应用程序接触到 SWP_HWPOISON 映射的页面, 它将得到 SIGBUS.
2. 当我们将页面设置为 TD-private 时, 我们可以将页面标记为有毒的, 并用 SWP_HWPOISON 替换映射该页的所有 pte. | v1 ☐☑✓ | [LORE v1,0/13](https://lore.kernel.org/all/20210416154106.23721-1-kirill.shutemov@linux.intel.com) | +| 2021/08/23 | Sean Christopherson | [KVM: mm: fd-based approach for supporting KVM guest private memory](https://lore.kernel.org/all/20210824005248.200037-1-seanjc@google.com) | 这是 Kirill 的 RFC 的延续, 通过在 `struct page` 级别跟踪客户内存来支持 TDX 客户私有内存. 这个提案是由 Andy Lutomirksi 对通过 `struct page` 进行跟踪的担忧引发的几次离线讨论的结果. | v1 ☐☑✓ | [LORE](https://lore.kernel.org/all/20210824005248.200037-1-seanjc@google.com) | +| 2022/10/25 | Chao Peng | [KVM: mm: fd-based approach for supporting KVM](https://patchwork.kernel.org/project/linux-mm/cover/20221025151344.3784230-1-chao.p.peng@linux.intel.com/) | 用于机密计算场景 (如 [Intel TDX](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-trust-domain-extensions.html)) 的 KVM 客户私有内存. 本系列通过引入新的 mm 和 KVM 接口来解决 KVM 用户空间导致的崩溃问题, 因此 KVM 用户空间仍然可以通过基于 fd 的方法管理来宾内存, 但它永远不能访问来宾内存内容. | v9 ☐☑ | [LORE v9,0/8](https://lore.kernel.org/r/20221025151344.3784230-1-chao.p.peng@linux.intel.com) | + + # 7 ANDROID @@ -203,11 +222,11 @@ Anbox 使用 Linux 命名空间 (user, pid, uts, net, mount, ipc) 在容器中
-* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. +* 本作品 / 博文 ([AderStep - 紫夜阑珊 - 青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚 (gatieme)](http://blog.csdn.net/gatieme) 创作. -* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. +* 采用  知识共享许可协议 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名 [成坚 gatieme](http://blog.csdn.net/gatieme) (包含链接: http://blog.csdn.net/gatieme), 不得用于商业目的. * 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系. -* **转载请务必注明出处, 谢谢, 不胜感激** +* ** 转载请务必注明出处, 谢谢, 不胜感激 **