大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

鲲鹏 DevKit:鲲鹏平台代码迁移利器|QCon

  • 2021-06-17
  • 本文字数:3382 字

    阅读完需:约 11 分钟

鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon

用户将软件从 x86 平台移植到华为鲲鹏平台时,由于平台间体系结构和指令集各不相同,这时就需要利用跨平台工具链对源代码进行重新构建,这中间就会碰到一些棘手的问题,比如编译器无法直接跨平台编译源代码工程中平台相关的汇编代码,又或者当用户把应用迁移到鲲鹏平台上之后,鲲鹏多核的优势却无法充分发挥。因此,如何把 x86 源代码中的汇编代码高效识别并迁移到鲲鹏平台上,同时保证迁移后的性能,是鲲鹏生态建设和拓展过程中急需解决的一个技术课题。

 

InfoQ 记者有幸在QCon 2021 全球软件开发大会上,就这个问题采访到了华为鲲鹏编译技术专家乐永年,他的主要研究方向是鲲鹏平台的编译技术和应用性能优化。

 

以下是视频采访的全部内容,为方便读者查看,视频下方也附上了文字内容。

 

00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    InfoQ:乐老师您好,欢迎来到 QCon 并接受我们的采访,请您先自我介绍一下吧。

     

    乐老师:好的,我的名字叫乐永年,加入华为之前我从事了 20 多年的软件开发工作,包括编译器、加速库以及软件的性能调优我都干过,目前我在华为鲲鹏担任编译器专家,从事鲲鹏开发套件相关的设计和架构工作。

     

    InfoQ:您选择加入华为鲲鹏主要有哪些方面的考虑?

     

    乐老师:刚才也提到了,我之前从事了相当多的软件开发工作。最近鲲鹏正在下一盘大棋,它实际上从硬件开放、从基础软件的开源、到面向生态开发者的DevKit开发套件以及鲲鹏应用使能套件BoostKit,全系列全栈投入,打造一个新的计算底座以及新的计算生态,让我觉得这里面有很多机会。我之前一直有一个梦想,我希望我做的产品能够为广大用户所使用,同时做的工作能够改变大众的生活,这样看的话鲲鹏对我来说是个理想的工作,能帮助我实现梦想,我也希望在鲲鹏这一块继续努力添砖加瓦。

     

    InfoQ:那您现在在鲲鹏做的事情主要有哪些技术挑战?

     

    乐老师:从大的角度来说,计算主要是通过算力来衡量,算力是数据处理的能力,它广泛存在于各个硬件设备里面,包括我们的手机,包括我们的 PC,包括我们的硬件服务器。从我们各领域角度来看,我们的数据中心,以及我们的高铁,行行业业方方面面都需要算力的支撑。但是随着最近大数据以及 AI 的蓬勃发展,原有的算力已经跟不上现有发展的需要,人民日益增长的物质文化需求满足不了了,所以我们需要从各个方面考虑,比如说我们的硬件,包括我们的硬件开放、软件开源,拧在一起,和我们的生态伙伴一起形成合力,打造新的生态,打造新的算力。这里有很多挑战,比如传统的摩尔定律,已经不能满足发展需要,原来的单一架构也不能满足算力的增长需要,这里我们要和生态同仁一起把这个新的生态、新的算力打造好。

     

    InfoQ:您在会议上演讲主题是关于跨平台迁移的,那么从其他平台到华为鲲鹏的跨平台迁移过程中,有哪些技术难点?你们是怎么解决的?

     

    乐老师:我们打造了 DevKit 这个面向开发者的开发套件,它提供了一站式全流程的工作方式,包含了迁移,包含了调优,也包含了编译以及诊断等一系列能力。在这里它主要解决两方面的问题。第一个是把应用从 X86 平台迁移到鲲鹏平台,同时保持迁移以后的性能,因此迁移在这里占了一个主要的地位。在这个迁移过程中有两套方案,针对不同的场景。一个就是有源码迁移,一个就是无源码迁移。

     

    对于有源码迁移,这里碰到的挑战不少。首先,应用的语言多种多样。其次,编译的选项很复杂,很多编译的选项跟平台密切绑定,密切相关。第三个点就是在构建脚本里,很多构建脚本是动态执行的,这些都需要在开发套件里,通过代码迁移工具插件得到一个很好的解决。比如说这里的代码迁移工具插件能够提供八种语言的支持,同时这里需要提供一个静态的扫描,把用户和平台相关的一些编译选项提示出来,让用户修改。我们也在攻关的动态执行技术,能够让构建脚本在静态的方式下得到解释执行,把平台相关的问题都找到,这些是有源码迁移的难点。

     

    对于无源码迁移也有不少挑战,比如说我们怎么保证迁移后的应用性能衰减尽量少,这里动态二进制的优化技术可以帮助我们把这个问题克服。

     

    InfoQ:华为鲲鹏原生编译器毕昇是你们的产品,在设计这个编译器的过程中,有哪些有意思的技术难点?

     

    乐老师:毕昇编译器是我们华为鲲鹏原生的编译器,它通过挖掘鲲鹏架构特点,提供最佳的代码质量,发挥鲲鹏原生性能优势,这里竞争力构筑的方向就是高性能。

     

    对于服务器而言大概有这几个模块,第一块是 CPU,第二块是内存,第三块是存储 I/O,第四块网络 I/O,这四块是密切相关的,对性能最有影响。编译器主要影响第一和第二这两个部件,一个是 CPU,一个是内存,围绕这两个部件,我们绞尽脑汁想各种各样优化的手段,我们这里的毕昇编译器的架构师魏伟为此头发也慢慢变白了。

     

    我这里具体展开讲一讲,对于 CPU 而言这里是比较传统的一种优化,对于鲲鹏特有的流水线架构,这里进行了指令调度优化。对于鲲鹏特有的 NEON 指令集,我们也开发了不少并行化和矢量化的优化技术,把 NEON 指令的能力给充分利用起来,这是传统优化。

     

    对于内存而言,它实际上越来越成为性能的瓶颈,因为 CPU 的速度越来越快,但是内存的访存速度还是赶不上 CPU 发展的速度,我们在这里也开发了很多的优化手段,比如说我们对数组进行重排,同时对结构体进行布局的优化,通过一系列内存排布的优化大幅提升应用性能,除此之外我们还对鲲鹏本身的架构有针对性地对内存缓存的预取做了调整和增强,通过这些手段从 CPU 和内存的角度发挥硬件本身的能力,大幅提升了软件的性能。

     

    InfoQ:刚才我们一直在谈性能的问题,我想深入了解一下,你们是怎么保证程序移植后的性能问题呢?在性能保障这方面有哪些措施?

     

    乐老师:鲲鹏 DevKit 主要的工作,或者业务基本面,就是保证应用迁移,其次是保证应用迁移以后的性能得到维持,现在你这个问题就是关于性能维持方面。

     

    性能维持肯定不能只是靠一两个手段,我们从全流程开发套件使用过程中,在每个阶段都要考虑性能,在代码迁移阶段,我们有加速库插件,它能够针对代码里面常用的热点函数,进行自动识别和智能联想,做到鲲鹏亲和加速库的函数的一键替换,这是第一个。

     

    其次是在编译阶段,我们这里还有鲲鹏原生的毕昇编译器,能够挖掘架构本身特点,把我们应用的性能潜力充分发挥出来,这是第二个。

     

    第三个是我们还有一个独特的专门针对性能的调优工具,叫做性能分析工具。这个性能分析工具能够提供场景化和全系统的分析能力。帮助用户查找应用中性能的瓶颈,提供专业化的性能调优的建议,这是第三点。

     

    第四点是我们还打造了一个新的工具,这个工具就是异常诊断工具,这个异常诊断工具能够帮助用户诊断常见的性能异常,同时快速定位性能问题。

     

    通过这四种工具在源码级别的优化,保证迁移以后的性能能够维持。

     

    对于二进制代码没有源码的情况,我们这里还提供了动态二进制的翻译工具,这个翻译工具里面包含了大量的动态优化,能够把迁移过程中的的性能损耗降到最小,保证应用迁移后性能得到维持。

     

    InfoQ:除了快速迁移汇编代码的技术,DevKit 在设计过程中还解决了哪些关键难题?

     

    乐老师:我们还有无源码迁移的动态二进制翻译技术。实际上这两个问题是有点类似的,对于有源码的应用而言,有源码的代码里它有汇编,需要通过指令的翻译把原有的汇编代码变成在鲲鹏上的汇编代码,是种语言到语言的翻译。这是汇编代码范畴,和它对应的是指令。一个二进制应用程序,它没有源代码了,这时候我怎么在鲲鹏平台上很好地执行这个应用,这里用了一个类似的技术,叫动态二进制翻译技术,这个动态二进制翻译技术就是把一条条指令拆解出来,去动态地解释和执行,当然这个解释执行过程中性能肯定会有损耗,而且损耗还不少,所以在这个过程中会有大量的动态二进制优化技术在里面起作用,把性能损耗降到最少,保证迁移以后用户还可以使用这个应用。到目前为止,我们能够把性能损耗控制在 15%到 20%以内。

     

    InfoQ:DevKit 在哪些领域和行业有成功的应用呢?

     

    乐老师:DevKit 实际上跟鲲鹏平台密切相关,我们的鲲鹏平台在政府、金融、交通、电力各个领域都有非常不错的进展。在这里 DevKit 作为面向开发者使能的重要抓手,对于整个鲲鹏平台的拓展起了一个非常大的促进作用。到目前为止,我们鲲鹏的 DevKit,已经有五万开发用户,有三百多个合作伙伴,和我们一起打造鲲鹏的算力新生态。同时,这里打个广告,我们还有鲲鹏应用创新大赛,所有的参赛团队都会使用鲲鹏开发套件,打造他们的参赛作品,进行应用迁移、开发、调优和调试。

     

    InfoQ:好的,谢谢乐老师。

    2021-06-17 16:084516

    评论

    发布
    暂无评论
    发现更多内容

    Kubernetes 虚拟机部署弊端

    CTO技术共享

    开源 签约计划第三季 8月月更

    STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)

    矜辰所致

    stm32 arm 8月月更 stm32启动流程 startup_xxxx.s

    阿里巴巴2022全新出品亿级并发设计速成宝典(系统拆分,缓存,MQ,读写分离,分布分表,ES扩容应有尽有)

    程序员小毕

    Java 程序员 面试 后端 高并发

    MySQL存储引擎

    武师叔

    8月月更

    Spring(二、配置文件)

    开源 bean Spring JPA 8月月更

    深入浅出边缘云 | 5. 运行时控制

    俞凡

    架构 边缘计算 网络 深入浅出边缘云

    Kubernetes 污点和容忍

    CTO技术共享

    开源 签约计划第三季 8月月更

    从没见过能把高并发拆解的这么详细!阿里巴巴这份堪称神级的“高并发”教程太香了

    Java永远的神

    Java 程序员 架构 面试 高并发

    Istio的扩展和定制

    阿泽🧸

    istio 8月月更

    兆骑科创创新创业大赛承办,线上直播路演,企业孵化

    兆骑科创凤阁

    今天面了个腾讯拿38K出来的大佬,让我见识到了Java面试八股文的天花板

    Java全栈架构师

    Java 数据库 spring 程序员 面试

    Kubernetes日常故障解决

    CTO技术共享

    开源 签约计划第三季 8月月更

    Kubernetes 集群 Ingress 网关

    CTO技术共享

    开源 签约计划第三季 8月月更

    阿里大神级 最新Elasticsearch 笔记,抓紧学起来!

    冉然学Java

    elasticsearch 编程 分布式 java; 程序员、

    阿里架构师力推jvm架构解析文档,把JVM调优实战讲的明明白白

    Java工程师

    Java JVM GC

    设备树

    贾献华

    8月月更

    阿里SpringCloudAlibaba实战小抄(第五版)GitHub独家首发开源

    冉然学Java

    GitHub 开源 springcloudAlibaba spring-boot

    从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

    阿里巴巴云原生

    Linux 阿里云 云原生 容器服务 IPVLAN

    阿里内部高并发核心编程笔记:多线程、锁、JMM、JUC、设计模式

    冉然学Java

    JMM 设计模式 java; 多线程高并发

    迄今为止见过最详细的零拷贝技术讲解

    C++后台开发

    后端开发 零拷贝 Linux服务器开发 C/C++后台开发 C/C++开发

    STM32+果云GA6-GPRSGSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位

    DS小龙哥

    8月月更

    1500字简述 Apache ZooKeeper 的基本原理

    wljslmz

    Apache zookeeper 分布式 8月月更

    JOIN查询时,我为什么建议你将小表放在前面?(NLJ,SNL,BNL算法全面解析)

    董哥的黑板报

    MySQL 数据库 后端 服务端 db

    一个可以提前结项的敏捷项目

    Bruce Talk

    敏捷 Agile 敏捷项目

    基于 OPLG 从 0 到 1 构建统一可观测平台实践

    阿里巴巴云原生

    阿里云 分布式 云原生 可观测 全链路

    IPv6地址规划

    穿过生命散发芬芳

    ipv6 8月月更

    Web网页端IM产品RainbowChat-Web的v4.1版已发布

    JackJiang

    html5 前端 websocket 即时通讯 IM

    开源一夏 | 自从我使用HiFlow场景连接器后,在也不用担心成为“落汤鸡”了

    叶秋学长

    开源 8月月更 Hiflow

    兆骑科创双创服务平台,创新创业高层次人才引进,投融资对接

    兆骑科创凤阁

    鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon_文化 & 方法_张浩_InfoQ精选文章