Files
LDD-LinuxDeviceDrivers/study/kernel/00-DESCRIPTION/ARCH.md
T

46 KiB
Raw Blame History

title, date, author, tags, categories, thumbnail, blogexcerpt
title date author tags categories thumbnail blogexcerpt
ARCH 架构相关 2021-02-15 00:32 gatieme
linux
tools
技术积累
虚拟化 & KVM 子系统

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

知识共享许可协议

因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦

转载请务必注明出处, 谢谢, 不胜感激


日期 作者 GitHub CSDN BLOG
2021-02-15 成坚-gatieme AderXCoding/system/tools/fzf 使用模糊搜索神器 FZF 来提升办公体验 Using FZF to Improve Productivit

2 架构子系统

--------------- 重要功能和时间点 ---------------**

下文将按此目录分析 Linux 内核中 MM 的重要功能和引入版本:

--------------- 正文 ---------------**

1 X86_64


Intel® 64 and IA-32 Architectures Software Developer Manuals

1.1 架构新特性


时间 作者 特性 描述 是否合入主线 链接
2021/04/19 Fenghua Yu fenghua.yu@intel.com x86/bus_lock: Set rate limit for bus lock 当原子指令跨越多个 cache line, 并且需要确保原子性所需的总线锁时, 就会发生拆分锁. 这些拆分锁至少比单个 cacheline 内的原子操作多需要 1000 个 cycles. 在锁定总线期间, 其他 CPU 或 BUS 代理要求控制 BUS 的请求被阻止, 阻止其他 CPU 的 BUS 访问, 加上配置总线锁定协议的开销不仅会降低一个 CPU 的性能, 还会降低整体系统性能. 除了拆分锁的性能影响之外, 利用该行为还可能导致无特权的拒绝服务漏洞. 现代英特尔 CPU 可以在处理拆分锁时生成对齐检查异常, 使用此技术这组补丁为内核实现了拆分锁检测(split_lock_detect), 以警告或杀死违规应用. 默认行为是警告有问题的用户空间应用程序, 而如果配置了 split_lock_detect=fatal 内核参数将杀死使用 SIGBUS 的应用程序. 参考 phoronix1, phoronix2, phoronix3 v1 ☐ Patchwork 0/4
2020/01/19 Yu-cheng Yu yu-cheng.yu@intel.com Enable Sub-Page Write Protection Support 基于 EPT 的子页写保护(SPP) 允许虚拟机监视器(VMM)以子页(128字节)粒度为客户物理内存指定写权限. 当 SPP 工作时, 硬件强制对受保护的 4KB 页面中的子页面进行写访问检查. 该特性的目标是为内存保护和虚拟机内省等使用提供细粒度的内存保护. 当"子页面写保护"(第23位)在 Secondary VM-Execution Controls 中为1时, SPP 被启用. 该特性支持子页权限表(SPPT), 子页权限向量存储在SPPT的叶条目中. 根页面是通过VMCS中的子页面权限表指针(SPPTP)引用的.
要为 guest 内存启用 SPP, guest 页面应该首先映射到一个 4KB 的 EPT 条目, 然后设置相应条目的 SPP 的 61bit. 当硬件遍历 EPT 时, 它使用 gpa 遍历 SPPT 以查找 SPPT 叶子条目中的子页面权限向量. 如果设置了对应位, 则允许写子页, 否则产生 SPP 触发的 EPT 冲突.
v30 ☐ Patchwork v30,00/32

1.2 指令加速


时间 作者 特性 描述 是否合入主线 链接
2021/07/30 "Chang S. Bae" chang.seok.bae@intel.com x86: Support Intel Advanced Matrix Extensions 支持即将发布的英特尔高级矩阵扩展(AMX), AMX 由可配置的 TMM"TILE" 寄存器和操作它们的新 CPU 指令组成. TMUL (Tile matrix MULtiply)是第一个利用新寄存器的运算符, 我们预计将来会有更多的指令. v9 ☐ Patchwork v9,00/26
2021/07/20 Tianjia Zhang tianjia.zhang@linux.alibaba.com Introduce x86 assembler accelerated implementation for SM4 algorithm 该补丁集提取了公有 SM4 算法作为一个单独的库, 同时对 arm64 中 SM4 的加速实现进行了调整, 以适应该 SM4 库. 然后在 x86_64 上的进行了实现. 该优化支持 SM4、ECB、CBC、CFB 和 CTR 四种模式. 由于 CBC 和 CFB 不支持多块并行加密, 优化效果不明显. 主要算法实现来自 libgcrypt 和 Markku-Juhani O. Saarinen 的 SM4 AES-NI 工作. v1 ☐ LWN 0/2
2021/08/12 Tianjia Zhang tianjia.zhang@linux.alibaba.com support test GCM/CCM mode for SM4 NA v1 ☐ Patchwork 0/3, LKML
2021/08/18 Tianjia Zhang tianjia.zhang@linux.alibaba.com add AES-NI/AVX2/x86_64 implementation 这个补丁集导出了 SM4 AESNI/AVX 算法实现的一些常用函数, 并用这些函数实现 AESNI/AVX2 的加速.
主要算法实现来自 libgcrypt 和 Markku Juhani 的 SM4 AES-NI 工作.
v1 ☐ Patchwork 0/2

1.3 架构上新想法


时间 作者 特性 描述 是否合入主线 链接
2021/04/19 Fenghua Yu fenghua.yu@intel.com x86/bus_lock: Set rate limit for bus lock 当原子指令跨越多个 cache line, 并且需要确保原子性所需的总线锁时, 就会发生拆分锁. 这些拆分锁至少比单个 cacheline 内的原子操作多需要 1000 个 cycles. 在锁定总线期间, 其他 CPU 或 BUS 代理要求控制 BUS 的请求被阻止, 阻止其他 CPU 的 BUS 访问, 加上配置总线锁定协议的开销不仅会降低一个 CPU 的性能, 还会降低整体系统性能. 除了拆分锁的性能影响之外, 利用该行为还可能导致无特权的拒绝服务漏洞. 现代英特尔 CPU 可以在处理拆分锁时生成对齐检查异常, 使用此技术这组补丁为内核实现了拆分锁检测(split_lock_detect), 以警告或杀死违规应用. 默认行为是警告有问题的用户空间应用程序, 而如果配置了 split_lock_detect=fatal 内核参数将杀死使用 SIGBUS 的应用程序. 参考 phoronix1, phoronix2, phoronix3 v1 ☐ Patchwork 0/4
2021/09/13 Sohil Mehta sohil.mehta@intel.com x86 User Interrupts support 用户中断(Uintr)是一种硬件技术, 可以将中断直接传递到用户空间.
如今, 几乎所有跨越特权边界的通信都是通过内核进行的. 这些包括信号、管道、远程过程调用和基于硬件中断的通知. 用户中断通过避免通过内核的转换, 为这些常见操作的更高效(低延迟和低CPU利用率)版本提供了基础. 在用户中断硬件体系结构中, 接收者总是期望是用户空间任务. 但是, 用户中断可以由另一个用户空间任务、内核或外部源(如设备)发送. 除了接收用户中断的一般基础结构之外, 这组补丁还介绍了另一个用户任务的中断(用户 IPI). 用户 IPI 的第一个实现将在代号为 Sapphire Rapids 的英特尔处理器中实现. 有关硬件架构的详细信息, 请参阅英特尔架构指令集扩展的第11章.
v1 ☐ LWN RFC,00/13
-------
LWN
-------
Patchwork RFC,00/13
2021/10/04 Tvrtko Ursulin tvrtko.ursulin@linux.intel.com CPU + GPU synchronised priority scheduling Intel 在 CPU 和 GPU 协同调度领域进行了探索与尝试. v1 ☐ Patchwork RFC,0/6, LWN, LKML
-------
LKML v2,0/8, LWN news

1.4 让人眼前一亮的新架构


1.4.1 hybrid CPUs


Intel Architecture Day 2021, 官宣了自己的服务于终端和桌面场景的异构(或者混合架构)处理器架构 Alder Lake, 与 ARM 的 big.LITTLE 以及 DynamIQ 架构, 包含了基于 Golden Cove 微架构的性能核(P-core/Performance cores)以及基于新的 Gracemont 架构的能效核(E-core/Efficiency cores). P-core 优先用于需要低延迟的单线程任务, 而 E-core 在功率有限或多线程情景方面更好.

