写点什么

自从有了这个工具,一键代码迁移不在话下

发布于: 刚刚

​​​​​​​​​​​​​​​​​​​​​​摘要:鲲鹏开发套件 Kunpeng DevKit 可实现两人天快速完成代码迁移,提供全栈开发工具,集代码迁移、编译调试、性能调优、异常诊断等工具和功能于一体。


本文分享自华为云社区《【云驻共创】鲲鹏DevKit实现两人天高效迁移汇编代码》,原文作者:Victue。

一、鲲鹏之志

1.1 鲲鹏平台


鲲鹏平台,为全世界的开发者提供了一种新的算力选择。从硬件的开放,到系统软件的开源,涵盖从底层硬件、基础软件到上层行业应用的全产业链条,在国计民生的各个行业取得了重大效果或者进展。工欲善其事必先利其器,鲲鹏开发套件 KunpengDevKit 是华为公司为了广大鲲鹏开发者打造的一把屠龙之刃,帮助开发者高效开发,一键迁移。



1.2 Kunpeng DevKit


鲲鹏开发套件 KunpengDevKit 提供全栈开发工具,集代码迁移、编译调试、性能调优、异常诊断等工具和功能于一体。将开发者的工作各个环节一一串联,提供了一个方便、快捷和专业的工具包,通过鲲鹏 DevKit 可以帮助用户高效开发,一展宏图。



​真正的武林高手,内功很强,外功同样很强!DevKit 产品设计和用户体验同样优秀!


时间有限,本文着重分享汇编翻译技术KunpengDevKit 产品体验

二、汇编自动翻译

2.1 汇编代码


众所周知,汇编语言历史悠久,上手难度较高,是任何一种计算机或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集





一种汇编语言专用于某种计算机系统结构,如 x86_64 或 aarch64 汇编。这意味着在某种程度上汇编语言可以真正的操控硬件,可以完成高级语言不能完成的任务。同样,正因为汇编语言接近硬件平台,所以汇编语言也是晦涩难懂、难以上手。

2.2 汇编样式


每一个计算机平台都对应着自己的计算机平台,内存、寄存器等语法格式错综复杂。




​汇编语言使用方式也多样,单指令简单嵌入汇编、多指令简单嵌入汇编、全汇编文件。这相当于在我们现代社会讲古文古诗,全篇都使用文言文或者其中引用两句古诗词。



2.3 意义和挑战


将代码从一个平台迁移到另一个平台,如果其中需要牵涉到汇编语言翻译,其代码迁移难度巨大。



目标是两人天完成应用迁移,然而如果代码中包含汇编语言,有可能 12 人都无法完成迁移。不行,不可以!华为必须开发汇编迁移工具!


“代码千万行,汇编就几行,迁移没工具,开发泪两行”

2.4 使用场景


在使用汇编语言时,嵌入汇编的指令数大部分是小于三条指令,使用都较简单,指令也比较集中。



​全汇编文件中 SIMD 指令占了绝大多数,指令相对集中。



可以发现,常用汇编指令和 SIMD 指令占了汇编语言大半江山。只要能够解决常用指令和 SIMD 指令,项目就成功了一大半。



2.5 总体思路


目标是识别所有 X86 汇编,自动翻译(大多数场景且性能尽量不衰减)。


在开始时,对于常用的指令进行翻译,而后随着用户规模的扩大和使用量的增加,根据用户需求,逐步加入用户所需要的指令。


第一个技术点:自动化

第二个技术点:技术复用


整体技术架构面向未来,拥有生命力。所有就有了下列设计原则


设计原则

  • 使用便利 - 一键迁移

  • 可扩展性 - 翻译范围

  • 可维护性 - 源码翻译

  • 架构重用 - 不同场景

  • 技术复用 - 不造轮子



2.6 总体设计


W + 二

“二”,直接翻译,实现从 X86-64 → AArch64

“W”,庖丁解牛,虽然操作较为复杂,但是利用编译技术的现有能力,加以改造为翻译所用,实现翻译效率最优化。依据上文所述汇编复杂特性以及平台便捷化目标,产生以下设计原则和设计方案


设计原则

  • 汇编样式复杂

  • 平台间差异大

  • 目标要求很高


设计方案

  • 能用则用

  • 需改尽改

  • 当快则快

  • 曲折前行



三、汇编自动翻译部分技术


3.1 嵌入汇编的识别


