2023 云栖大会上,龙蜥社区联合倚天共同举办了《 龙蜥与倚天软硬件结合,加速企业数据智能创新》专场。本专场带来了云原生处理器最新技术,邀请了龙蜥社区、ARM、阿里云、平头哥等资深技术专家首次解密基于云原生倚天芯片的软硬件协同、全栈优化等关键技术,如何突破内存墙化解数据中心税,及以上关键技术在阿里云 PaaS/SaaS 场景、电商超大规模场景落地实践。龙蜥+倚天软硬件结合,加速企业数据智能底层算力关键技术,以及倚天 ECS 产品大规模落地实践等内容。
首先,阿里云 ECS 高级架构师张先国 ,带来《倚天再进化-加速企业数据智能创新》。给大家介绍了阿里云为什么设计一款云原生计算架构,通过软硬件结合技术(大容量 Cache、物理核、OS 编译器优化、eRDMA 加速、压缩加速),实现内存墙的突破,也降低数据中心税的开销,大大提升了倚天再应用场景的性能表现。
图:阿里云 ECS 高级架构师张先国
倚天的性能在一年来,也实现了再次进化,比去年云栖大会时期,性能提升 20%,落地上千家企业客户。
以上是针对去年的提升。相对主流 x86 性能收益也非常明显。大数据(+30%),视频转码(+40%),HPC(+30%),Java App(+20%),数据库(+20%)。
龙蜥社区 Java 语言和虚拟机 SIG 成员、阿里云智能程序语言与编译器技术总监李三红为大家分享了 《龙蜥解锁倚天底层算力,加速企业智能化创新》。
图:龙蜥社区 Java 语言和虚拟机 SIG 成员、阿里云智能程序语言与编译器技术总监李三红
在倚天的成就背后,是阿里云强大的基础软件支持能力。从操作系统内核、编译器,到运行时,阿里云基础软件团队都针对倚天芯片特性做了针对性的优化。在应用端,基础软件团队也在系统软件层为倚天 Arm 架构软件适配保驾护航,保障倚天在云上稳定、可靠、高效地运行。同时,依托龙蜥社区,阿里云基础软件团队联合平头哥芯片团队,阿里云ECS团队共同构建基于倚天ARM生态上的技术竞争力以及生态构建。
后摩尔定律时代,传统算力提升缓慢。从扩展视角看计算机体系结构,全栈的协同设计与优化是龙蜥解锁倚天底层算力的关键技术之一。从倚天硬件、内核、编译器、运行时,到应用的垂直整合(Vertical Integration),全栈优化大幅提升软件性能。
本专题也详细介绍了龙蜥操作系统(Anolis OS)、Alibaba Cloud Linux(OpenAnolis企业定制版,面向阿里云业务定制和优化 )、C/C++编译器套件 Alibaba Cloud Compiler(ACC) 编译器,以及 Java 运行时 Dragonwell JDK 在倚天方面做的优化工作。
Alibaba Cloud Linux 全面兼容 CentOS/RHEL 生态,与阿里云基础设施做了深度优化,为实例提供专项的性能和稳定性优化,并提供完善的生态支持,同时用户还可以免费享受阿里云提供的全生命周期服务保障。
Alibaba Cloud Compiler(ACC)编译器,相比GCC,或其他Clang/LLVM版本在编译、构建速度上有很大的提升;利用ACC ThinLTO、AutoFDO和Bolt等技术可以在不同程度上优化程序性能。ACC 在支持不同 CPU 架构(X86、AArch64)基础上,进一步针对倚天710芯片进行优化,取得额外性能提升。
Alibaba Dragonwell 是 OpenJDK 的下游发行版本,支持 X64/AArch64 平台,被广泛应用于在线电商、金融、物流等领域,百万量级部署规模。 Alibaba Dragonwell 依托于丰富的阿里巴巴 Java 应用场景的锤炼, 全面拥抱云原生。在倚天 Arm 架构上, Alibaba Dragownell 主要采用面向工作负载的优化方式,使用云上大量真实的 Java 应用情况来进行性能评估和优化,优化的方向包括内存模型、锁/并发等方面。
在倚天技术生态方面,为了解决架构迁移的兼容性问题,发布了 X86 向ARM平台迁移的EasyYitian工具平台。支持从代码/环境兼容性扫描(迁移前),跨架构编译(迁移中),到生产上线性能监控与调优(迁移后)全软件周期的支持和覆盖。
ECS Booster 是在线的倚天智能优化方案。在创建倚天 ECS 实例时,用户可以直接选择对应场景的性能优化方案,包括Nginx,MySQL,Redis 等场景,ECS Booster 会自动加载性能优化策略和配置。
除了开箱即用的 ECS Booster 自动化调优方案,阿里云也提供了优化版的云原生镜像,可加速 BigData,Web, Database, Java方面应用的提升,性能收益达到5-10%。
最后,李三红还发布了倚天常用的工具和技术社区:
CADT::https://bp.aliyun.com/detail/346 (一键测试 Spark 集群性能)
倚天ECS开发指南: https://github.com/aliyun/yitian-ecs-getting-started
倚天社区: https://developer.aliyun.com/yitian
云计算应用发展至今,已经诞生了各类复杂的应用生态,比如数据库、大数据、多媒体、AI等等,那么如何让这些应用更好地在倚天上发挥能力,尽可能减少用户的工作量,提升用户云上倚天的部署效率?平头哥解决方案的同学们自有妙招,平头哥数据中心解决方案负责人陈继承为大家带来《倚天软硬件协同加速应用生态创新》的主题演讲,为广大云计算引用开发者提供了快速迁移到倚天的道路。
图:平头哥数据中心解决方案负责人陈继承
高性能芯片不能必然带来应用高性能。在充分释放、发掘倚天算力潜力的过程中我们遇到了三个方面的挑战,首先是生态迁移,需要让客户在少投入甚至不投入的情况更顺滑的将长在x86上生态迁移到arm并保障其性能;其次,X86和ARM在内存模型也就是访存序存在差异,一个是强一致性序,一个是弱一致性序,需要提供自动化序检查能力让客户应用正确、高效的迁移到倚天上;最后,倚天芯片在ARM架构兼容的基础上考虑到功耗、频率以及内存子系统、缓存一致性、IO子系统等各种约束,在具体实现上做了很多的折中,需要我们把这些定制化底层软硬件能力以加速库、算子库、应用解决方案等形式更好的透出,能够让应用更方便、高效的调用。
因此,平头哥的工作聚焦在让倚天底层软硬件能力充分透出的核心加速引擎层以及与芯片行为相关的生态迁移工具上,和阿里云弹性计算、基础软件、基础设施、业务应用等团队一起从基础设施层面、操作系统与编译层面、PaaS应用层面共同构建软硬协同、全栈优化、业务融合的倚天应用生态及其竞争力,并实现由内而外赋能。同时,倚天生态也是开放型的,依托ARM开源社区建设倚天生态,积极发展倚天社区,为外部客户和开发者提供全面支持。
比如对于应用生态迁移,Java和Python等解释型语言在互联网业务应用中广泛使用,由于解释型语言运行时加载的特性,需要提前检查相关应用依赖(例如依赖库、三方包等),因此设计了能够满足Java/Python应用跨架构平滑、高效迁移的YODA倚天迁移工具。
YODA倚天迁移工具实现了包括源码、依赖包、二进制、依赖文件等的准确扫描,提供依赖检查、非依赖包自动过滤、版本检查等功能;可以对扫描结果进行分类,包括兼容、不兼容、版本升级、编译升级、待验证5大场景,并且提供覆盖应用全场景的SOP兼容升级方法和建议;对于不兼容文件的兼容性改造,工具提供了兼容版本推荐功能,目前该功能已覆盖20+主流开源仓,能够实现超过30K兼容版本的推荐,能够有效满足大数据等主流场景的兼容性要求。
目前,YODA倚天迁移工具已帮助内外部客户超10+应用完成迁移适配。同时工具已集成到阿里云EasyYitian工具平台,助力更多外部客户应用迁移上倚天。
对于倚天应用解决方案,大数据场景技术栈复杂,涉及业务软件、JDK、OS等较多领域,基于经验调优和人力调优耗时耗力,并且调出的性能也是基于经验获得,不一定最优。针对x86迁移到ARM平台,为减轻开发者的工作量,开发了倚天大数据自动化调优工具,可以基于AI算法,在众多的参数多维空间中寻找最优参数,提高调优效率并给出最优性能。目前已经支持了Spark、Hive, 未来会持续支持更多场景。
同时,对于大数据业务,算力已逐渐成为显著的瓶颈,需要通过Spark关键算子native化提高Spark执行效率,通过集成我们基于倚天优化的x-simd、 ptg-optimize、zstd等加速库,显著提升了E2E性能,E2E相比原生Spark提升1倍以上。
倚天在AI场景也发挥重要作用,通过创新的量化裁剪算法、ARM SVE int8 技术以及微架构与算法深度结合的优化方法。倚天在语音推理、大语言模型推理、视觉、机器翻译等方面获得了较好的性价比和落地。比如对于大语言模型推理,在首包prefill阶段,算力是瓶颈,在后续的单包阶段,带宽是瓶颈,通过int8量化技术以及微架构与算法深度结合的优化方法,在首包阶段实现了8倍算力提升,在单包阶段实现了4倍带宽优化。倚天灵活的算力/带宽配比方式大幅提升了倚天的能力上限。
倚天芯片的SPEC INT 性能强劲,其物理核,不降频、独享的更大的L1/L2 cache及更大的LLC、高效的图像信号处理拓展指令集,与视频应用视频像素INT8/INT16格式、计算密集型依赖平稳算力、分块处理需要大缓存以及向量化模块占比高等特征完全契合,因此带来了极高的视频编解码性能和性价比。倚天视频编解码应用也已成为倚天实例的一个重要优势场景。
倚天视频解决方案提供了x264/x265优化解决方案、4K高清加10bit/12bit 色深算子加速方案以及用于360全景视频和苹果HEIF Grid图片格式的x265 tile解决方案等,用户可在阿里云ECS Booster中勾选获得。
倚天的成功自然也离不开 Arm强大的软件生态, 来自安谋科技高级软件经理别再平带来议题《 Arm Ecosystem, Performance, Optimization》,为大家详解 Arm生态、性能和优化的诸多细节,让听众不仅领略了当下 Arm生态的勃勃生机,同时也展望了未来发展的无限可能。
Neoverse是Arm在2018年发布的平台,包含三大系列产品,专门针对基础设施领域设计CPU核心和互联总线, 聚焦基础设施市场。 主要有三大系列 CPU 核心。 在半导体领域,PPA(Performance, Power, and Area)是一种综合考虑性能、功耗和面积的概念。它是衡量半导体芯片设计质量的重要指标。 具体到Neoverse核心中,V 系列CPU核心追求极致的性能,性能是第一位,但功耗更高,核心面积更大,应用于HPC,数据中心云计算和人工智能领域。 N系列CPU核心追求的非常高的扩展性,性能,功耗和面积三个指标平衡,应用于数据中心云计算到边缘计算以及5G无线接入领域。 E系列CPU核心追求极致的能效,功耗、面积要优先于性能,应用于网络和边缘计算领域。
最近两年 Arm 在基础设施市场取得了非常好的进展。可以从这几个方面看一下:
1、服务器方面:因为Neoverse 系列CPU核心高性能低功耗的特点,Arm架构的服务器芯片已经大批量部署于全球数据中心云计算。
2、智能网卡方面: AWS,Intel,Marvell,NVIDIA等主要的DPU供应商都选择了Arm CPU来构建DPU SoC。
3、芯片厂商方面: 已经有超过50家的芯片合作伙伴使用arm来构建数据中心芯片。
4、OEM, ODM: 主流的OEM,浪潮、惠普、超微等发布了Arm架构服务器整机。
5、Arm SystemReady方面: 有100多个系统通过了认证,意味着这些系统不需要任何补丁,就可以运行主流的操作系统, 达到开箱即用的体验。
接下来看一下 Arm在软件生态方面的投入策略:
如左侧所示, 主要是首日支持、开发者工具和开源软件投入三方面。
1、首先是 Day one bringup,Arm 确保在silicon硬件系统面世之前,相应的架构特性和微架构特性就在软件中都已经就绪。同时Arm还会针对自己的CPU、总线等IP,研发相应的fast model和FVP系统,以及对应的参考设计,芯片伙伴可以在这个基础上进行硅前的软件开发。
2、其次是开发者工具,arm为开发者提供一系列完善的开发工具,主要是包括编译器工具链和性能分析工具。编译器GCC LLVM,随着编译器版本的更新,新的架构特性,例如对原子操作 向量化元算SVE的支持被加进来,保证编译器能够生成最优化的目标代码。而且,更新的编译器版本,会带来更新的CPU微架构原生支持,这样开发者使用编译器在当前系统构建代码的时候,就可以用比较简单的编译选项,获得最优化的结果输出。性能分析工具方面,Arm对Linux perf、telemetry solution等进行开发, 支持top down等方法论。
3、最后是开源软件的投入,Arm投入了大量的研发资源来支持开源社区,从整个软件栈来看,从Java Rust Golang Python PHP主流的程序语言,到各种常见的计算加速库,例如压缩、加解密、视频编解码等,以及最上层的各种工作负载,例如数据库 MySQL Redis、网页服务器 Nginx、大数据 Spark Flink、存储 Ceph,Arm都有持续的投入和支持。
使用N2的倚天云实例, 相对于x86 Icelake的云实例, 在多个上层应用负载中,都有着显著的性能优势。
这一页是我们在基于Neoverse N2的倚天实g8y实例和同等规格x86实例的性能对比测试,我们可以看到,不管是流行的缓存数据库Redis、memcached,大数据Spark应用、以及网页服务器 Nginx Apache Httpd等, 倚天云实例都有至少20%的性能优势。尤其是值得指出在机器学习推理方面, 使用MLPerf测试,倚天的性能是x86的两倍。
同时值得指出的是,阿里云上的倚天云实例售价相当于x86架构,具有至少20%的价格优势。再加上刚才提到的相应的性能优势,这将为最终用户在云上部署中带来极高的TCO优势。
在编译器参数选择上,Arm架构和x86稍有不同,为了获得最好的性能, 我们有这些建议:
在可能的情况下,使用最新版的编译器, 正如我前面说过的,在编译器这块,Arm会不断的开发和适配更新的特性,包括性能优化,所以建议升级编译器。例如GCC11和LLVM11版本中加入了对N2核的原生支持。
然后如果是在Arm系统上进行原生编译的时候,建议总是使用mcpu=native选项,这样配合较新的编译器,可以自动识别到当前硬件的型号,针对性的生成优化的机器代码。
其次如果不是原生编译,不能使用mcpu=native的情况下, 建议指定具体的mcpu参数,例如mcpu=Neoverse-n2来指定要目标代码的cpu 核心。
再其次,如果是用的编译器还不支持使用mcpu传入目标系统的cpu核心,可以使用march指定需要的架构特性,例如armv8.5+sve的形式。
最后要说明的,在arm架构上要彻底避免使用mtune参数,这是从x86到arm迁移中要注意的一个点,当我们迁移的时候,建议删除mtune,使用mcpu参数来替换march参数。
在arm community blog上有一篇文章, 详细介绍了march mtune mcpu等不同的编译选项在不同架构下的区别以及相应的影响。
More Arm Developer Resources
Learning Paths
https://learn.arm.com/learning-paths/servers-and-cloud-computing/
Arm Developer
https://developer.arm.com/documentation/
Community Infra Solutions
https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog
WorksOnArm
https://www.arm.com/markets/computing-infrastructure/works-on-arm
极术社区 Arm服务器专栏
https://aijishu.com/blog/armsoft
最后,别再平给大家介绍了5 个 Arm 开发相关的资源:
1、 首先是learning path项目。该项目旨在设计一系列课程,帮助开发者快速熟悉在Arm系统上的软件应用、安装部署和性能优化工作。这个项目是开源的,任何使用者都可以为其做出贡献,分享自己的实践经验。
2、 Arm开发者社区,可以获取到Arm各种CPU核心、总线的技术文档和架构规范。
3、 Arm community blog,汇集了很多Arm软件生态和性能优化的文章。
4、 Worksonarm计划,Arm通过 Works on Arm 计划,为开发者提供免费的 Arm 架构开发平台,赋能开发者创新。感兴趣的开发者可以通过workonarm计划,提交申请来免费构建自己基于arm架构的系统。
5、 最后是极术社区 arm服务器专栏, 我们会不定期的在上面分享一些我们的经验总结, 欢迎大家订阅交流。
—— 完 ——
加入龙蜥社群
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。
关于龙蜥
龙蜥社区是立足云计算打造面向国际的 Linux 服务器操作系统开源根社区及创新平台。龙蜥操作系统(Anolis OS)是龙蜥社区推出的 Linux 发行版,拥有三大核心能力:提效降本、更加稳定、更加安全。
目前,Anolis OS 23 已发布,全面支持智能计算,兼容主流 AI 框架,支持一键安装 nvidia GPU 驱动、CUDA 库等,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。
加入我们,一起打造面向云时代的操作系统!