Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Arm Memory Tagging Extension

Arm Memory Tagging Extension

作者头像
用户9732312
发布于 2022-05-13 13:41:46
发布于 2022-05-13 13:41:46
1.8K0
举报
文章被收录于专栏:ADAS性能优化ADAS性能优化

硬件解决方案

Arm MTE(内存标记)作为Armv8.5指令集的一部分引入。MTE现在内置于Arm 最近宣布的符合Armv9 的 CPU 中,例如 Cortex-X2、Cortex-A710 和Cortex-A510。未来基于Armv9 的 CPU 也将集成 MTE。

内存标记背后的想法非常简单:将一些位(4bit)添加到内存块中,以标识应用程序对内存的使用是安全的。Arm将内存标记实现为两阶段系统,也称为锁和钥匙:

  • 地址标记。在进程中的每个指针的顶部添加四bit校验位(59-56)。地址标记仅适用于 64 位应用程序,因为它使用ARM64 feature TBI (top-byte-ignore)。地址标签充当虚拟“key”。
  • 内存标记。内存标签也由四位组成,在应用程序使用的物理内存中16字节对齐。这四bit不用于应用程序数据,而是单独存储。内存标签是“lock”。

虚拟地址标签(key)必须与内存标签(lock)匹配。否则,会发生错误。

软件解决方案

基于软件的解决方案,包括Address Sanitizer (Asan)和HWASAN,通过将内存损坏检测集成到现代编译器中来帮助缓解这些内存问题。但是Asan/HWASAN需要向应用程序代码添加软件工具,这会显着减慢应用程序运行时间并增加内存使用量,尤其是在移动和嵌入式系统中但由于明显的开销,它们在当前硬件上的适用性受到限制。

MTE 底层架构

Armv8.5 和 v9 实现了一种新的内存类型,Arm 将其称为 Normal Tagged Memory。CPU可以通过将地址标签与相应的内存标签进行比较来确定内存访问的安全性。开发人员可以选择标签不匹配是否导致同步异常或异步报告,从而允许应用程序继续。

异步方式将把不匹配的key和lock 记录系统寄存器中。操作系统可以隔离把这些异常,并可以根据当前执行运行的程序来决策是否采用特定异常线程来执行。

同步异常直接处理key和lock 不匹配的指令和数据。

Arm 向指令集中添加了各种新指令,用于操作tag、处理指针和堆栈标记,以及供low-level的系统使用。

MTE 在硬件中处理;加载和存储指令已被修改以验证地址标签与内存标签匹配,硬件内存分配确保地址和内存标签创建的随机化。这对操作系统开发人员和最终用户应用程序程序员有不同的影响。

Arm 增强了其AMBA 5 相干互连以支持MTE。标签检查逻辑通常内置于系统级缓存中,标签检查和标签缓存发生在DRAM 接口之前。

必须修改操作系统才能完全支持MTE。Arm 最初通过创建实现标签的 Linux 内核版本来构建 MTE 原型。Android也supportMTE。

假设操作系统支持MTE,最终用户应用程序开发人员会更容易一些。由于MTE 发生在操作系统和硬件的幕后,应用程序不需要修改源代码。堆内存的MTE 标记不需要额外的努力。但是,使用堆栈内存在现有运行时标记内存需要编译器支持,因此需要重新编译现有二进制文件。

MTE Linux Kernel

Linux 内核对 MTE 的支持目前正在Linux 内核开发

内核 ABI 已被修改为允许在指针的顶部字节(“顶部字节忽略”或 TBI)中传递标记。Linux 现在要求用户空间在当前 ABI(将用户空间指针传递给内核时要求最高字节为 0)和传递标记指针之间进行选择。软件 HWASAN 功能和 Arm MTE 都需要对宽松 ABI 的支持,并且已在内核 v5.4 中合并。文档在这里:https : //www.kernel.org/doc/html/latest/arm64/tagged-address-abi.html

