迁出X86架构,你准备好了吗?

       由第一计算平面迁移到第二计算平面,也就是由原来的X86架构迁移到ARM架构,必将成为中国IT行业发展历史上的重要里程碑。当性能和安全摆在企业面前,让我们选择时,安全当然是被放在第一的位置。但是ARM架构处理器的性能本身还是非常优秀,最早ARM架构的处理器多由于军工领域和民用的视频音频解压缩处理领域。现在华为获得ARM的授权,在鲲鹏处理器研发上不断推出处理器,解决了服务器最核心的CPU国产化问题,初步建立了鲲鹏生态环境,已经具备由X86架构迁移到ARM架构的技术支撑,例如web应用服务由Nginx、Apache、Tomcat,中间件由Memcached、Redis、Kafka支持,数据库由Mysql、Mariadb和PostgreSQL支持,大数据由Hadoop、Hive、HBase支撑,开发语言则支持C、C++、Java、Ruby、Python、Perl、JavaScript、Go语言,操作系统则由CentOS、Ubuntu、openEuler、中标麒麟、UOS等支持。

       整个迁移过程根据企业原来的应用系统的技术架构不同,决定了不同的难度和工作量。我曾经经历建设银行的新一代业务系统迁移,是整个架构的迁移,包括了数据库、应用软件两者都需要改造和迁移。也经历过中国人寿由于Informix厂家不再提供技术支持而不得不迁移到Oracle数据库的过程。都需要消耗巨大的物力、财力和工作量进行迁移工作。这里面如何保证业务不受影响或对业务影响最小,保证业务连续性,以及迁移前后业务如何切换方案是需要经过非常周密的规划设计的。迁移期间除了数据库设计、数据迁移、代码改造之外,工作量最大的就是验证测试工作,验证迁移工具的正确性,迁移前后数据的一致性、完整性、连续性等,以及对应用系统业务功能、性能、安全等方面的测试验证。今天我简单介绍一下代码迁移过程中如何保证代码本身安全的问题。

         最近看了华为鲲鹏开发套件的设计者张汝涛的研究资料《如何实现从 x86 到鲲鹏平台 90%C/C++ 代码自动迁移》,因为Java、Python等由JVM解释执行或CPU解释执行的开发语言,只要不依赖C和C++语言开发的公共组件,java语言直接更换JVM即可,而Python需要更换安装相应的Python解释器即可。而如果涉及到C和C++语言,则需要对代码进行适当修改,并进行重新编译。根据张汝涛介绍,华为在鲲鹏社区提供了大量的兼容鲲鹏计算平台的开源软件包供开发者下载直接使用,但是这些开源软件包的安全性如何保证呢?根据Gartner统计,每年开源软件中暴露出4000个以上的安全漏洞,而且这个数字还在快速增长。对于开源软件包的管理需要引起足够重视。

      下图是华为给出的C/C++程序迁移过程:

 

       在软件评估阶段,首先使用Dependency Advisor对软件进行扫描,需要用户提供程序源代码以及依赖的第三方库,扫描完成给出可移植性评估报告。在这个过程中,可以借助工具进行代码成分分析和安全漏洞分析,分析引用的第三方库软件版本以及是否存在安全漏洞,为下一步更换相应的第三方库做准备。

       在软件移植阶段,华为提供了Porting Advisor工具,该工具会检查用户软件代码并提供修改建议。开发人员对代码进行修改完成后,编译通过并不代表软件代码中没有缺陷,由于当前负责代码修改的工程师很可能已经不是原来开发该代码的工程师了,如果只是局部的修改代码,则很可能会影响整个代码的安全。这时候,我们建议通过工具绘制出的控制流图和函数调用图,帮助代码维护人员快速熟悉代码结构,指针变量、全局变量和局部变量的关系等。当修改代码后,使用工具进行代码的快速扫描检测,发现代码由于修改可能导致的缺陷和安全漏洞。

         性能优化阶段,通过Tuning Kit进行CPU、内存、磁盘IO、网络IO等资源采集,以发现程序性能瓶颈。如果发现代码性能瓶颈,则可以借助工具协助进行整个程序的函数调用关系、函数调用次数、循环嵌套深度等分析,快速发现代码中的瓶颈并进行修复。

       在代码移植过程中,如果对代码自主研发比率感兴趣,可以借助工具分析一下到底代码中有多少比例是自主开发的,多少是引用的第三方库。如果程序代码有多个版本,借助工具中的两个程序代码对比功能,可以快速的发现版本之间的代码差别,可以定位到行级。相对开发人员常用的WinDiff等单文本比较工具,对比工具应该能够从项目工程视角,进行文件级和函数级对比分析。

       面向X86架构到ARM架构的迁移,客户移植过程中的客户需求必定是多样化的,这就为基于代码检测分析的工具厂商提供了可以发挥的空间。快速的代码自动化迁移、扫描、检测、性能优化等是必然趋势。

 

关注安全  关注作者

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