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

【摘要】 基于华为云弹性云服务器ESC(鲲鹏服务器),部署鲲鹏代码迁移工具利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行
零、前情提要先来说句题外话,最近华为鲲鹏DevKit训练营开始了,有兴趣的同学可以试一试!
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

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

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

更多详情可参考鲲鹏开发者社区。一、目标基于华为云弹性云服务器ECS,自行部署鲲鹏代码迁移工具,完成鲲鹏代码迁移工具实践——进行Megahit源码迁移。利用扫描迁移工具进行源码分析,根据扫描建议修改源码,让源码在鲲鹏平台可以正常编译运行。华为云弹性云服务器ECS配置:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

二、操作前提1. 认真观看迁移工具的实战视频可到鲲鹏开发者社区查看,还有很多详细的文档资料啊。2. (可选)申请远程实验室因为ECS需要购买,如果不方便购买,可以到在鲲鹏社区申请免费的远程实验室,操作系统选择OpenEuler。不得不说,远程实验室的配置还是很强大的啊。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

申请之后,会收到一封邮件,邮件提供了账号等信息,注意要按照邮件指导,在 VPN 端登录,之后才能使用远程实验室。注意,请卸载除官方提供的VPN软件外的其他VPN软件,否则可能即使VPN登录成功,也无法访问,切记!!!这是血泪教训。下面操作对ECS和远程实验室的操作都做了介绍,无论选择哪种方式,都可以的!三、准备工作如果你使用的是远程实验室,按照官方介绍,是打开工具的web网页 ,并进行登录。该web界面的IP地址,账号以及密码等信息在邮件中有详细说明哦。注意如果提示风险,要选择继续哦。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

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

好了,就是先看看哈,验证下可以正常访问远程实验室,后面会用到,这里我们先来做准备工作,用MobaXterm登录刚购买的ECS啊。下面准备Megahit源码。这里简单介绍下哈,Megahit是一个超快速和内存高效的NGS汇编程序。它是针对多基因组优化的,但也适用于一般的单基因组组装和单细胞组装。需要注意的是Megahit源码包存在大量汇编,后面我们会注意到迁移到鲲鹏平台前需要识别并验证通过“鲲鹏代码迁移工具”迁移后的代码是否正确,以及识别出是否还有“鲲鹏代码迁移工具”遗漏的相关文件。1. 使用MobaXterm工具,以root用户登录服务器。就是ssh登录,常规操作了,如果看到类似如下界面,说明登录成功:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 进入“鲲鹏代码迁移工具”源码文件存放路径。cd /opt/portadv/portadmin/sourcecode/
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 下载Megahit源码。git clone https://github.com/voutcn/meg...
【基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】】基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 将代码进行合并。注意如下代码不对,正确代码请见这小项最后。cd megahit/ && git submodule update -init
    这里注意不要直接复制教程中所给的代码,因为教程中的-init中的-符号有问题,会报错如下:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

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

    其实-init中的-符号应该是英文下的才对,也可以看到修改后-init变为了蓝色,MobaXterm就是强。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    但看提示好像还是不太对啊,仔细看会发现打印信息给了提示,应该是--init。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    cd megahit/ && git submodule update --init
    应该是正确运行了,结果如图,没什么打印信息:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片
  2. 创建构建文件夹并进入。mkdir build && cd build
  3. 生成Makefile文件。cmake .. -DCMAKE_BUILD_TYPE=Release
    注意,这里运行可能报错,如下:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    这可能是没有设置cmake路径或者没安装camke,我们使用如下命令,来看看:cmake --version
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

那来安装一下吧,不管有没有了,马上行动起来。这里我安装的是cmake 3.15,不是最新版哈,下面来介绍下安装,来嘞。获取源码,并解压wget https://down.24kplus.com/linu...
tar -zxf cmake-3.15.3.tar.gz
cd cmake-3.15.3
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

编译安装./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

运行中的截图(这个过程有点长,大家可以先休息一下哈):
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

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

接下来执行命令:make
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

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

那么接下来执行命令:sudo make install
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

下面检查是否正确安装,执行如下命令:cmake --version
如果看到如下界面,表示成功了:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

好了,接下来可以执行之前的命令了:cmake .. -DCMAKE_BUILD_TYPE=Release
得到运行结果:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 修改megahit目录属组。cd ../
    chown -R porting:porting *
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

四、源码迁移下面是重头戏了哈,使用鲲鹏代码迁移工具进行代码迁移,就是用我们之前打开的Web界面,赶紧来试试吧。注意,Web界面长时间不操作会自动退
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

出登录,需要重新登录注意,论坛发帖,编辑帖子时间一长,也会显示保存问题,大家记得及时保存,最好,写一些就发布,之后再编辑,再发布,以免丢了内容(虽然有草稿箱),这都是血泪教学啊,切记!!!1. 源码分析参数填充
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

上述参数说明:源码文件存放路径:选择源码包megahit/build,就是之前我们可下载了megahit,这个很有意思,点击一下源码文件存放路径的方框,就会弹出一个下滑栏,选择我们的路径即可:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

目标操作系统:openEuler 20.03这点没问题,这个在申请远程实验室的时候,我们就说了要选这个系统。编译器版本:GCC 7,3这里要说明下,作业帖给的是BiSheng Compiler 2.1.0,应该是毕昇编译器,但没这个选项,那我们就看看具体版本吧,在MobaXterm执行命令:python
可以看到:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

嗯,是GCC 7,3无疑了。注意执行如下命令亦可:python3
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

好了,全选好了,就执行开始分析吧!
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

这是运行中界面:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

