利用AmpereOne设计创新赋能开发者并推动AI应用
Dave Neary
发布于AI专栏·2025年7月30日
Ampere技术路线图经过精心设计,以满足数据中心和云计算环境不断演进的需求,特别是在AI推理应用几乎遍布所有领域的背景下。
我们的云原生处理器提供了性能、可扩展性和能效的卓越组合,使其成为现代工作负载的理想选择。在2024年度路线图视频中,我们展示了超越192核和8通道内存的产品规划,并在7月向媒体透露了更多路线图细节,分享了AmpereOne的各种架构特性。
对软件开发人员而言,CPU创新有时可能显得抽象且与自身工作不直接相关。本文旨在说明这些硬件级特性如何直接关系到云原生应用开发者和运维人员。
让我们深入探讨AmpereOne处理器的架构创新如何呈现给用户空间的开发者,以及对新老开发者的实际意义。
内存标记
内存标记扩展(MTE)是Arm架构特性,现已在AmpereOne CPU上可用。该功能通过硅硬件实现,作为检测两类内存安全违规的防御机制。
Arm64内存标记的优势
内存标记通过以下方式提升内存安全性和可靠性:
- 缓冲区溢出:识别并阻止越界内存访问
- 释放后使用(UAF):检测程序尝试访问已释放内存块的行为,减少安全漏洞
- 内存损坏错误:在开发周期早期捕获隐蔽问题,提高软件稳定性
- 调试效率:提供硬件级标记,相比实现类似功能的软件工具性能开销更低
通过对内存区域进行标记并强制指针符合这些标记,MTE使开发者能更有效地识别和修复错误,帮助构建更健壮的应用程序。
利用内存标记
内存标记是硬件功能,需要操作系统和系统C库支持该功能并向用户应用程序暴露接口。如果系统C库实现(如glibc)支持内存标记,可按以下方式启用:
确保硬件和内核支持
- 需要AmpereOne CPU或支持Armv8.5-A及更高版本的其他CPU
- 需要编译时启用内存标记支持的Linux内核(CONFIG_ARM64_MTE)
- 可通过检查/proc/cpuinfo中的MTE支持和内核配置来验证
- Fedora 39及以上版本默认支持内存标记
在glibc中启用内存标记
- GNU C库(glibc)2.38版本引入内存标记支持,包含在Fedora 39+和Ubuntu 24.04+中
- 使用glibc.mem.tagging可调参数启用内存标记(默认禁用):
export GLIBC_TUNABLES=glibc.mem.tagging=3启用所有支持的内存标记检查 - 这将对接malloc及相关函数分配的内存进行标记,未经授权的内存访问将导致程序停止并报错
调试和测试
- 启用内存标记运行应用程序可作为开发过程中识别内存访问违规的有效工具
- 可使用gdb等调试工具在运行时检查内存标记
生产环境运行(可选)
- 内存标记可在生产环境中用于检测和缓解内存安全问题,且性能开销较小,具体使用取决于应用需求
实际应用场景
最终用户和开发者可利用内存标记实现:
- 通过主动捕获内存错误构建更安全的应用程序
- 在增强内存安全性的前提下运行大规模部署
- 以更低运行时开销补充其他内存安全工具
内存标记扩展对内存安全和调试效率至关重要的应用开发和部署具有革命性意义,潜在应用领域包括汽车、医疗、电信等行业。
系统级缓存的服务质量保障
系统级缓存(SLC)是比L2缓存延迟高但比系统RAM延迟低的统一缓存池。服务质量保障(QoS Enforcement,也称为内存分区和访问管理)允许系统用户声明特定租户只能访问限定数量的SLC。
使用此功能可帮助应用运维人员和系统管理员管理不同进程和应用程序的内存访问方式,提供对内存分区和隔离的细粒度控制。
Arm64 QoS保障的优势
- 安全性:通过提供内存访问分区能力,内存分区有助于减轻旁道攻击或恶意应用程序尝试访问其他进程内存的风险。这在运行不可信或多样化工作负载的系统中提高整体安全性,因为每个应用程序的内存可以安全地与其他应用程序隔离
- 资源管理:内存分区提供细粒度管理和跟踪内存访问的工具。运维人员可以设置系统不同部分如何访问内存的策略,确保关键应用程序始终能够访问所需资源,同时限制低优先级任务的内存使用
- 多租户系统:在云计算和多租户环境中,QoS保障特别有用。它使运维人员能够强制执行不同虚拟机(VM)或容器之间的内存访问边界,提高整体系统稳定性,防止一个租户的进程影响其他租户,这在共享资源环境中至关重要
- 大规模系统支持:内存分区通过实现更有效的内存管理来增强系统的可扩展性,特别是在具有复杂工作负载的大规模系统中。开发者可以通过了解和控制程序如何与内存交互来创建更高效的应用程序,从而在数据库或AI推理等高需求系统中获得更好性能
利用内存分区实现QoS保障
确保硬件和内核支持
- 要在Linux上使用内存分区和SLC QoS保障,Linux内核必须首先编译支持MPAM Arm功能(CONFIG_ARM_MPAM)
- 该功能在Linux内核版本5.12及更高版本中可用
- 运行
grep CONFIG_ARM_MPAM /boot/config-$(uname -r)检查内核是否支持此功能
在内核中启用内存分区
如果内核支持该功能但默认未启用,可能需要手动启用:
- 首先挂载resctrl虚拟文件系统:
mount -t resctrl resctrl /sys/fs/resctrl - 现在在/sys/fs/resctrl中有一个顶级资源组,可以通过在此文件夹中创建额外目录来创建其他资源组
- 创建自定义资源组后,该目录会填充可用于配置应用于此资源组的资源策略约束的文件
cpus文件包含属于此资源组的CPU核心位掩码,schemata文件定义应用于此资源组的策略控制。例如,可以确保专用于延迟敏感应用程序的核心获得75% SLC的100%带宽,并限制其他资源组共享剩余的25%
实际应用场景
带有内存分区的QoS保障对云运营商、虚拟化技术以及构建高性能、内存密集型应用程序的开发者非常有益。它使服务提供商能够提供更好的性能保证,运维人员能够更有效地管理资源,特别是在多个应用程序共享相同底层硬件的场景中。
嵌套虚拟化
嵌套虚拟化允许在hypervisor下运行的虚拟机(VM)作为其他VM的主机。借助AmpereOne,Ampere CPU现在支持硬件特性FEAT_NV2(包含在ARMv8.4-A及更高版本中),允许网络虚拟化,在Ampere基础设施上启用高级工作负载。这在多种场景中特别有用。
Arm64嵌套虚拟化的优势
- 云平台赋能:嵌套虚拟化使云服务提供商能够为客户提供在VM中运行hypervisor的能力。客户可以部署自定义hypervisor或进一步虚拟化其工作负载以获得更大灵活性
- 增强测试效率:需要操作系统内核的应用程序开发者和测试人员,包括hypervisor和内核开发者,或eBPF相关项目的开发者,可以在嵌套环境中验证其软件,无需直接访问物理硬件,降低资源成本
- 隔离和安全性:嵌套虚拟化可以通过允许应用程序在隔离的深度嵌套环境中运行来提高安全性。这在机密计算或需要通过微VM实现工作负载隔离的场景中很有价值
- 应用程序沙箱化:在VM中运行复杂应用程序使得使用不同操作系统的应用程序能够在同一云环境中一起运行,具有最小的交互和攻击面
Linux中的软件支持可用性
与所有新硬件功能一样,硬件功能可用性与软件支持之间存在一段时间间隔。Ampere工程师正在与生态系统合作伙伴合作,确保Ampere CPU上的嵌套虚拟化尽快向所有客户提供。Linux内核中对嵌套虚拟化的支持目前尚不完整,但完成该功能支持的补丁正在开发中。
一旦该功能得到Linux内核和QEMU的完全上游支持,未来版本的Linux发行版将自动包含对此功能的软件支持。
实际应用场景
Ampere CPU上的嵌套虚拟化在各行业有多种实际应用,特别是随着Ampere和其他ARM CPU在云、边缘和高性能计算环境中日益突出:
- 托管Kubernetes集群中的VM管理:云服务提供商客户可以使用托管Kubernetes服务管理其基于VM的应用程序,以及容器应用程序
- 在云中测试操作系统功能:hypervisor、操作系统内核和eBPF相关项目的开发者和测试人员可以在嵌套环境中验证其软件,无需直接访问物理硬件,降低资源成本
- 增强容器工作负载安全性:如FirecrackerVM等微VM使容器工作负载减少与多租户云环境中其他租户共享的资源,提供更高级别的安全性
- 基于云的嵌入式应用程序开发:嵌套虚拟化使基于ARM的嵌入式应用程序(如汽车软件)开发者能够使用云基础设施软件运行和测试其软件,在VM中运行自定义操作系统
AmpereOne的创新设计建立在Ampere Altra处理器系列成功的基础上。本文描述的新功能共同赋能开发者在Arm64上构建更安全、高效和可扩展的应用程序,充分利用硬件能力的最新进展。
随着这些技术的成熟,它们将进一步增强各行业应用程序的开发和部署。特别是在AI计算时代,为开发者提供顶级工具是推动AI应用和数据中心现代化的关键。
查看我们的嵌套虚拟化博客深入了解。了解更多关于AmpereOne塑造计算未来的潜力此处。
有用的外部参考资料: