写点什么

基于华为云弹性云服务器 ECS(搭载 openEuler 的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】

作者:科技云未来
  • 2022 年 8 月 08 日
  • 本文字数:4299 字

    阅读完需:约 14 分钟

【摘要】 基于华为云弹性云服务器 ESC(鲲鹏服务器),部署鲲鹏代码迁移工具利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行

零、前情提要

先来说句题外话,最近华为鲲鹏 DevKit 训练营开始了,有兴趣的同学可以试一试!





更多详情可参考鲲鹏开发者社区。

一、目标

基于华为云弹性云服务器 ECS,自行部署鲲鹏代码迁移工具,完成鲲鹏代码迁移工具实践——进行 Megahit 源码迁移。利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行。

华为云弹性云服务器 ECS 配置:



二、操作前提

1. 认真观看迁移工具的实战视频

可到鲲鹏开发者社区查看,还有很多详细的文档资料啊。

2. (可选)申请远程实验室

因为 ECS 需要购买,如果不方便购买,可以到在鲲鹏社区申请免费的远程实验室,操作系统选择 OpenEuler。

不得不说,远程实验室的配置还是很强大的啊。



申请之后,会收到一封邮件,邮件提供了账号等信息,注意要按照邮件指导,在 VPN 端登录,之后才能使用远程实验室。

注意,请卸载除官方提供的 VPN 软件外的其他 VPN 软件,否则可能即使 VPN 登录成功,也无法访问,切记!!!这是血泪教训。

下面操作对 ECS 和远程实验室的操作都做了介绍,无论选择哪种方式,都可以的!

三、准备工作

如果你使用的是远程实验室,按照官方介绍,是打开工具的 web 网页 ,并进行登录。该 web 界面的 IP 地址,账号以及密码等信息在邮件中有详细说明哦。注意如果提示风险,要选择继续哦。



登录后的界面为:



好了,就是先看看哈,验证下可以正常访问远程实验室,后面会用到,这里我们先来做准备工作,用 MobaXterm 登录刚购买的 ECS 啊。

下面准备 Megahit 源码。这里简单介绍下哈,Megahit 是一个超快速和内存高效的 NGS 汇编程序。它是针对多基因组优化的,但也适用于一般的单基因组组装和单细胞组装。需要注意的是 Megahit 源码包存在大量汇编,后面我们会注意到迁移到鲲鹏平台前需要识别并验证通过“鲲鹏代码迁移工具”迁移后的代码是否正确,以及识别出是否还有“鲲鹏代码迁移工具”遗漏的相关文件。

1. 使用 MobaXterm 工具,以 root 用户登录服务器。

就是 ssh 登录,常规操作了,如果看到类似如下界面,说明登录成功:



2. 进入“鲲鹏代码迁移工具”源码文件存放路径。

cd /opt/portadv/portadmin/sourcecode/
复制代码



3. 下载 Megahit 源码。

git clone https://github.com/voutcn/megahit.git
复制代码



4. 将代码进行合并。

注意如下代码不对,正确代码请见这小项最后。

cd megahit/ && git submodule update -init
复制代码

这里注意不要直接复制教程中所给的代码,因为教程中的-init中的-符号有问题,会报错如下:



或者



其实-init中的-符号应该是英文下的才对,也可以看到修改后-init变为了蓝色,MobaXterm 就是强。



但看提示好像还是不太对啊,仔细看会发现打印信息给了提示,应该是--init



cd megahit/ && git submodule update --init
复制代码

应该是正确运行了,结果如图,没什么打印信息:



5. 创建构建文件夹并进入。

mkdir build && cd build
复制代码

6. 生成 Makefile 文件。

cmake .. -DCMAKE_BUILD_TYPE=Release
复制代码

注意,这里运行可能报错,如下:



这可能是没有设置cmake路径或者没安装camke,我们使用如下命令,来看看:

cmake --version
复制代码



那来安装一下吧,不管有没有了,马上行动起来。这里我安装的是cmake 3.15,不是最新版哈,下面来介绍下安装,来嘞。

获取源码,并解压

wget https://down.24kplus.com/linux/cmake-3.15.3.tar.gztar -zxf cmake-3.15.3.tar.gzcd cmake-3.15.3
复制代码



编译安装

./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake
复制代码



运行中的截图(这个过程有点长,大家可以先休息一下哈):



运行完成截图:



接下来执行命令:

make
复制代码



运行完成截图:



那么接下来执行命令:

sudo make install
复制代码



下面检查是否正确安装,执行如下命令:

cmake --version
复制代码

如果看到如下界面,表示成功了:



好了,接下来可以执行之前的命令了:

cmake .. -DCMAKE_BUILD_TYPE=Release
复制代码

得到运行结果:



7. 修改 megahit 目录属组。

cd ../ chown -R porting:porting *
复制代码



四、源码迁移

下面是重头戏了哈,使用鲲鹏代码迁移工具进行代码迁移,就是用我们之前打开的 Web 界面,赶紧来试试吧。

注意,Web 界面长时间不操作会自动退

出登录,需要重新登录

注意,论坛发帖,编辑帖子时间一长,也会显示保存问题,大家记得及时保存,最好,写一些就发布,之后再编辑,再发布,以免丢了内容(虽然有草稿箱),这都是血泪教学啊,切记!!!

1. 源码分析参数填充



上述参数说明:

源码文件存放路径:

选择源码包 megahit/build,就是之前我们可下载了megahit,这个很有意思,点击一下源码文件存放路径的方框,就会弹出一个下滑栏,选择我们的路径即可:



目标操作系统:

openEuler 20.03

这点没问题,这个在申请远程实验室的时候,我们就说了要选这个系统。

编译器版本:

GCC 7,3

这里要说明下,作业帖给的是BiSheng Compiler 2.1.0,应该是毕昇编译器,但没这个选项,那我们就看看具体版本吧,在 MobaXterm 执行命令:

python
复制代码

可以看到:



嗯,是GCC 7,3无疑了。

注意执行如下命令亦可:

python3
复制代码



好了,全选好了,就执行开始分析吧!



这是运行中界面:



这是运行完成的界面:



2. 任务执行成功,查看源码报告。

点击上图中右上角的报告即可查看,可跳转到如图界面:



3. 点击报告源码迁移建议,查看需要迁移的文件。

注意,我这里提示让跳转到最新报告查看,跳转即可,因为之前我运行了一次,如果你是第一次运行,不会有此问题哈。



我们应该依次单击上襦左侧文件列表,查看需要迁移的文件。

根据系统提示的修改建议进行修改,鼠标点击内嵌汇编代码(cpu_dispatch.h), 可以看到四处待修改点。如图所示的红色波浪线展示的部分。

注意,我们将光标悬停在待修改代码出,就会弹出修改建议了



当然,我们能根据给出的建议手动修改,但是还有更便捷的自动修改哦,更快,不过注意自动修改后检查一下。自动修改很简单,在之前光标悬停的基础上,选择Quick Fix,如图所示:



之后在如下图所示的两个选项中任选一个即可。



来看看效果:

这是第一处的修改后:



这是第二处的修改后:



这是第三处的修改后:



我们仔细看看这些长段的绿色注释部分,可以看到自动修改已经给出了具体建议。两处修改点所给的建议应该还是准确,直接去掉注释,效果如下:




最后,千万别忘了点击 保存。要知道,人生悲哀莫过于编辑的文件没有保存啊。



你以为这就结束了?当然没有,接着来吧!

根据系统提示进行修改,鼠标移至构建文件(megahit_core.dir/flags.make)待修改点处,可以看到两处待修改点。



这建议很中肯啊,应该是提示 Kunpeng platform 不支持BMI2POPCNT指令,手动修改代码,删除指令-mbmi2-mpopcnt指令。

这还没完,别忘了,还有一处呢!

鼠标移至构建文件(megahit_core_popcnt.dir/flags.make)待修改点处,可以看到一处待修改点。



根据建议提示 Kunpeng platform 不支持POPCNT指令,手动修改代码,删除指令-mpopcnt指令。删除后,红波浪线马上就消失了哈。



还是那句话,千万别忘了点击 保存。

五、迁移后重新编译

这里就又回到 MobaXterm 了。

1. 添加KunpengTrans.h头文件

KunpengTrans.h头文件添加到目录/opt/poradv/portadmin/sourcecode/megahit/src/utils。执行如下拷贝命令:

cp /opt/portadv/tools/inline_asm/config/KunpengTrans.h /opt/portadv/portadmin/sourcecode/megahit/src/utils/
复制代码



2. 再次执行 make 命令。

cd /opt/portadv/portadmin/sourcecode/megahit/build/make
复制代码

在 ECS 上需要执行命令:

cd /home/tjulitianyi/megahit/buildmake
复制代码

见证奇迹的时候到了!



尴尬,报错了,赶紧看看!



显示没有该文件,但这个文件<x86intrin.h>x86相关的,应该是x86平台的系统头文件,而我们用的是鲲鹏处理器,基于ARM的,本来就没有这个文件哈。下面,执行vi命令进入文本,注释 11 行代码:

vi /opt/portadv/portadmin/sourcecode/megahit/src/kmlib/kmrns.h// #include <x86intrin.h>改为//#include <x86intrin.h>
复制代码

对了,在英文模式下,单击键盘上的字母I就能编辑了。



退出保存,需要先点击键盘左上角的Esc键,之后执行:

:wq!
复制代码

再次执行 make 命令,编译通过。

注意,编译是比较耗费时间的,大家可以先休息一下,眺望远方,放松下眼睛。编译运行中界面:



top命令查看 CPU 运行情况:



经过大约 2 分钟的等待,编译完成了,期间运行内存在 3.5GB 上下浮动。完成界面如下图所示:



六、运行和验证

记住啊,目前我们是使用 MobaXterm 工具,以 root 用户登录远程实验室的服务器。

1. 下面,进入可执行文件的安装目录。其实,就是当前目录,因为我们之前就是在这个目录编译的,这里是为了再确认一下。

cd /opt/portadv/portadmin/sourcecode/megahit/build/
复制代码

2. 执行以下命令运行:

make simple_test
复制代码

注意:make simple_test 里用到的.fa 文件是 github 上下载软件包的时候就自带了,无需额外下载。

运行截图:



最终运行结果展示:



搞定了,完结,撒花!!!

结语

如果是体验过程中,有哪些要反馈或吐槽的?

1.VPN 连接

如果你使用的是鲲鹏社区的免费远程实验室,那么这个 VPN 算一个,我正在调试程序,居然自己断开了,报错如图所示:



退出 VPN 再登录也不好用,有点不稳点吧。而且太耽误进度了,我可就差重新编译验证了。好吧,其实我坦白,重新 make 时报错了,我正准备定位问题,修改呢。正在兴头上,突然就断了???

不过我可能错怪它了,上图报错可能是我本地网络较差,经过重启电脑,等待之后就又能连接上了。

2. 鲲鹏迁移工具的 Web 界面显示文件名称不全

第二个就是鲲鹏迁移工具的 Web 界面了,在源码迁移建议那里无法查看完整文件名称,鼠标悬停也不行,也无法调整显示宽度,有点不友好啊。



【华为云至简致远】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/352809


华为伙伴暨开发者大会 2022 火热来袭,大会采用线上直播+线下 80 余个分会场联动的形式,聚焦伙伴和开发者最为关切的话题、释放更多潜力,携手伙伴共同成就。点击了解重磅内容不容错过!



【精彩活动】

勇往直前·做全能开发者→12 场技术直播前瞻,8 大技术宝典高能输出,还有代码密室、知识竞赛等多轮神秘任务等你来挑战。即刻闯关,开启终极大奖!戳【勇往直前】踏上全能开发者晋级之路吧!

【技术专题】

未来已来,2022 技术探秘→聚焦华为各领域的前沿技术、重磅开源项目、创新应用实践。站在智能世界的入口,探索未来如何照进现实,干货满满点击了解

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用户头像

还未添加个人签名 2019.07.24 加入

还未添加个人简介

评论

发布
暂无评论
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】_鲲鹏服务器_科技云未来_InfoQ写作社区