鯤鵬HCIA認證之技能進階(一)

1.應用掃描

應用掃描原因

該工具解決了客戶軟件遷移評估分析過程中人工分析投入大、準確率低、整體效率低下的痛點,通過該工具能夠自動分析並輸出指導報告。

步驟

軟件準備
1.代碼遷移工具–Dependency-advisor----kunpeng—X86包(https://www.huaweicloud.com/kunpeng/software/dependencyadvisor.html )
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/kunpeng/software/portingadvisor.html )
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遠程倉庫路徑,比如阿里雲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章