共计 5126 个字符,预计需要花费 13 分钟才能阅读完成。
为什么须要做软硬件协同?在后摩尔时代,整个算力的晋升逐步放缓,那怎么晋升计算机性能?龙蜥社区 Java 语言和虚拟机 SIG 成员、阿里云智能程序语言与编译器技术总监李三红在 2023 龙蜥操作系统大会上分享了如何通过 Alibaba Cloud Linux 做南向和北向的协同,基于阿里云自研芯片倚天做全栈协同设计和优化,解锁阿里云的底层算力。最初,他也做了 C/C++ 编译器套件 Alibaba Cloud Compiler(ACC) 以及 Alibaba Dragonwell 解读。以下为本次分享全文:
(图 / 龙蜥社区 Java 语言和虚拟机 SIG 成员、阿里云智能程序语言与编译器技术总监李三红)
在这个分享里,咱们具体讲讲怎么样通过 Alibaba Cloud Linux 做南向和北向的协同,解锁阿里云的底层算力。开始之前,介绍一下 Alibaba Cloud Linux 和龙蜥社区的关系。
整体上看,龙蜥社区分三层:最上层更多的是龙蜥社区和国内开源社区的单干,包含 Linux Foundation,这是整个龙蜥社区的根底,因为龙蜥自身就是操作系统。除了 Linux Foundation 外,也投入与云原生 CNCF 基金会的单干,以及和 Java 畛域的两大顶级基金会 Eclipse 和 Apache 的单干。中游是原生发行版社区,通过产业协同去促成整个产品演进迭代。当咱们有了十分好的开源社区,如何撑持上游可继续的商业模式?龙蜥社区依据场景的不同,提供了三个版本类别:第一个是 Anolis OS 商业版,比方统信、麒麟商业版。第二个是企业定制版,而 Alibaba Cloud Linux 就是龙蜥社区定制版。最初一个就是开源社区的收费版本,如 Anolis OS 23、Anolis OS 8 等等。
介绍软硬件协同之前,我先分享下咱们的思考,就是为什么须要做软硬件协同?咱们看下整个产业的计算机算力的大趋势,上图参考自两位图灵奖的获得者 David A. Patterson 和 John L. Hennessy 在 2019 年 ACM 的通信杂志上发表的论文《A New Golden Age for Computer Architecture》。论文回溯了整个计算机体系结构的倒退周期,基本上是三个阶段:
- 第一个阶段是在 1985 年前的 CISC 指令集,每年性能晋升大略 22%。
- 第二个阶段是从 1985 年到 2005 年以前,是计算算力高速倒退的阶段,大略每年 52% 性能晋升。
- 第三个阶段,2005 年是一个分水岭。基本上整个计算机的算力进入平缓的增长区域,转向了多核,大略每年 23% 的性能晋升。
整个算力的晋升逐步放缓,这就是咱们说的后摩尔时代,这里有两个观点分享给大家,第一个是对于硬件和软件的接口形象。晋升硬件和软件的抽象层次,可能带来更大的翻新机会。举个例子,很早以前程序员写汇编,前面写 C/C++,再到前面写 Java,编程语言形象级别的进步带来了很大的翻新机会。现代化的 Java 高级语言的呈现更好地匹配了 2000 年后整个互联网蓬勃发展的速度。第二个是在后摩尔时代怎么晋升计算机性能?这也是论文提的一个十分重要的观点,垂直整合,肯定要做 Vertical Integration。如果没有垂直整合只能任由算力,或者计算机摩尔定律逐步生效,这也是咱们明天探讨的主题。
接下来,咱们再介绍两个大的挑战。
第一个挑战是 Power 和 ILP Wall 制约的算力增长。2005 年,C++ 的驰名专家 Herb Sutter 在 Dr. Dobb’s Journal(DDJ) 发表了驰名的文章《The Free Lunch Is Over:A Fundamental Turn Toward Concurrency in Software》。
置信大家都应该晓得这件事,上图也是从这篇文章参考来的,第一个事件,大家看绿线上面的第二条线,工夫周期从 1970 年到 2005 年的前后,处理器的时钟速率进行增长。大家都晓得 Dennard Scaling 缩放定理,随着晶体管密度的减少,每个晶体管的功耗会降落,因而每平方毫米硅的功耗简直是恒定的。然而 Dennard Scaling 缩放定律 2007 年的时候开始显著生效,到 2012 年根本没什么作用了。Dennard Scaling 效应的终结,意味着咱们无奈再按比例升高晶体管的功耗,这导致了“Power Wall”。2006 年到当初,看到的数据中心的处理器频率根本限度在 4GHz 左右, 简直很难看到通过更高处理器频率来晋升性能。
第二个事件是对于指令级并行 (ILP),最早从 1986 年到 2002 年前后,指令级并行是计算体系结构十分重要晋升性能的技术。古代处理器的多并发、多发射、更深的流水线导致更高级的 ILP 非常复杂。为了充斥 pipeline,须要预测分支,并“投机性”地将代码放入 pipeline 中以便执行。然而,“投机性”的应用既是 ILP 性能的本源,也是其效率低下的本源。随着事实世界越来越简单的 Workload 的行为,让这种投机预测变得越来越难 (ILP Wall)。这张图的最初这条线,2005 年左右,ILP 不再取得更好的收益,这就是 2005 年的时候为什么要转向多核。从上面的芯片、硬件转向对软件系统并发性能诉求,这其实是一种责任转移,计算机软件将不得不或者说被迫解决好基于多核处理器的大规模并发程序的效率问题,这对软件的并发性能提出了极致的要求。Go 语言在 2009 年诞生,将并发(Concurrency)作为 Go 语言的一等公民,通过轻量级的“Goroutines”为并发执行提供反对。最近 Java 21 的公布,把 Virtual Thread 用户态线程纳入到 Java 语言体系中推动。
第二个挑战对于内存墙 (Memory Wall)。1994 年,弗吉尼亚大学的传授 William Wulf 和他的研究生 Sally McKee 提出:Memory Wall 将成为将来几十年计算机科学畛域十分确定性的挑战。Memory Wall 提出的处理器与内存性能的这种差距,在过来几十年中稳步增长。计算机程序有两个局部组成,数据和指令。内存提早和内存带宽的限度无奈很好的让程序的指令和数据更好地靠近 CPU,让 CPU 忙起来(CPU 永远在等内存取数据)。这是内存墙带来的挑战。下面这张图是从《Computer Architecture: A Quantitative Approach》第 5 版中借鉴过去的。时间轴从 1980 年到 2010 年,上面是内存,下面是 CPU 的性能。Memory Latency, 以 1980 年 64 KB DRAM 为 Baseline,每年大概 7% 的性能晋升。而 Processor 性能在 1980-1985,每年大概 22% 的性能晋升,1985 年 -2000 年,每年大概 52% 性能晋升。2000 年 -2005 年,每年大概 20% 性能晋升。2005 年当前到 2010 年,只管 per-core basis 的性能并无多大变动,但就像咱们后面所述,2005 年后开始转向多核,多核让共享的内存资源的争抢更加加剧。怎么样在软件层面解决内存墙的问题也是十分要害的。
咱们怎么对待和解决以上挑战?上图中绿色线是传统的计算机体系结构的定义。为了解决下面的挑战,咱们应该从更加的扩大视角对待整个计算机体系结构(红色框示意),蕴含了从芯片到整个系统软件、编程语言、应用层的扩大视角看整个体系结构。
后面介绍了很多挑战,包含算力放缓、Power Wall、ILP Wall、以及 Memory Wall,那么怎么解决以上问题?
第一是须要更好地跨层级协同设计。从芯片到 OS、编译器、利用,这也是咱们阿里云继续在做的。
第二是尽可能面向场景的定制优化。不同的利用场景比方大数据的场景和数据库的场景,Workload 的特点不一样,依据不同场景特点做垂直定制优化。当然,这里有个前提是要确保服务用户的界面放弃不变。比方各位在运行 MySQL、Spark 的业务,不会因为是运行阿里云上会有什么不同,换句话说咱们会确保 MySQL、Spark 的兼容性,与跑在别的环境并不会有什么不同。这是须要遵循的准则,保障用户界面不会被扭转。在这种前提下,尽可能面向场景定制化。
具体怎么做的?根本解法就是以 Alibaba Cloud Linux 为纽带的南北向软硬件全栈协同。上图中从下往上看,上面是各种芯片架构,包含 Intel、AMD、Arm(倚天),往上面是阿里云的 ECS 实例,ECS 实例上运行的是 Alibaba Cloud Linux,再下面是编译器与运行时,再到不同业务负载。对阿里云用户来说,MySQL、Spark、Flink 都不变,是很失常的开源的 Workload 或者是规范的 Workload。在此基础上, 咱们引入了优化畛域一个通用的假如 – Close World Assumption(CWA)。这些负载都是跑在阿里云的基础设施之上,在此状况下,它其实是个关闭世界的假如。在这个假如下,咱们能够把一些限度去掉,做全零碎,全栈的优化。上图的左边列举了各个层级优化。比方咱们内核会对各种加速器进行反对,PGO 内核实质上是针对利用特点的反馈优化,在大数据或者数据库场景有更好的性能体现。64K 能够更好地晋升面向内存密集型的负载性能,这是从整个零碎看,怎么更好地解决 Memory Wall 带来的性能问题。最下面咱们在 Base OS 有全方位的系统配置和服务优化。接下来咱们再开展介绍自研的 JDK(Alibaba Dragonwell),自研的 C 和 C++ 编译器(ACC)。
面向 C、C++ 场景有咱们有一套自研的编译器套件 Alibaba loud Compiler,简称 ACC。ACC 是基于 LLVM 自主研发。咱们从两个维度对 ACC 总结。第一个维度,ACC 面向整个阿里云产品,服务云上的客户,一套编译器能够撑持 Intel X64 和 Arm 两种架构。ACC 编译构建速度和传统的 GCC 比大略有 15% 到 40% 的提速。性能优化方面,相比 GCC 大略有 5-15% 的性能提速。第二个维度是面向倚天 710 的芯片优化,基于倚天平台上独特的 CoreSight 能力,咱们构建了 CoreBolt 技术。CoreBolt 能够追踪利用的指令跳转,通过跳转跟踪信息做前期的代码的 layout 优化。CoreBolt 技术在数据库场景曾经有大规模利用,大略有 10%~40% 的性能晋升。另外一个是面向倚天的 SVE 指令的反对,C++ 很古老,但当初倒退也十分快。C++ 20 有十分好的个性,像 Coroutine、Modules,ACC 编译器对这些现代化的 C++ 个性有比拟好的反对。
对 C、C++ 的 Workload,Alibaba Could Linux 中通过叠加咱们自研的 ACC 编译器, 实现对 C、C++ 全栈的协同优化。很多数据库的 Workload 都是用 C++ 写的。咱们再来谈谈 Java。咱们通过 Alibaba Could Linux + Alibaba Dragonwell 来做面向 Java 场景的全栈协同优化。Alibaba Dragonwell 是咱们自研的 JDK,帮忙优化整个阿里云的 Java 利用。Alibaba Dragonwell 能够基于 Anolis OS 和 Alibaba Could Linux 构建和公布。目前公布了 8、11、17 三个 Long Term Support(LTS) 版本。Dragonwell 分两个版本,一个是标准版,性能基本上和 OpenJDK 一样。另一个版本是扩大版,带来很多面向云场景加强,比方 Wisp(协程),RAS 加强都在扩大版中。下面是不同的平台反对、质量体系、社区保护。咱们也在积极参与 Java 畛域开源和规范工作,阿里云是 Java 规范委员会 JCP-EC 成员(中国惟一),也是 GraalVM 我的项目征询理事会成员(中国惟一)。作为 Eclipse Adoptium 工作组策略基石成员,咱们也参加 Eclipse Adoptium 社区治理,探讨和建设 JDK 发行版兼容,稳定性规范,领有 PMC 席位(中国惟一)。
上图是对于更多 Alibaba Could Linux 的资源链接,如果须要理解更多 Alibaba Could Linux 产品的状况,能够扫码入群或点击链接做更多理解:
Alibaba Cloud Linux 产品文档:
https://help.aliyun.com/product/2632541.html
更多优化个性介绍:
https://help.aliyun.com/zh/ecs/user-guide/kernel-features-and…
更多视频回放、课件获取:
2023 龙蜥操作系统大会直播回放及技术 PPT 上线啦,欢送点击下方链接观看~
回放链接:https://openanolis.cn/openanolisconference
技术 PPT:关注龙蜥公众号【OpenAnolis 龙蜥】,回复“龙蜥课件”获取。
—— 完 ——