时间 作者 特性 描述 是否合入主线 链接
2020/10/02 Catalin Marinas catalin.marinas@arm.com x86: Add initial support to discover Intel hybrid CPUs 支持混合微架构的 CPU(Alder Lake CPU) v3 ☐ Patchwork 0/3
2021/05/12 Rafael J. Wysocki rafael.j.wysocki@intel.com cpufreq: intel_pstate: hybrid: CPU-specific scaling factors Hybrid CPU 的 P-state 增强 v1 ☑ 5.14-rc1 Patchwork 0/3
2021/02/08 Kan Liang kan.liang@linux.intel.com Add Alder Lake support for perf perf 支持 Hybrid CPU. v1 ☑ 5.14-rc1 LKML 00/49
2021/04/05 Kan Liang kan.liang@linux.intel.com Add Alder Lake support for perf (kernel) perf 支持 Hybrid CPU(内核态). v1 ☑ 5.13-rc1 LKML V5 00/25, LKML V3 00/25
2021/04/23 Kan Liang kan.liang@linux.intel.com perf tool: AlderLake hybrid support series 1 perf 支持 Hybrid CPU(内核态). v1 ☑ 5.13-rc1 LKML v5 00/26
2021/05/27 Kan Liang kan.liang@linux.intel.com perf: Support perf-mem/perf-c2c for AlderLake perf 支持 Hybrid CPU(内核态). v2 ☑ 5.14-rc1 LKML v1 0/8, LKML v2 0/8
2021/09/10 Ricardo Neri ricardo.neri-calderon@linux.intel.com sched/fair: Fix load balancing of SMT siblings with ASYM_PACKING 在使用非对称封装(ASM_PACKING)时, 可能存在具有三个优先级的 CPU 拓扑, 其中只有物理核心的子集支持 SMT. 这种架构下 ASM_PACKING 和 SMT 以及 load_balance 都存在冲突.
这种拓扑的一个实例是 Intel Alder Lake. 在 Alder Lake 上, 应该通过首先选择 Core(酷睿) cpu, 然后选择 Atoms, 最后再选择 Core 的 SMT 兄弟 cpu 来分散工作. 然而, 当前负载均衡器的行为与使用 ASYM_PACKING 时描述的不一致. 负载平衡器将选择高优先级的 CPU (Intel Core) 而不是中优先级的 CPU (Intel Atom), 然后将负载溢出到低优先级的 SMT 同级 CPU. 这使得中等优先级的 Atoms cpu 空闲, 而低优先级的 cpu sibling 繁忙.
1. 首先改善了 SMT 中 sibling cpu 优先级的计算方式, 它将比单个 core 优先级更低.
2. 当决定目标 CPU 是否可以从最繁忙的 CPU 提取任务时, 还检查执行负载平衡的 CPU 和最繁忙的候选组的 SMT 同级 CPU 的空闲状态.
v5 ☑ 5.16-rc1 PatchWork v1
-------
PatchWork v2
-------
PatchWork v3 0/6
-------
PatchWork v4,0/6
-------
LKML v5,0/6, LORE v5,0/6
2021/11/19 Srinivas Pandruvada srinivas.pandruvada@linux.intel.com cpufreq: intel_pstate: ITMT support for overclocked system Intel ITMT (Intel Turbo Boost Max Technology) 感知混合架构, Alder Lake CPU 上 P-Core/E-core 优先级应该有不同的值(P-core 0x40, P-core HT sibling 0x10, E-core 0x26). v1 ☐ Patchwork
2021/11/06 Ricardo Neri <ricardo.neri-calderon-AT-linux.intel.com> Thermal: Introduce the Hardware Feedback Interface for thermal and performance management 支持 Intel HFI.
英特尔硬件反馈接口(HFI) 提供系统中每个 CPU 的性能(performance)和能效(Energy efficiency)的信息. 它使用一个在硬件和操作系统之间共享的表. 该表的内容可能由于系统运行条件的变化(如达到热极限)或外部因素的作用(如热设计功率的变化)而更新.
HFI 提供的信息被指定为相对于系统中其他 cpu 的数字、单元较少的能力. 这些功能的范围为 [0-255], 其中更高的数字表示更高的功能. 如果 CPU 的性能效率或能量能力效率为 0, 硬件建议分别出于性能、能量效率或热原因, 不要在该 CPU 上调度任何任务.
内核或用户空间可以使用来自 HFI 的信息来修改任务放置或调整功率限制. 当前这个补丁集中于用户空间. 热通知框架(thermal notification framework)被扩展以支持 CPU capacity 的更新.
v1 ☐ LWN
-------
Patchwork

