From 7981f4dbdd60ca23495434551124114f60bf1715 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Sat, 27 Sep 2025 14:48:33 +0800 Subject: [PATCH] description/virt: Guest vCPU --- study/kernel/00-DESCRIPTION/VIRT.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/study/kernel/00-DESCRIPTION/VIRT.md b/study/kernel/00-DESCRIPTION/VIRT.md index 14bbc56..d574b40 100644 --- a/study/kernel/00-DESCRIPTION/VIRT.md +++ b/study/kernel/00-DESCRIPTION/VIRT.md @@ -190,6 +190,17 @@ jeremy 很早就写了一个 pv ticketlock, 原理大概就是 vcpu 在拿锁了 | 2022/12/14 | Michael Roth | [Add AMD Secure Nested Paging (SEV-SNP) Hypervisor Support](https://patchwork.kernel.org/project/linux-mm/cover/20221214194056.161492-1-michael.roth@amd.com/) | 704568 | v7 ☐☑ | [LORE v7,0/64](https://lore.kernel.org/r/20221214194056.161492-1-michael.roth@amd.com) | +## 6.4 Memory Pressure +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:---:|:----:|:---:|:----:|:---------:|:----:| +| 2022/08/23 | Yosry Ahmed | [KVM: mm: count KVM mmu usage in memory stats](https://patchwork.kernel.org/project/linux-mm/cover/20220823004639.2387269-1-yosryahmed@google.com/) | 669960 | v7 ☐☑ | [LORE v7,0/4](https://lore.kernel.org/r/20220823004639.2387269-1-yosryahmed@google.com) | +| 2022/09/15 | Chao Peng | [KVM: mm: fd-based approach for supporting KVM](https://patchwork.kernel.org/project/linux-mm/cover/20220915142913.2213336-1-chao.p.peng@linux.intel.com/) | 677360 | v8 ☐☑ | [LORE v8,0/8](https://lore.kernel.org/r/20220915142913.2213336-1-chao.p.peng@linux.intel.com) | +| 2023/02/16 | Yu Zhao | [mm/kvm: lockless accessed bit harvest](https://lore.kernel.org/all/20230217041230.2417228-1-yuzhao@google.com) | [Linux Patches Improve KVM Guest Performance For Hosts Under Memory Pressure](https://www.phoronix.com/news/Linux-KVM-Lockless-Accessed-Bit) | v1 ☐☑✓ | [LORE v1,0/5](https://lore.kernel.org/all/20230217041230.2417228-1-yuzhao@google.com) | + + + # 7 ANDROID ------- @@ -210,15 +221,14 @@ Anbox 使用 Linux 命名空间 (user, pid, uts, net, mount, ipc) 在容器中 [Android apps on Linux with Waydroid](https://lwn.net/Articles/901459) - -# 8 MEMORY +# 8 Guest vCPU ------- | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:---:|:----:|:---:|:----:|:---------:|:----:| -| 2022/08/23 | Yosry Ahmed | [KVM: mm: count KVM mmu usage in memory stats](https://patchwork.kernel.org/project/linux-mm/cover/20220823004639.2387269-1-yosryahmed@google.com/) | 669960 | v7 ☐☑ | [LORE v7,0/4](https://lore.kernel.org/r/20220823004639.2387269-1-yosryahmed@google.com) | -| 2022/09/15 | Chao Peng | [KVM: mm: fd-based approach for supporting KVM](https://patchwork.kernel.org/project/linux-mm/cover/20220915142913.2213336-1-chao.p.peng@linux.intel.com/) | 677360 | v8 ☐☑ | [LORE v8,0/8](https://lore.kernel.org/r/20220915142913.2213336-1-chao.p.peng@linux.intel.com) | -| 2023/02/16 | Yu Zhao | [mm/kvm: lockless accessed bit harvest](https://lore.kernel.org/all/20230217041230.2417228-1-yuzhao@google.com) | [Linux Patches Improve KVM Guest Performance For Hosts Under Memory Pressure](https://www.phoronix.com/news/Linux-KVM-Lockless-Accessed-Bit) | v1 ☐☑✓ | [LORE v1,0/5](https://lore.kernel.org/all/20230217041230.2417228-1-yuzhao@google.com) | +| 2025/09/10 | Shrikanth Hegde | [paravirt CPUs and push task for less vCPU preemption](https://lore.kernel.org/all/20250910174210.1969750-1-sshegde@linux.ibm.com) | 通过引入"半虚拟化 CPU(Paravirt CPU)" 机制减少虚拟 CPU(vCPU) 抢占, 从而提升虚拟化环境下的任务调度效率和系统性能.
核心内容包括:
**目标**: 避免因 vCPU 抢占带来的上下文切换开销. 通过标记某些 vCPU 为 Paravirt CPU, 在系统资源紧张时不使用这些 CPU, 从而减少虚拟化环境中的任务迁移和上下文切换开销.

**实现要点**:
1. 引入 `cpu_paravirt_mask` 标记 Paravirt CPU.
2. 在调度器中避免将任务分配到 Paravirt CPU.
3. 使用 `push_current_from_paravirt_cpu` 将当前任务从 Paravirt CPU 推出.
4. 将相关功能整合进 `CONFIG_PARAVIRT` 选项, 减少 `CONFIG_HOTPLUG_CPU` 的依赖.
5. 添加 sysfs 接口用于配置 Paravirt CPU.
**性能测试结果**: 在多个虚拟机高负载竞争场景下, 相比传统 CPU 热插拔, Paravirt CPU 显著降低了任务唤醒延迟(如 99.9 百分位延迟从 6184us 降至 523us).
**待解决问题**:
1. 从 steal time 自动推导 Paravirt CPU 提示机制仍在开发中.
2. 需要 KVM 等虚拟化社区反馈如何获取提示.
3. irqbalance 需要适配 `cpu_paravirt_mask`.
4. 在 `nohz_full` CPU 上的行为仍需深入分析.

总结: 该补丁集通过引入 Paravirt CPU 机制, 实现了在虚拟化环境中减少 vCPU 抢占的目标, 提升了任务调度性能, 但仍需社区进一步反馈与完善提示机制. | v3 ☐☑✓ | [2025/09/10, LORE v3, 0/10](https://lore.kernel.org/all/20250910174210.1969750-1-sshegde@linux.ibm.com) | + + # 9 Migrate @@ -278,7 +288,7 @@ Anbox 使用 Linux 命名空间 (user, pid, uts, net, mount, ipc) 在容器中 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:---:|:----:|:---:|:----:|:---------:|:----:| -| 2020/04/29 | Javier Malave | [Popcorn Linux Distributed Thread Execution](https://lore.kernel.org/all/cover.1588127445.git.javier.malave@narfindustries.com) | 在 Linux 内核中引入 **Popcorn Linux 分布式线程执行** 支持. Popcorn Linux 是由 Virginia Tech 的研究团队开发, 基于 David Katz 的原始论文 [2013, Popcorn: a replicated-kernel OS based on Linux](https://www.kernel.org/doc/ols/2014/ols2014-barbalace.pdf) 和 [2013/05/31, Popcorn Linux: enabling efficient inter-core communication in a Linux-based multikernel operating system](https://vtechworks.lib.vt.edu/items/3c7e76a9-7be5-463c-8a86-79db7e900a63), 支持应用程序在多个主机上运行并动态迁移线程, 具备跨节点共享一致虚拟内存的能力.
补丁集基于 Linux 5.2 版本, 目前仅支持 x86 架构, 实现了一个软件级的分布式共享内存系统, 采用读复制/写失效机制维护内存一致性. 当前版本暂时关闭了 L1TF 缓解机制, 后续将予以支持. 同时, 补丁包含新的系统调用、消息层(基于 TCP 的 socket 实现) 、页面与虚拟内存管理服务等. 参见 LWN 报道 [LWN:引人眼球的Popcorn Linux能合入kernel吗?](https://blog.csdn.net/Linux_Everything/article/details/106247623), 仓库地址 [ssrg-vt/popcorn-kernel](https://github.com/ssrg-vt/popcorn-kernel) | v1 ☐☑✓ | [2020/04/29, LORE v1, 0/9](https://lore.kernel.org/all/cover.1588127445.git.javier.malave@narfindustries.com) | +| 2020/04/29 | Javier Malave | [Popcorn Linux Distributed Thread Execution](https://lore.kernel.org/all/cover.1588127445.git.javier.malave@narfindustries.com) | 在 Linux 内核中引入 **Popcorn Linux 分布式线程执行** 支持. Popcorn Linux 是由 Virginia Tech 的研究团队开发, 基于 David Katz 的原始论文 [2013, Popcorn: a replicated-kernel OS based on Linux](https://www.kernel.org/doc/ols/2014/ols2014-barbalace.pdf) 和 [2013/05/31, Popcorn Linux: enabling efficient inter-core communication in a Linux-based multikernel operating system](https://vtechworks.lib.vt.edu/items/3c7e76a9-7be5-463c-8a86-79db7e900a63), 支持应用程序在多个主机上运行并动态迁移线程, 具备跨节点共享一致虚拟内存的能力.
补丁集基于 Linux 5.2 版本, 目前仅支持 x86 架构, 实现了一个软件级的分布式共享内存系统, 采用读复制/写失效机制维护内存一致性. 当前版本暂时关闭了 L1TF 缓解机制, 后续将予以支持. 同时, 补丁包含新的系统调用、消息层(基于 TCP 的 socket 实现) 、页面与虚拟内存管理服务等. 参见 [phoronix, 2020/04/19, Virginia Tech's "Popcorn Linux" For Distributed Thread Execution Seeking Feedback, Possible Upstreaming](https://phoronix.com/news/Popcorn-Linux-2020-RFC), LWN 报道 [LWN:引人眼球的Popcorn Linux能合入kernel吗?](https://blog.csdn.net/Linux_Everything/article/details/106247623), 仓库地址 [ssrg-vt/popcorn-kernel](https://github.com/ssrg-vt/popcorn-kernel) | v1 ☐☑✓ | [2020/04/29, LORE v1, 0/9](https://lore.kernel.org/all/cover.1588127445.git.javier.malave@narfindustries.com) | | 2025/09/18 | Cong Wang
Multikernel Technologies Inc | [kernel: Introduce multikernel architecture support](https://lore.kernel.org/all/20250918222607.186488-1-xiyou.wangcong@gmail.com) | 引入"多内核架构(multikernel architecture)"支持的补丁集, 旨在使多个独立内核实例能够在同一台物理机上共存并通信. 每个多内核实例可绑定至特定 CPU 核心, 共享硬件资源, 通过增强的 kexec 子系统加载和管理.
主要特性包括: 改进工作负载间的故障隔离、增强安全性、比传统虚拟机更优的资源利用率, 以及支持通过 KHO 实现无宕机内核更新. 补丁集核心内容涵盖 kexec 支持多内核加载、x86 引导机制、通用 IPI 通信框架、物理 CPU ID 获取、动态 kimage 追踪及 `/proc` 接口. 参见 [phoronix, 2025/09/21, Multi-Kernel Architecture Proposed For The Linux Kernel](https://www.phoronix.com/news/Linux-Multi-Kernel-Patches) 和 [LWN, 20250923, Multiple kernels on a single system](https://lwn.net/Articles/1038847), [Multikernel Goes Open Source: Community-First Innovation](https://multikernel.io/2025/09/18/multikernel-goes-open-source/) | v1 ☐☑✓ | [2025/09/18, LORE v1, 0/7](https://lore.kernel.org/all/20250918222607.186488-1-xiyou.wangcong@gmail.com) | | 2025/09/23 | Fam Zheng | [parker: PARtitioned KERnel](https://lore.kernel.org/all/20250923153146.365015-1-fam.zheng@bytedance.com) | 字节提出了一项名为 **Parker( Partitioned Kernel)** 的新特性, 旨在支持在单一机器上同时运行多个 Linux 内核实例, 无需传统 KVM 虚拟化. 通过将 CPU、内存和设备资源分区, 由一个"启动内核"( Boot Kernel) 分配资源, 其他"应用内核"(Application Kernel) 各自使用专属资源, 彼此无共享、无通信, 提升可扩展性.
主要特点包括:
1. 使用 **kexec** 加载内核镜像至预留内存;
2. 通过 **kernfs** 提供配置接口;
3. 各内核可独立配置优化, 适配不同工作负载;
4. 目前缺乏硬件级隔离, 存在安全与容错风险.
Parker 适用于高核心数机器, 解决扩展性问题. 参见 [phoronix, 2025/09/23, Bytedance Proposes "Parker" For Linux: Multiple Kernels Running Simultaneously](https://www.phoronix.com/news/Linux-Parker-Proposal). | v1 ☐☑✓ | [2025/09/23, LORE v1, 0/5](https://lore.kernel.org/all/20250923153146.365015-1-fam.zheng@bytedance.com) |