转自:CSDN
作者:楚疏笃
学练结合,技能全速进阶
1.应用扫描
应用扫描原因
步骤
2.应用迁移
应用迁移原因
迁移策略选择
软件迁移过程
步骤
3.容器迁移实验
容器迁移的背景和原理
容器迁移整体步骤
4. 常见问题及解决思路
常见编译问题
常见功能问题
常见工具问题
1.应用扫描
应用扫描原因
该工具解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告。
步骤
软件准备
1.代码迁移工具–Dependency-advisor----kunpeng—X86包(https://www.huaweicloud.com/k... )
2.源代码包 (xx源代码包.zip)
硬件准备
1.基于x86的弹性云服务器
2.基于鲲鹏计算的弹性云服务器
X86服务器:
tar -zxvf Dependency-advisor-XXX.tar.gz
cd Dependency-advisor_XXX
sh install.sh web
cd /opt/depadv/depadmin
rz xx源代码包.zip
unzip xx源代码包.zip
https://116.63.92.86:8082/ (depadmin/Admin@9000)
分析源码,然后根据建议进行修改代码
代码修改后再进行分析
2.应用迁移
应用迁移原因
鲲鹏处理器与x86处理器的指令差异(ARM,X86)
迁移策略选择
1.解释型语言---无须重新编译---整体迁移鲲鹏计算平台
2.编译型语言--开源软件--获取源代码重新编译---整体迁移鲲鹏计算平台
3.商用闭源软件---选取可替代的其它软件---整体迁移鲲鹏计算平台
4.商用闭源软件---无法替代---无法迁移
5.windows应用----无法迁移
软件迁移过程
1.技术分析
2.编译迁移
3.功能验证
4.性能调优
5.规模商用
步骤
软件准备
1.代码迁移工具–Porting Adviso—X86包(https://www.huaweicloud.com/k... )
2.源代码包 (xx源代码包.zip)
硬件准备
1.基于x86的弹性云服务器
2.基于鲲鹏计算的弹性云服务器
X86服务器:
tar -zxvf Porting-advisor-XXX.tar.gz
cd Porting-advisor-x86_64-linux-XXX
sh install.sh web
cd /opt/portadv/portadmin
rz xx源代码包.zip
unzip xx源代码包.zip
https://116.63.92.86:8084/ (portadmin/Admin@9000)
分析源码,然后根据建议进行修改代码
代码修改后再进行分析
3.容器迁移实验
容器迁移的背景和原理
背景
x86平台获取的镜像是适用于x86平台,当迁移到鲲鹏平台,容器无法执行
在基于ARM的平台中,docker pull方式或者Dockerfile方式获取或者构建的镜像均为 基于ARM平台的,同样也无法在x86上运行
原理
把容器备份为Docker镜像快照。然后,该Docker镜像或者是被推送到了Docker注册中心,或者被作为tar包文件保存到了本地–备份。
使用Docker pull获取镜像或使用Dockerfile构建镜像–恢复
容器迁移整体步骤
1.Docker安装
2.Docker构建基础镜像
3.Dockerfile创建应用镜像
4.验证应用镜像
软件准备
1.docker
硬件准备
1.基于鲲鹏计算的弹性云服务器
鲲鹏服务器操作:
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum -y install docker
systemctl start docker
docker run hello-world
docker images
docker pull arm64v8/centos:7
docker run -it arm64v8/centos:7 /bin/bash
yum install wget gcc make libgcc gcc-c++ glibc-devel -y
exit
docker ps -a
docker commit -a "huawei.com" -m "redis images" ee7f76cec112 t_arm64v8/centos:7
mkdir -p ~/redis ~/redis/data
cd redis
#dockerfile构建迁移
vi Dockerfile
------------------
FROM t_arm64v8/centos:7
WORKDIR /home
RUN wget http://download.redis.io/releases/redis-5.0.5.tar.gz && \
tar -xvzf redis-5.0.5.tar.gz && \
mv redis-5.0.5/ redis && \
rm -f redis-5.0.5.tar.gz
WORKDIR /home/redis
RUN make && make install
EXPOSE 6379
CMD ["redis-server"]
------------------
docker build -f /root/redis/Dockerfile -t t_arm64v8/centos_redis:5.05 .
docker run -p 6379:6379 -v $PWD/data:/data -d t_arm64v8/centos_redis:5.05 redis-server --appendonly yes
docker ps
docker exec -it 566f60cc5f6f redis-cli
#测试
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set runkey "hello redis"
OK
127.0.0.1:6379> get runkey
"hello redis"
4. 常见问题及解决思路
常见编译问题
1.C/C++语言char数据类型默认符号不一致问题
在编译选项中加入“-fsigned-char”选项,指定ARM64平台下的char为有符号数;
将char类型直接声明为有符号char类型:signed char。
2.C/C++语言中调用汇编指令编译错误
本例中的代码调用了x86平台的汇编指令,修改为鲲鹏处理器对应的指令即可;
部分功能可以修改为使用编译器自带的builtin函数,在基本不降低性能的前提下,提升代码的可移植性。
3.编译错误:无法识别-m64编译选项
将鲲鹏处理器平台对应的编译选项设置为-mabi=lp64,重新编译即可。
常见功能问题
1.弱内存序问题
使用内存屏障指令保证对共享数据的访问和预期一致
2.超出整型取值范围时浮点型转整型与x86不一致
C/C++语言double类型超出整型取值范围向整型转换参照
3.对结构体中的变量进行原子操作时程序异常
代码中搜索“#pragma pack”关键字(该宏改变了编译器默认 的对齐方式),找到使用了字节对齐的结构体,如果结构体中变 量会被作为原子操作、自旋锁、互斥锁、信号量、读写锁的输入 参数,则需要修改代码保证这些变量按变量长度对齐
4.加速器初始化失败
1.检查如下加速器驱动是否加载成功加载到内核
2.检查/usr/lib64和OpenSSL安装目录是否有加速器引擎库,且建立正确的软链接
3.检查环境变量LD_LIBRARY_PATH是否包含OpenSSL库路径,通过export命令增
常见工具问题
1.迁移工具源码路径错误
源代码没有放置到porting工具的安装目录下—在工具web界面,重新填写源代码存放路径,单击“分析”。弹 窗页面显示任务分析进度,分析完成后,自动跳转至“移植报告” 界面。
2.Maven软件仓库编译错误:未配置代理
修改maven安装路径下的conf/settings.xml,在 proxy标签中添加代理信息
3.Maven软件仓库编译错误:无法找到依赖库
修改maven安装路径下的conf/settings.xml,在 mirror标签中设置maven远程仓库路径,比如阿里云
更多鲲鹏HCIA认证练习题请关注中国芯动态。