性能评测

Intel Core I9-12900K VS I5-12600K

The Intel 12th Gen Core i9-12900K Review: Hybrid Performance Brings Hybrid Complexity

Intel Alder Lake CPU 支持 AVX 512

Intel Alder Lake Question (Scheduler)

Intel Core i9 12900K "Alder Lake" AVX-512 On Linux

编译器支持

Intel Updates Alder Lake Tuning For GCC, Reaffirms No Official AVX-512

调度器优化

为了更好的发挥这种混合架构的优势, Intel 提供了一项名为 Thread Director 的技术, 专利分析 The Alder Lake hardware scheduler A brief overview

  1. 首席按通过机器学习算法对进程在 P-core/E-core 的性能和功耗进行分析和建模, 识别进程特征, 从而可以预测出不同类型进程或者进程某段时期在 P/E core 上的能效关系.

  2. 硬件将进程的运行能效换算后, 直接填写到内存中. 当进程在 P/E core 上运行时负责某种规则时(比如进程行为特征发生变化, 即能效发生变化), 直接通知 OS/Kernel 调度器进行决策, 以达到最好的能效.

1.5 RAPL


RUNNING AVERAGE POWER LIMIT RAPL

Understanding Intel's RAPL Driver On Linux

1.6 安全相关


1.6.1 SGX(Intel Software Guard eXtensions ,英特尔软件保护扩展)


2013 年, Intel 推出 SGX(software guard extensions) 指令集扩展, 能创造出一个可信执行环境来保护代码和数据, 即使 root 权限也无法访问. 这样应用程序可以使用它来隔离代码和数据的特定可信区域, 防止底层OS被 compromise 以后对自己的攻击, 同时在软件的管理上也可以不用信任云供应商. 比较符合当前要解决的云计算安全问题, 比如给安全敏感服务存放密钥等.

SGX 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软件的破坏.

不同于其他安全技术, SGX 可信计算(trusted computing base, 简称TCB) 仅包括硬件, 避免了基于软件的 TCB 自身存在软件安全漏洞与威胁的缺陷, 极大地提升了系统安全保障; 此外, SGX可保障运行时的可信执行环境, 恶意代码无法访问与篡改其他程序运行时的保护内容, 进一步增强了系统的安全性; 基于指令集的扩展与独立的认证方式, 使得应用程序可以灵活调用这一安全功能并进行验证.作为系统安全领域的重大研究进展, Intel SGX是基于CPU的新一代硬件安全机制, 其健壮、可信、灵活的安全功能与硬件扩展的性能保证, 使得这项技术具有广阔的应用空间与发展前景.目前, 学术界和工业界已经对SGX技术展开了广泛的研究, Intel也在其最新的第六代CPU中加入了对SGX的支持.

SGX技术的分析和研究

时间 作者 特性 描述 是否合入主线 链接
2021/11/02 Catalin Marinas catalin.marinas@arm.com Basic recovery for machine checks inside SGX 支持混合微架构的 CPU(Alder Lake CPU) v11 ☐ Patchwork v11,0/7

1.6.2 CET


New Linux Patch Series Provides A Fresh Take On Intel Indirect Branch Tracking

时间 作者 特性 描述 是否合入主线 链接
2021/08/30 Yu-cheng Yu yu-cheng.yu@intel.com Control-flow Enforcement: Shadow Stack 控制流执行(CET) 是英特尔处理器的一个新特性, 它可以阻止面向返回/跳转的编程攻击. 详情见 "Intel 64 and IA-32架构软件开发人员手册". CET 可以保护应用程序和内核. 这是 CET 的第一部分, 本系列仅支持应用程序级保护, 并进一步分为阴影堆栈和间接分支跟踪. v30 ☐ Patchwork v30,00/32
2021/08/30 Yu-cheng Yu yu-cheng.yu@intel.com Control-flow Enforcement: Indirect Branch Tracking 控制流执行(CET) 是英特尔处理器的一个新特性, 它可以阻止面向返回/跳转的编程攻击. 详情见 "Intel 64 and IA-32架构软件开发人员手册". 这是 CET 的第二部分, 支持间接分支跟踪(IBT). 它是建立在阴影堆栈系列之上的. v1 ☐ Patchwork v30,00/10
2021/11/22 Peter Zijlstra peterz@infradead.org x86: Kernel IBT beginnings IBT 的基础支持, 功能不完整, 但是够精简, 引入 CONFIG_X86_IBT 控制, 添加了 X86_IBT build 选项, 为编译器启用了 "-fcf-protection=branch" 支持, 并支持 objtool, 用于为可能的间接分支目标添加 ENDBR 指令以及内核入口点添加了 ENDBR 结束分支指令. v11 ☐ Patchwork v11,0/7