这是运行完成的界面:
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 任务执行成功,查看源码报告。点击上图中右上角的报告即可查看,可跳转到如图界面:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片
  2. 点击报告源码迁移建议,查看需要迁移的文件。注意,我这里提示让跳转到最新报告查看,跳转即可,因为之前我运行了一次,如果你是第一次运行,不会有此问题哈。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    我们应该依次单击上襦左侧文件列表,查看需要迁移的文件。根据系统提示的修改建议进行修改,鼠标点击内嵌汇编代码(cpu_dispatch.h), 可以看到四处待修改点。如图所示的红色波浪线展示的部分。注意,我们将光标悬停在待修改代码出,就会弹出修改建议了
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    当然,我们能根据给出的建议手动修改,但是还有更便捷的自动修改哦,更快,不过注意自动修改后检查一下。自动修改很简单,在之前光标悬停的基础上,选择Quick Fix,如图所示:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    之后在如下图所示的两个选项中任选一个即可。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    来看看效果:这是第一处的修改后:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    这是第二处的修改后:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    这是第三处的修改后:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    我们仔细看看这些长段的绿色注释部分,可以看到自动修改已经给出了具体建议。两处修改点所给的建议应该还是准确,直接去掉注释,效果如下:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

最后,千万别忘了点击 保存。要知道,人生悲哀莫过于编辑的文件没有保存啊。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

你以为这就结束了?当然没有,接着来吧!根据系统提示进行修改,鼠标移至构建文件(megahit_core.dir/flags.make)待修改点处,可以看到两处待修改点。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

这建议很中肯啊,应该是提示Kunpeng platform不支持BMI2和POPCNT指令,手动修改代码,删除指令-mbmi2和-mpopcnt指令。这还没完,别忘了,还有一处呢!鼠标移至构建文件(megahit_core_popcnt.dir/flags.make)待修改点处,可以看到一处待修改点。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

根据建议提示Kunpeng platform不支持POPCNT指令,手动修改代码,删除指令-mpopcnt指令。删除后,红波浪线马上就消失了哈。
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

还是那句话,千万别忘了点击 保存。五、迁移后重新编译这里就又回到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/
基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
文章图片

  1. 再次执行make命令。cd /opt/portadv/portadmin/sourcecode/megahit/build/
    make
    在ECS上需要执行命令:cd /home/tjulitianyi/megahit/build
    make
    见证奇迹的时候到了!
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    尴尬,报错了,赶紧看看!
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    显示没有该文件,但这个文件是x86相关的,应该是x86平台的系统头文件,而我们用的是鲲鹏处理器,基于ARM的,本来就没有这个文件哈。下面,执行vi命令进入文本,注释11行代码:vi /opt/portadv/portadmin/sourcecode/megahit/src/kmlib/kmrns.h
    // #include 改为//#include
    对了,在英文模式下,单击键盘上的字母I就能编辑了。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    退出保存,需要先点击键盘左上角的Esc键,之后执行::wq!
    再次执行make命令,编译通过。注意,编译是比较耗费时间的,大家可以先休息一下,眺望远方,放松下眼睛。编译运行中界面:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    top命令查看CPU运行情况:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    经过大约2分钟的等待,编译完成了,期间运行内存在3.5GB上下浮动。完成界面如下图所示:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    六、运行和验证记住啊,目前我们是使用MobaXterm工具,以root用户登录远程实验室的服务器。1. 下面,进入可执行文件的安装目录。其实,就是当前目录,因为我们之前就是在这个目录编译的,这里是为了再确认一下。cd /opt/portadv/portadmin/sourcecode/megahit/build/
  2. 执行以下命令运行:make simple_test
    注意:make simple_test里用到的.fa文件是github上下载软件包的时候就自带了,无需额外下载。运行截图:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    最终运行结果展示:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    搞定了,完结,撒花!!!结语如果是体验过程中,有哪些要反馈或吐槽的?1.VPN连接如果你使用的是鲲鹏社区的免费远程实验室,那么这个VPN算一个,我正在调试程序,居然自己断开了,报错如图所示:
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    退出VPN再登录也不好用,有点不稳点吧。而且太耽误进度了,我可就差重新编译验证了。好吧,其实我坦白,重新make时报错了,我正准备定位问题,修改呢。正在兴头上,突然就断了???不过我可能错怪它了,上图报错可能是我本地网络较差,经过重启电脑,等待之后就又能连接上了。2. 鲲鹏迁移工具的Web界面显示文件名称不全第二个就是鲲鹏迁移工具的Web界面了,在源码迁移建议那里无法查看完整文件名称,鼠标悬停也不行,也无法调整显示宽度,有点不友好啊。
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    【华为云至简致远】有奖征文火热进行中:https://bbs.huaweicloud.com/b...华为伙伴暨开发者大会2022火热来袭,大会采用线上直播+线下80余个分会场联动的形式,聚焦伙伴和开发者最为关切的话题、释放更多潜力,携手伙伴共同成就。点击了解重磅内容不容错过!
    基于华为云弹性云服务器ECS(搭载openEuler的鲲鹏通用计算增强型)完成鲲鹏代码迁移工具实践【华为云至简致远】
    文章图片

    【精彩活动】勇往直前·做全能开发者→12场技术直播前瞻,8大技术宝典高能输出,还有代码密室、知识竞赛等多轮神秘任务等你来挑战。即刻闯关,开启终极大奖!戳【勇往直前】踏上全能开发者晋级之路吧!【技术专题】未来已来,2022技术探秘→聚焦华为各领域的前沿技术、重磅开源项目、创新应用实践。站在智能世界的入口,探索未来如何照进现实,干货满满点击了解【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

    推荐阅读