此处正在积极开发对MTE 用户空间的 arm64 内核支持

https://lore.kernel.org/linux-arm-kernel/20200703153718.16973-1-catalin.marinas@arm.com/

MTE in android

Android 11 (R) 中已经使用了TBI,详见https://source.android.com/devices/tech/debug/tagged-pointers

Android memory的分配采用支持由scudo来supportMTE.

scudo: Add initial memorytagging support.

When the hardware and operating system support the ARM Memory Tagging Extension, tag primary allocation granules with a random tag. The granules either side of the allocation are tagged with tag 0, which is normally excluded from the set of tags that may be selected randomly. Memory is also retagged with a random tag when it is freed, and we opportunistically reuse the new tag when the block is reused to reduce overhead. This causes linear buffer overflows to be caught deterministically and non-linear buffer overflows and use-after-free to be caught probabilistically.

This feature is currently only enabled for the Android allocator and depends on an experimental Linux kernel branch available here: https://github.com/pcc/linux/tree/android-experimental-mte

All code that depends on the kernel branch is hidden behind a macro, ANDROID_EXPERIMENTAL_MTE. This is the same macro that is used by the Android platform and may only be defined in non-production configurations. When the userspace interface is finalized the code will be updated to use the stable interface and all #ifdef ANDROID_EXPERIMENTAL_MTE will be removed.