1.7 AMD


时间 作者 特性 描述 是否合入主线 链接
2021/11/10 Brijesh Singh brijesh.singh@amd.com Add AMD Secure Nested Paging (SEV-SNP) Guest Support Guest 支持 AMD SEV SNP. v7 ☐ Patchwork v7,00/45

2 ARM64


Memory Layout on AArch64 Linux

时间 作者 特性 描述 是否合入主线 链接
2012/09/17 Catalin Marinas catalin.marinas@arm.com AArch64 Linux kernel port 支持 ARM64 v3 ☑ 3.7-rc1 Patchwork v4,0/2

2.1 DEBUG


时间 作者 特性 描述 是否合入主线 链接
2021/08/18 Tianjia Zhang tianjia.zhang@linux.alibaba.com arm64: Enable OPTPROBE for arm64 这个补丁集导出了 SM4 AESNI/AVX 算法实现的一些常用函数, 并用这些函数实现 AESNI/AVX2 的加速.
主要算法实现来自 libgcrypt 和 Markku Juhani 的 SM4 AES-NI 工作.
v4 ☐ Patchwork v4,0/2

2.2 TLB


郭健: 进程切换分析之——TLB处理

2.2.1 TLB range


时间 作者 特性 描述 是否合入主线 链接
2020/06/25 Tianjia Zhang tianjia.zhang@linux.alibaba.com arm64: tlb: add support for TTL feature 为了降低 TLB 失效的成本, ARMv8.4 在 TLBI 指令中提供了 TTL 字段. TTL 字段表示保存被失效地址的叶条目的页表遍历级别. 这组补丁实现了对 TTL 的支持. v4 ☑ 5.9-rc1 Patchwork RESEND,v5,0/6
2020/07/15 Zhenyu Ye yezhenyu2@huawei.com arm64: tlb: Use the TLBI RANGE feature in arm64 为 ARM64 实现 CONFIG_ARM64_TLB_RANGE, 在实现了 ARM64_HAS_TLB_RANGE 的机器上使用此 feature 实现了 __flush_tlb_range() v3 ☑ 5.9-rc1 2020/07/08 PatchWork RFC,v5,0/2
-------
2020/07/09 PatchWork v1,0/2
-------
2020/07/10 PatchWork v2,0/2
-------
2020/07/15 Patchwork v3,0/3

2.2.2 ASID


arm linux 的 ASID (Address Space ID)

ARMv8 ARM64 架构中 ASID

多核 MMU 和 ASID 管理逻辑

TLB 中 ASID 和 nG bit 的关系

2.2.3 TLB Shootdown


arm64 中的 TLB 失效指令

arm64 架构提供了一条 TLB 失效指令:

TLBI <type><level>{IS}, {, <Xt>}
字段 描述
type 指定了刷新规则, 即只刷新满足特定条件的 tlb 表项, 例如 all 表示所有表项, vmall 表示当前虚拟机的阶段 1 1 的所有表项, asid 表示匹配寄存器 Xt 指定的 ASID 的表项, va 匹配寄存器 Xt 指定的虚拟地址和 ASID 的表项, 等等.
level 异常级别, 取值有: E1、E2、E3.
IS 表示内部共享, 即多个核共享, 如果不使用 IS 字段, 则表示非共享, 只被一个核使用.
Xt 表示 X0 ~ X31 中的任何一个寄存器.

TLB entry shootdown 常常或多或少的带来一些性能问题.

Ptlbmalloc2: Reducing TLB Shootdowns with High Memory Efficiency Torwards a more Scalable KVM Hypervisor

