华为云鲲鹏 DevKit 代码迁移实战

1. 源码迁移介绍
在国产替代的大背景下,鲲鹏计算平台是一个非常有潜力的产业。为了解决开发者在 x86 平台应用向鲲鹏平台移植的过程中遇到的一系列的痛点问题,华为推出了鲲鹏代码迁移工具(Porting Advisor),帮助开发者加速将 x86 环境下的应用迁移至鲲鹏平台。本文根据华为鲲鹏计算工具链项目组的工具化软件迁移经验,总结了鲲鹏代码迁移工具的实际使用经验,期望能帮助开发者了解如何使用该工具,提高开发者的软件迁移效率。
1.1 源码迁移介绍
在国产替代的大背景下,鲲鹏计算平台是一个非常有潜力的产业。为了解决开发者在 x86 平台应用向鲲鹏平台移植的过程中遇到的一系列的痛点问题,华为推出了鲲鹏代码迁移工具(Porting Advisor)帮助开发者加速将 x86 环境下的用迁移至鲲鹏平台。本文根据华为鲲鹏计算工具链项目组的工具化软件迁移经验,总结了鲲鹏代码迁移工具的实际使 F 经验,期望能帮助开发者了解如何使用该工具,提高开发者的软件迁移效率。
1.2 工具支持的工具特性

1.3 源码迁移介绍
当用户能够提供源代码进行迁移分析时,可以使用源码迁移功能完成迁移工作源码迁移功能主要解决了用户的代码兼容性人工排查困难、严重依赖迁移的个人经验、需要反复依赖编译调错定位导致执行效率低等痛点。按照源代码到二进制文件的翻译方式的不同,代码迁移工具将编程语言分为两类:一类是编译型,—类是解释型。
支持源码类型

1.4 迁移流程

2. 实战项目一
2.1 前提条件
1.服务器和操作系统正常运行。2.Pc 端已经安装 sSH 远程登录工具。3.Porting Advisor 已在准备好的 x86 平台环境和鲲鹏平台环境中完成安装并正常运行。4 待迁移的相关软件包、源代码已准备就绪。
2.2 迁移计划
1.利用 Porting Advisor 的源码迁移功能对获取到的 smartdenovo 源代码进行扫描,获取其 $o 库依赖关系、可迁移性、迁移工作量等分析结果。2 根据 Porting Advisor 的源码迁移功能分析得到的 smartdenovo 依赖关系去准备对应的 sO 库。3.检查 smartdenovo 源代码的源代码分析报告,获取编译构建文件、.h/.c 等源代码文件的修改建议,并根据修改建议进行修改。4.用修改后的源代码进行编译,生成鲲鹏版本的 smartdenovo 软件。5.使用鲲鹏版本的 smartdenovo 软件进行部署和简单的验证。

2.3 开源软件 smartdenovo-master 迁移实战
步骤 1 从https://github.com/ruanjue/smartdenovo下载获取待使用的软件源码包 smartdenovo-master.zip.步骤 2︰进入 Porting Advisor“源码迁移”菜单进行扫描分析。在随后出现的相关配置项和按钮中,单如图 1 所行击“上传”,上传前面下载到的 smartdenovo-master.zip,并点中输入框,选择源码包为"smartdenovo-master”。其它几个选项根据我们实际的情况进行选择

在“源码迁移建议”页面,查看 Makefile 文件的修改建议,如图 1 迁移建议所示根据以上建议,Makefile 文件中需要给 CFLAGS 变量增加选项内谷 marcn=avo-a -iightea , i 要删除 CFLAGS 变量中的选项“-mpopcnt”和“-msse3"。修改后的代码(修改时进行了 x86_64 分支和 aarch64 分支的区分处理),如图 2 修改后的 makefile 所示。

在“源码迁移建议”页面,查看 ksw.c 文件的修改建议,如图 1 迁移建议所示这种提示都是关于 intrinsic 函数使用方面的内容。根据提供的建议,需要增加‘#include 'avx2neon.h”到 ksw.c 中以包含 avx2neon.h,并针对 x86 和 aarch64 分别设置头文件包含的分支定义,以确保在代码同时适配 x86 和 arch64 两种架构的情况下完成代码的修改,如图 2 代码修改所示。同时,需要下载 avx2neon 相关的头文件到 ksw.c 所在目录中.工由于 avx2neon 开源项目存在一部分定向开源函数,当这些开源函数在代码中出现时,会出现如图 1 建议源代码所示的建议。此时,用户需要访问 github 网站通过 README.md 来了解如何获取这些定向开源函数的代码文件。在获取这部分代码头文件后,将其放置到 avx2neon.h 所在目录内。

在完成对 Makefilb 和 ksw.c 的修改后,可以将修改过的整份源代码下载到鲲鹏环如图 1 列出文件信息和图 2 境中,执行 make clean && make 命令,完成编译动作,make 命令所示图中的 smartdenovo-master 是我们需要下载的源代码文件。

步骤 2︰将 smartdenovo-master 下载到本地之后,清理掉本地目录 smartdenovo-master 中工具生成的中间文件 Makefile.20210104220958.bak.0、ksw.c.20210104220958.bak.0。步骤 3 将本地目录 smartdenovo-master 上传到鲲鹏服务器上,执行编译安装动作。步骤 4Make 成功后,可以执行 make install 命令执行安装,并检查安装结果如图 3 所示

3. 实战项目二

从扫描报告中提供的依赖库信息看,该源码包不依赖于基本环境(OS 环境基本的安装依赖,如 GLIBC 等)外的其它依赖文件。



4. 总结
本次软件迁移实战中,通过对软件迁移过程的完整模拟,覆盖了用户利用代码迁移工具对迁移过程进行前期分析、中期修改和后期编译、重构、验证的过程。在其它软件的迁移中,可以参考本实践的思路和操作过程进行操作。
版权声明: 本文为 InfoQ 作者【乌龟哥哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/b20ad9a83b2c878cf607faf53】。文章转载请联系作者。
评论