堆栈标记已在clang(LLVM C 编译器)中实现,并在LLVM 9.0 中可用

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android 联手 Arm 击退内存漏洞
Google 一直致力于提升 Android 生态圈的安全防护水平,作为我们在安全方面的长期工作之一,我们携手 Arm 公司共同研发出了内存标记扩展 (Memory Tagging Extension, 简称 MTE)。内存安全漏洞 (常见于 C/C++ 程序) 目前仍旧是 Android 平台最大的安全隐患之一,尽管 Google 此前已投入大量努力对平台安全进行升级,但是,内存安全漏洞依旧占有 Android 9 高风险级漏洞的一半以上。而且,此类漏洞通常以难以诊断的可靠性问题出现,如偶发性崩溃和无法追踪的数据损坏,致使用户满意度下降,同时增加软件的开发成本。ASAN 和 HWASAN 等软件测试工具确实有一定帮助,但是它们的运行负载较高,因此在硬件安全方面的应用并不普及。
Android 开发者
2022/09/21
6040
Android 联手 Arm 击退内存漏洞
ARM十年磨一剑,v9新架构会重构CPU市场吗?
近日,ARM正式宣布推出ARMv9架构。据ARM官方称,这是10年来最重要的创新,是未来3000亿ARM芯片的基础。
科技云报道
2022/04/16
1K0
ARM十年磨一剑,v9新架构会重构CPU市场吗?
边缘战争升温,Arm旨在超越英特尔和高通
Arm 的 v9 平台通过数十亿参数的 AI 模型、微控制器的消除以及与领先框架的无缝集成,重新定义了边缘计算,为将 AI 推向极致边缘的开发者提供了支持。
云云众生s
2025/03/05
690
边缘战争升温,Arm旨在超越英特尔和高通
ARM 公布全新 Armv9 架构:10 年最大更新、不受制于美国出口管理条例
当今世界正处于快速变革之中,而变革的主要焦点就在于人工智能的发展,人工智能的发展又离不开算力、算法和大数据,算力的发展更离不开芯片的进步,近日 Arm 最新架构Armv9 正式推出,Arm 希望这个架构在未来十年可以成为下一代 3000 亿颗芯片计算平台的基础,也就是说 Armv9 将改变当下芯片格局,并让整个时代的算力有质的飞跃。
用户7454708
2023/05/08
5.5K0
ARM 公布全新 Armv9 架构:10 年最大更新、不受制于美国出口管理条例
[core]-ARMV7-A、ARMV8-A、ARMV9-A 架构简介「建议收藏」
Armv9-A 架构建立在 Armv8-A 架构的基础上并向前兼容。 Armv9-A 架构构成了 Arm 基础系统架构的基础——该规范概述了一种标准,可确保硬件和固件在系统级的广泛应用中具有兼容性。
全栈程序员站长
2022/07/31
2.4K0
ARM CPU Cortex-X3,Cortex-A715,Cortex-A510 | GPU Immortalis-G715
去年5月,Arm发布了第一代基于64位ARMv9指令集的处理器IP:超大核心Cortex-X2、高性能大核心Cortex-A710,高能效小核心Cortex-A510。同时,Arm还发布了三款Mali GPU IP——ARM Mali GPU | G710、G610、G510、G310。
数字芯片社区
2022/09/19
2.1K0
ARM CPU Cortex-X3,Cortex-A715,Cortex-A510 | GPU Immortalis-G715
使用QEMU搭建ARM64实验环境
对于Linux爱好者,你是否也有这样的困扰,为了学习Linux而去购买昂贵的开发版,这大可不必,QEMU模拟器几乎可以满足你的需求,足够你去学习Linux,它能够模拟x86, arm, riscv等各种处理器架构,本文将向你呈现的不是QEMU/虚拟化的原理解读,而是如何搭建一个用于学习linux的QEMU环境,当然对于Linux内核的学习这已经足够了。
用户7244416
2021/08/06
3.4K1
ASAN和HWASAN原理解析
由于虚拟机的存在,Android应用开发者们通常不用考虑内存访问相关的错误。而一旦我们深入到Native世界中,原本面容和善的内存便开始凶恶起来。这时,由于程序员写法不规范、逻辑疏漏而导致的内存错误会统统跳到我们面前,对我们嘲讽一番。
Linux阅码场
2020/07/07
4.1K0
ASAN和HWASAN原理解析
从Google Fuchsia看如何实现一个跨全平台的操作系统
Google Fuchsia初探 这几天我花了一点时间简单看了一些Fuchsia的代码,对这个系统有了一个初步的了解。也欢迎在狗家的朋友批评指正。 Fuchsia是Google内部孵化出来的一套新的全部开源操作系统。你能在google的代码仓库看到所有的代码, https://cs.opensource.google/fuchsia/fuchsia 这个系统有点属于备胎转正的意思,在Google内部前前后后开发了大概有6年多了,如果再考虑到以前的little kernel的积累,这个系统开发的时间更长。 这
新智元
2023/05/22
8700
从Google Fuchsia看如何实现一个跨全平台的操作系统
Arm新一代架构发布:CPU能效提升40%,GPU性能提升15%
机器之心报道 编辑:泽南 对于全球 Arm 生态来说,每年不变的常数就是 Arm 新发布的「公版」架构,其设计一直在引领移动和云端计算的发展。 在最近的台北 ComputeX 展会期间,Arm 展示了下一代 Cortex-A 和 Cortex-X 系列 CPU 内核 —— 以及新一代 GPU 设计,我们将看到它们从今年下半年到明年间成为产品。昨天的发布包括旗舰级 Cortex-X4 内核、中核 Cortex-A720、小核 Cortex-A520 以及新一代 GPU Immortalis-G720。 Arm
机器之心
2023/05/31
6780
Arm新一代架构发布:CPU能效提升40%,GPU性能提升15%
【ARM】ARM Cortex 处理器详细讲解
ARM Cortex处理器系列是ARM公司推出的一系列高性能、低功耗的处理器核心,广泛应用于不同类型的电子设备。Cortex处理器按应用需求分为三个主要系列:Cortex-A、Cortex-M和Cortex-R。以下是对这些系列的详细讲解。
LuckiBit
2024/12/11
1K0
分歧还是共存?详解Android内核安全
许庆伟:龙蜥社区eBPF技术探索SIG组 Maintainer & Linux Kernel Security Researcher
Linux阅码场
2022/09/28
1.6K0
分歧还是共存?详解Android内核安全
Arm 发布全新 Armv9 边缘 AI 计算平台,可运行超 10 亿参数端侧 AI 模型
近日,Arm 正式发布了其全球首款 Armv9 边缘 AI 计算平台。据介绍,该平台以全新的 Arm Cortex-A320 CPU 和边缘 AI 加速器 Arm Ethos-U85 NPU 为核心,可支持运行超 10 亿参数的端侧 AI 模型。
深度学习与Python
2025/03/13
1750
Arm 发布全新 Armv9 边缘 AI 计算平台,可运行超 10 亿参数端侧 AI 模型
Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了
2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消费电子视觉体验而设计的Mali-G GPU系列,以及与之适配的系统 IP CoreLink 700。
AI科技大本营
2021/06/08
1.7K0
Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了
Arm最强CPU及GPU内核发布:联发科天玑9400将首发!
5月30日消息,当地时间周三,Arm在其全面计算解决方案(CSS)取得成功的基础上,正式发布了首款面向客户端产品的 Arm 计算子系统 ——CSS for Client,以及新的 Arm Kleidi 软件,大大简化了运行 Android、Linux 和 Windows 的台式机、笔记本电脑、平板电脑处理器的开发和人工智能(AI)的部署。
芯智讯
2024/06/07
1.3K0
Arm最强CPU及GPU内核发布:联发科天玑9400将首发!
Arm 最新架构不受美国出口管理条例约束,华为有机会获授权
作者 | 罗燕珊 审校 | 蔡芳芳 十年磨一剑,在 3 月 31 日举办的 Arm Vision Day 期间,Arm 正式宣布推出 Armv9 架构,这是十年来最新的 Arm 架构。 Armv9 架构是基于 Armv8 既往的基础,并增添了针对矢量处理的 DSP、机器学习、安全等这三个技术特性。据了解,基于 Arm 架构的芯片出货量在持续加速,过去五年基于 Arm 架构的设备出货量超过 1000 亿。 “在展望由 AI 定义的未来时,我们必须夯实先进的计算基础,以应对未来的独特挑战。Armv9 就是我们给
深度学习与Python
2023/04/01
7330
Arm 最新架构不受美国出口管理条例约束,华为有机会获授权
ARM官方手册太厚太难学?这本书助你迎接万物互联的浪潮
基于 IoT(Internet of Things,物联网)的应用大爆发一定不会缺席。从这个概念提出到目前,市场上已经有了一些探索,例如可穿戴式设备、传感器、移动通信设备等。
Linux阅码场
2022/09/28
1.3K0
ARM官方手册太厚太难学?这本书助你迎接万物互联的浪潮
听GPT 讲Rust源代码--compiler(19)
该文件(rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs)是Rust编译器针对MIPS架构上的Linux系统的目标描述文件。它的作用是定义了在这个目标上编译时的一些配置和规则。
fliter
2024/04/01
1490
听GPT 讲Rust源代码--compiler(19)
ARM64 SMP多核启动(上)- spin-table
一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cpu都是相同的处理器,如4核Contex-A53。但是在系统 启动阶段他们的地位并不是相同的,其中core0是主cpu(也叫引导处理器),其他core是从cpu(也叫辅处理器),引导cpu负责执行我们的启动加载程序如uboot,以及初始化内核,系统初始化完成之后主core会启动从处理器。
用户7244416
2021/08/06
1.9K0
一次搞定 Arm Linux 交叉编译
交叉编译其实是相对于本地编译(native build)来说的,我相信大家最开始学习 C/C++ 这些语言的时候,都是在电脑上写程序,然后在电脑上编译生成可执行文件,最后在电脑上运行。程序的编辑——》编译——》运行,整个过程都是在一台 X86 电脑上。
HackforFun
2020/01/13
30K7
一次搞定 Arm Linux 交叉编译
推荐阅读
相关推荐
Android 联手 Arm 击退内存漏洞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档