TLB flush 操作 进程切换分析(2):TLB 处理

stackoverflow: What is tlb shootdown ?

深入理解 Linux 内核--jemalloc 引起的 TLB shootdown 及优化

在多核系统中, 进程可以调度到任何一个 CPU 上执行, 从而导致 task 处处留情. 如果 CPU 支持 PCID 并且在进程切换的时候不 flush tlb, 那么系统中各个 CPU 中的 tlb entry 则保留各种 task 的 tlb entry, 当在某个 CPU 上, 一个进程被销毁, 或者修改了自己的页表(修改了VA PA映射关系)的时候, 我们必须将该 task 的相关 tlb entry 从系统中清除出去. 这时候, 不仅仅需要 flush 本 CPU 上对应的 TLB entry, 还需要 shootdown 其他 CPU 上的和该 task 相关的 tlb 残余.

通知其他 CPU shootdown 到指定 task 的 TLB entry 有两种方式: 广播 和 IPI.

  1. 广播的方式, 当进程销毁或者页表修改时, 则本地 CPU 通过广播的方式将请求发送出去. 各个 CPU 接受到请求之后, 如果 TLB 中包含了对应的 TLB entry, 则 flush, 否则则抛弃此请求. 这种方式主要由硬件参与完成, 在 shootdown 请求比较少的时候, 硬件处理及时且迅速, 开销也小.

  2. IPI 的方式, 需要先由软件(内核)识别到哪些 CPU 中包含了这些需要 flush 的 TLB entry, 然后由本地 CPU 通过 IPI 请求的方式, 通知对应的 CPU 进行 shootdown 操作. 这种方式由硬件软件交互完成, 在 CPU 核数比较多, 且shootdown 请求比较多的时候, 可能造成 TLB entry shootdown 广播风暴, 硬件(NM)处理不过来, 造成性能下降. 此时对于单个 task 的 TLB entry 来说, 残留的 CPU 往往是明确且有限的, 通过 IPI 的方式, 给硬件压力反而会小很多, 这时采用 IPI 的方式性能反而会好.

时间 作者 特性 描述 是否合入主线 链接
2015/07/11 David Daney ddaney.cavm@gmail.com/david.daney@cavium.com arm64, mm: Use IPIs for TLB invalidation. 在 Cavium ThunderX (ARM64) 的机器上, 某些场景下不能使用广播 TLB, TLB 广播风暴会导致严重的性能问题, 所以我们在必要时使用 IPIs. 测试发现, 它还使内核构建的速度更快. v1 ☐ Patchwork 0/3
2016/08/04 Matthias Brugger mbrugger@suse.com arm64, mm: Use IPIs for TLB invalidation. NA v1 ☐ Patchwork 2/4
2020/11/03 Nianyao Tang tangnianyao@huawei.com KVM: arm64: Don't force broadcast tlbi when guest is running KVM 当 guest 在运行的时候, 避免 tlbi 广播. RFC v1 ☐ Patchwork RTC
2019/06/17 Takao Indoh indou.takao@jp.fujitsu.com arm64: Introduce boot parameter to disable TLB flush instruction within the same inner shareable domain 富士通的开发人员发现 ARM64 TLB.IS 广播在 HPC 上造成了严重的性能下降, 因此新增一个 disable_tlbflush_is 参数来禁用 TLB.IS 广播, 使用原始的 TLB IPI 方式. RFC v1 ☐ Patchwork 0/2, LORE
2016/10/24 Marc Zyngier marc.zyngier@arm.com arm/arm64: KVM: Perform local TLB invalidation when multiplexing vcpus on a single CPU KVM 当 guest 在运行的时候, 避免 tlbi 广播. RFC v1 ☐ Patchwork RTC

注: x86 由于没有 tlb IS 方案, 因此只能采用 IPI 的方式来完成 TLB shootdown.

目前 ARM64 中 TLUSH TLB 的接口:

接口 描述
flush_tlb_all 无效掉所有的 TLB entry.(包括内核的和用户态的)
flush_tlb_mm 无效掉 mm_struct 指向的所有 TLB entry.
1. mm_struct 指向的都是进程的用户态空间.
2. ARM64 上每个 mm_struct 有自己单独的 ASID. 当前只需要对指定的 ASID 执行 TLB.IS 即可
flush_tlb_range 无效掉用户态地址 start ~ end 区间内的所有 tlb entry
flush_tlb_kernel_range 无效掉内核态 start ~ end 区间内的所有 TLB entry
local_flush_tlb_all 无效掉本 CPU 上所有的 TLB entry. 无需使用 TLB.IS