对于全汇编,识别方式较为简单,通过文件的后缀即可识别汇编文件,问题在于嵌入汇编的识别。我们使用 Clang-Tidy 编译技术实现该目标。


Clang-Tidy:基于 LLVM 的静态语法检查框架,提供语法(AST)解析能力。


基于 Clang-Tidy 工具集拓展汇编识别和替换规则,使得 AST 关键节点暴露。定位汇编代码后即可为所欲为,进行翻译处理。


识别流程图如下:



下面给出一个小案例:





3.2 简单嵌入汇编的自动翻译


基于规则的自动翻译,即通过某种特征匹配规则识别和转换相应的代码。


1.指令操作数映射

2.汇编语句特征分析(绑定步骤 1)

3.规则库规则匹配(绑定步骤 2)

4.根据规则进行代码翻译



​首先对汇编语句进行语法解析,解析完以后可以得到各个特征,再在规则库中进行特征规则匹配,即与语法结构进行匹配,在规则进行转换时,相对应的语法结构也进行转换,两者合一,即代码翻译完成。



3.3 复杂汇编的自动翻译


对于复杂汇编,指令条数多,语法结构复杂,千变万化,也可能存在外部引用等问题。


1.指令组合无法穷举

2.汇编模块引用外部变量

3.消除平台间调用差异

4.SIMD 指令对等翻译



​上文中“W + 二”设计结构在复杂汇编翻译中发挥重要作用。下“一”进行 SIMD 直接翻译。



3.4 汇编翻译举例


将 X86-64 一键翻译为 AArch64,并且提供两种方案,旧的路径依旧可以在 X86 上执行,没有任何问题,并且创建的新分支可以运行在 Kunpeng 平台上。生成代码后,可以一键替换掉旧代码。提供一个 main 函数,可以看作一个驱动,测试驱动可以在 X86 和 Kunpeng 平台同时运行。运行结果一致。保留 X86 平台的兼容性,代码在不同的平台运行可以保持 100%的兼容和正确。


简单汇编翻译:



​复杂汇编翻译:



​天啦,这也太快了。朋友们,赶紧下载使用吧,一键翻译,迁移你的应用至鲲鹏平台。冲起来!

四、体验设计


Kunpeng DevKit 功能强大,使用优雅。采用超级方便的一站式解决方案,帮助开发者加速软件开发、迁移和算力升级。一站式开发套件、全流程效率提升。一站式迁移、编译、测试、分析。



4.1 应用迁移体验设计


开发者依照个人经验和习惯可以大致分为三类:


经验较少的用户,重度依赖自动化,希望全自动化迁移

有一定经验,合理依赖自动化,希望自己主要迁移过程

经验丰富,浅度依赖自动化,自己纯手工迁移



​鲲鹏 DevKit 针对上述三种不同类型的用户,做了大量产品体验层的设计。


第一类开发者,通过系统全面自动化能力,做到无感知迁移。提供动态二进制翻译工具,自动的将 X86 平台指令集翻译成 Kunpeng 平台指令集。整个过程透明、全自动,无需额外工作,整个应用即可应用在 Kunpeng 平台上。



​第二类开发者,希望参与整个应用迁移的过程和环节中,了解翻译过程。鲲鹏 DevKit 自动识别问题、提供建议辅助决策、提供替换代码─键修改,极简体验。



第三类开发者,可能存在开发者认为自动化重构是一个黑盒子,不可信任,在这方面,困 DevKit 提供了透明展示等内容,使得用户相信,该工具是安全的。



4.2 性能调优体验设计


设计架构时,将人的思想行为融入其中,使得工具的使用更加自然化、更加符合人类认知的思考,从整体到局部,从宏观到微观。



4.3 小例子


举几个小例子可以说明上述体验设计,一个是硬件调优 3D 可视化,基于认知模型、表现模型极简抽象,从物理世界到虚拟世界的映射。



​第二个例子是性能分析时,进程/线程拥塞的直观可视化。



在系统设计时,运行大量的信息可视化表达,一目了然,清晰可见,优雅体验。



五、总结


无需多言,一图流概括!



​鲲鹏 DevKit 产品从设计到功能都是极好的,可以发现为了鲲鹏的发展和壮大,华为在此花了很多心思,希望各位开发者朋友们多多尝试,或许鲲鹏比你我想象的更加强大、友好、便利。


“北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也;怒而飞,其翼若垂天之云。”


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
自从有了这个工具,一键代码迁移不在话下