2.3 指令加速


2.3.1 LSE


时间 作者 特性 描述 是否合入主线 链接
2015/07/24 Will Deacon will.deacon@arm.com arm64: support for 8.1 LSE atomic instructions 为 Linux 内核添加了对新原子指令(LSE atomic instructions)的支持, 这是作为 ARMv8.1 中大系统扩展(LSE-LSE atomic instructions)的一部分引入的. 新的指令可以在编译时通过 CONFIG_ARM64_LSE_ATOMICS 选项配置出来.
之前测试发现, 核少的时候关 LSE 性能更好, 核多的时候, 开 LSE 性能更好.
v1 ☑ 4.3-rc1 2015/07/13 Patchwork 00/18
-------
2015/07/24 Patchwork v2,07/20

2.3.2 SVE


时间 作者 特性 描述 是否合入主线 链接
2017/10/30 Mark Brown broonie@kernel.org ARM Scalable Vector Extension (SVE) SVE 指令的支持. 目前不支持 KVM guest 使用 SVE 指令. 这种将被捕获并作为未定义的指令执行反映给 guest. SVE 在 guest 可见的 CPU 功能寄存器视图中是隐藏的, 因此 guest 不会期望它工作. v4 ☑ 4.15-rc1 Patchwork v4,00/28
-------
Patchwork v5,01/30
2019/03/29 Mark Brown broonie@kernel.org KVM: arm64: SVE guest support KVM guest SVE 指令的支持. v7 ☑ 5.2-rc1 Patchwork v7,00/27
2019/04/18 Mark Brown broonie@kernel.org KVM: arm64: SVE cleanups KVM guest SVE 指令的支持. v2 ☑ 5.2-rc1 Patchwork v2,00/14
2019/04/18 Mark Brown broonie@kernel.org arm64: Expose SVE2 features for userspace 支持向用户空间报告 SVE2 的存在及其可选功能. 同时为 KVM 虚拟化 guest 提供了 SVE2 的可见性. v2 ☑ 5.2-rc1 Patchwork v2,00/14

2.3.3 SME

时间 作者 特性 描述 是否合入主线 链接
2021/10/27 Mark Brown broonie@kernel.org arm64/sme: Initial support for the Scalable Matrix Extension SME 指令的支持. v5 ☐ 2021/10/27 Patchwork v5,00/38
-------
2015/07/24 Patchwork v2,07/20

2.4 pseudo-NMI


时间 作者 特性 描述 是否合入主线 链接
2019/01/31 Julien Thierry julien.thierry@arm.com arm64: provide pseudo NMI with GICv3 ARM64 通过中断优先级实现(伪)NMI v10 ☑ 5.1-rc1 Patchwork v10,00/25, 关键 commit
2019/06/11 Julien Thierry julien.thierry@arm.com arm64: IRQ priority masking and Pseudo-NMI fixes 修复伪 NMI 的诸多问题 v4 ☑ 5.10-rc1 Patchwork v4,0/8
2019/07/17 Julien Thierry julien.thierry@arm.com arm_pmu: Use NMI for perf interrupt ARM64 perf 的中断通过伪 NMI 上报, 这样会使 perf 的热点采样更加精准. v4 ☑ 5.10-rc1 Patchwork v4,0/9

2.5 PAN


armv8/arm64 PAN 深入分析

2.6 PAC


2016 年 10 月, ARMV8.3-A 指令集中加入了指针认证(Pointer Authentication)机制, 在使用寄存器的值作为指针访问数据或代码之前验证其内容, 目的是为了对抗 ROP/JOP 攻击.

ARM pointer authentication 开源快递: ARM 指针身份认证 (arm pointer authentication)

时间 作者 特性 描述 是否合入主线 链接
2018/12/07 Kristina Martsenko kristina.martsenko@arm.com ARMv8.3 pointer authentication userspace support RISC-V高级核心本地中断(Advacned Core Local Interruptor-ACLINT) 支持 v8 ☐ Patchwork v5,00/17
-------
Patchwork v6,00/13
2019/03/19 Kristina Martsenko kristina.martsenko@arm.com arm64: pac: Optimize kernel entry/exit key installation code paths PAC 合入后, svc(SYSCALL) 进入和退出以及进程切换的过程中, 会进行 key 的切换, 会存在 10+ 个 MSR 操作, 因此造成了性能劣化. v8 ☑ 5.13-rc1 Patchwork v8,3/3
-------
commit

2.7 Linux to Apple Silicon Macs


目前有两个团队在做这块工作

corellium/linux-m1

AsahiLinux/linux

3 RISC-V


时间 作者 特性 描述 是否合入主线 链接
2021/06/10 Anup Patel anup.patel@wdc.com RISC-V CPU Idle Support RISC-V高级核心本地中断(Advacned Core Local Interruptor-ACLINT) 支持 v8 ☐ 2021/06/10Patchwork v7,0/8
-------
LWN v8, 0/8
2021/08/30 Anup Patel anup.patel@wdc.com Linux RISC-V ACLINT Support RISC-V高级核心本地中断(Advacned Core Local Interruptor-ACLINT) 支持 v3 ☐ Patchwork RFC,v3,00/11

4 CPU 漏洞


4.1 Straight Line Speculation


Google 的 SafeSide 小组发现 ARM CPU 存在新的投机执行漏洞, 可导致侧信道攻击. 研究人员在 Armv8-A(Cortex-A) CPU 体系结构中发现了一个名为直线推测( Straight-Line Speculation , SLS) 的新漏洞, 被追踪为 CVE-2020-13844. 该漏洞可导致攻击者对 ARM 架构处理器进行侧边信道攻击(SCA).

让目标处理器通过预先访问数据来提升性能, 然后再扔掉所有使用过的计算分支(computational branches), 而 SLS 则通过类似的侧道攻击就能让黑客从处理器直接获得(窃取)重要数据.

SLS 被认为是 Spectre 漏洞的变体, 但二者的攻击范围略有不同, SLS 漏洞仅影响 Arm Armv-A 处理器, 而 Spectre 漏洞影响所有主要芯片制造商的 CPU. 到目前为止, 该漏洞还没有在野利用.

Arm CPUs Hit By Straight Line Speculation Vulnerability, LLVM Adds Initial Mitigation

很快在 GCCLLVM 编译器中推出了针对 SLS 的保障措施, 通过在易受 SLS 影响的指令周围插入投机障碍(SB)指令或其他 DSB + ISB 指令来减少直线预测.

LLVM Adds Additional Protections For Arm's SLS Speculation Vulnerability Mitigation

11 月 17 日, 将 x86/x86_64 的 SLS 缓解选项 -mharden-SLS 合并到 GCC 12 Git 上,预计不久将推出内核补丁,将 -mharden-SLS 缓解选项作为对 x86 cpu 最新的安全保护. 这个选项包括 none、all、return 或 indirect-branch 四个值, x86/x86_64 架构上的原理是通过在函数返回和间接分支之后添加 INT3 断点指令, 来减少函数返回和间接分支的直线推测(SLS). 参见 Linux + GCC/Clang Patches Coming For Straight-Line Speculation Mitigation On x86/x86_64.

时间 作者 特性 描述 是否合入主线 链接
2021/06/10 Anup Patel anup.patel@wdc.com ARM: Implement Clang's SLS mitigation RISC-V高级核心本地中断(Advacned Core Local Interruptor-ACLINT) 支持 v8 ☐ 2021/06/10Patchwork v7,0/8
-------
LWN v8, 0/8

4.2 Control-Flow Enforcement Technology (CET)


5 benchmark


用于评价 CPU 性能指标的标准主要有三种: Dhrystone、MIPS、CoreMark.

20 世纪 70-80 年代开始流行的几个性能测试标准, 它们分别是 Livermore、Whetstone、Linpack、Dhrystone, 这四个性能测试标准也被合称为 Classic Benchmark. 这个网址简单介绍了四大经典性能测试标准历史 http://www.roylongbottom.org.uk/classic.htm.

Magisk-Modules-Repo/benchkit 项目汇总整理了 Android/Linux 上非常多的 benchmarks

Linux Benchmark Suite Homepage