如今,我们几乎所有软件都建立在 x86 架构之上 ,在互联网漫长的演进过程中,各大公司拼尽全力在迭代上层架构、优化整体性能,开发者们该用的、能用的招儿想必都用上了,接下来呢?如果底层架构不出现大的革新,接下来还有什么方法大幅提升生产力?各位开发者还有其他选择吗?

1 从大型机到 x86 架构,计算的下一个拐点在哪?

上世纪 60 年代,IBM 发布了 System360 这样的大型计算机,促进了人类社会巨大的进步,卫星气象预测、登月等活动都依赖于这样的大型计算机完成。如今,银行的核心系统仍然在运行着这种大型机。但是,这种大型机有一个很大的问题:只有比较富裕的机构才能用得起,比如银行。
 
于是,上世纪 70 年代,DEC 解决了这个问题,这是一个值得注意的拐点:研发人员用小型机发布了 PDP-11,大幅度降低了大型机的成本,让大量企业能够用得起这样的计算机,这是一次巨大的进步。
 
随后,英特尔出现了,不光企业能用计算机,个人也能用了,每个人桌面上都有一台电脑。上世纪 70 年代,依赖于英特尔 x86 芯片的 PC 机出现了,其最大的贡献就是让计算机从企业走向个人。
 
发展至今,几乎所有软件均建立在 x86 架构之上 ,随着近二十年中国互联网的快速演进,各大公司在上层架构的设计与优化方面投入了大量精力,在系统整体性能方面,该用的、能用的都用上了。
 
如今,新的拐点出现了:计算已经变成手持的了,每个人手上都有智能终端。不仅如此,应用场景也在变:移动应用逐渐云化,5G 催生了云游戏的诞生;Web 应用的加密性越来越重要,HTTPS 流量越来越大;大数据分布式并行计算成为主流等,这些都让 x86 架构的不足逐渐显露出来。
 
以移动应用运行为例,传统的 x86 平台依赖指令翻译运行安卓应用,性能损耗大,兼容性也无法保障。此外,服务器端有很多应用需要测试,过去的做法是真机测试,或者手机开发仿真环境,这种做法的资源灵活度低、故障率高、可靠性和易用性都比较差。而真正的革新可能还是需要自底向上,甚至直达芯片级。x86 架构未来能满足开发者的诉求吗?有可能,因为 Intel 一直是比较开放的,也投入了很多力量在社区建设,包括开源上面。
 
但是,企业和开发者需要更多选择。单位芯片面积算力更强、众核架构设计的 ARM 开始被注意。一个 ARM 核的面积仅为 x86 核的七分之一,同样的芯片尺寸下,ARM 的核数是 x86 的 4 倍以上,由于芯片的物理尺寸有限制,无法无限制增加,ARM 的众核横向扩展更符合分布式业务需求。
 
2019 年,华为鲲鹏 920 处理器正式发布,这是一个基于 ARM 架构,采用最新制程工艺制造,可以支持 32/48/64 个内核,主频可达 2.6GHz,支持 8 通道 DDR4、PCIe 4.0 和 100G RoCE 网络的处理器。
相较于 x86 架构,华为鲲鹏处理器的优势较为明显:
  • 多核,性能提升 20%,云应用支持度更好,更灵活;
  • 支持 8 个 DDR 通道,传统 CPU 仅 6 个,吞吐率提升 25%;
  • SOC 芯片,一颗芯片四合一,包含 CPU、南桥、网卡和 SAS 控制器,效能提升 30%;
  • 集成压缩、加密、重删等硬件加速引擎的处理器,大大提升应用的性能,释放更多 CPU 算力。
值得注意的是,鲲鹏的基础生态也已经相当完善,特别是与开发者关系较为密切的主流技术基本都支持,比如 Web 支持 Nginx、Apache、Tomcat,中间件支持 Memcached、Redis、Kafka,数据库支持 MySQL、Mariadb、PostgreSQL,大数据支持 Hadoop、Hive、HBase,开发语言支持 Go,C/C++,Java,Ruby、Perl、Python,JavaScript 等,操作系统支持 openEuler、Ubuntu、CentOS、中标麒麟 、UOS 等。
 
对于新的应用而言,可以很轻松的选择基于鲲鹏平台开发。那么,传统架构怎么办,基于 x86 的服务如何迁移?

2 跨平台软件迁移实践

软件迁移是指将某个可运行的程序,由原来的环境迁移到另一个环境,并重新运行。改变的环境可能是处理器架构、操作系统、软件运行环境等。总的来说,软件移植是个“脏活”,需要开发者修改源码、编译、再修改、再编译,费时费力。
 
对此,华为计算产品线主任工程师,华为鲲鹏开发套件的设计者张汝涛在最近的《如何实现从 x86 到鲲鹏平台 90%C/C++ 代码自动迁移》的演讲中表示,华为提供了鲲鹏开发者套件,帮助用户基于 C/C++ 源码提升移植效率;其次,鲲鹏社区提供了大量的兼容鲲鹏计算平台的开源软件包供开发者下载直接使用,不用开发者二次移植;另外,移植过程中碰到的任何问题,在鲲鹏社区或 OpenLab 有专业的技术人员在线进行支持。
 
简单来说,应用迁移至 x86 平台可以分为三大类型:
第一类是 Java、Python 等解释型语言。由于这类语言本身支持跨平台,只要运行环境 OK 即可,前提是原应用在运行中不依赖 C 或 C++ 语言编译产生的公共组件(SO 库文件或可执行文件)。如果满足上述条件,则应用不需要重新编译,基于 x86 的 Jar 包可以直接运行在 ARM64 服务器,不需要维护两个分支代码,这是最简单的一类迁移。
 
第二类是 C、C++ 或 Go 等编译型语言。这类应用需要采用 ARM64 的 GCC 编译器重新编译即可运行,只要有源代码就不用担心;如果没有源代码,华为也提供了相关的方案,下文详述。
 
第三类是汇编语言应用。这类应用本身占比较少,重新编译不行,需要重新写一遍,如果不能重写,在指令集翻译工具研发推出后也可以解决这个问题。
实现 90% 的 C、C++ 代码自动迁移
如上所述,C、C++ 语言的应用迁移略复杂。C 语言自诞生以来,被广泛用于开发各行各业的软件。C++ 语言既保留了 C 语言有效性、灵活性等特点,又增加了面对对象编程的支持,具有强大的编程功能,多年来一直是程序喜爱的编程语言之一。
 
C/C++ 是编译型语言,硬件平台的切换将导致原有 C/C++ 程序不能运行,开发者不得不解决软件移植问题。基于编译型语言开发的应用程序,其编译后所得可执行程序,二进制执行指令是 CPU 架构相关的。因此,基于 x86 架构编译的 C/C++ 语言应用程序,无法直接在 ARM 服务器运行,需要进行移植编译。这里的移植前提一是基于 Linux 的应用程序;二是无 x86 汇编指令代码,具体步骤如下所示:
在编译的过程中,开发者可能会遇到一些问题:
  • 软件工程构建文件中包含 -march 与 -mtune 编译参数,如果提示参数不兼容,则需要调整,可能兼容的调整后参数为:-march=ARMv8.1-a -tune=tsv110
  • 编译时遇到找不到函数、缺少库文件等错误,安装对应的鲲鹏平台兼容的依赖库,安装方法同 x86 服务器
  • 开源项目库不支持 ARM 架构,这种情况较少,一般发生在较旧的项目代码;解决方法包括:修改代码,寻求替代组件等
  • 编译时提示代码错误,可能需要根据平台差异修改部分代码,例如平台类型相关宏定义
  • 汇编程序和 C/C++ 源代码中内联汇编需要重写,ARM 和 x86 架构指令集不兼容。
为应对上述问题,张汝涛表示,华为鲲鹏平台提供了完整的工具链帮助开发者提高应用迁移或者调用的效率,比如:
  • 扫描工具:Dependency Advisor,检查用户软件资源包二进制文件,并评估可移植性;检查指定的用户软件安装路径下的二进制文件,并评估可移植性;检查用户软件 C/C++ 源码、软件构建工程文件,并评估可移植性;向用户提供软件移植报告,提供移植工作量评估;支持命令行方式和 Web 两种工作模式。
  • 移植工具:Porting Advisor,检查用户软件 C/C++ 软件构建工程文件,并提供修改建议;检查用户软件 C/C++ 源码,并提供修改建议;检查用户软件中 x86 汇编代码,并提供修改建议;支持命令行和 Web 两种访问方式;提供一键式移植软件到鲲鹏平台;支持用户 RPM、DEB 软件包重构。
  • 性能优化工具:Tuning Kit,支持安全可靠的升级回退功能;支持系统性能数据采集和分析,包括:CPU、内存、磁盘 IO、网络 IO,根据现有积累的经验,对已经明确的指标给出基准参考值和优化建议;支持 Java 程序性能分析;支持和 Porting & Dependency Advisor 同时部署在同一台机器。
  • 加速库:从底层算力进一步提升应用软件性能,glibc 基础库目前已经在鲲鹏开源社区开源,优化了 16 个最常用的接口,相当于 Intel 优化范围的 10%;HMPP 适配接口数 501 个,占 IPP 信号库接口的 38.5%,占 IPP 库总接口的 11%,对标 Intel IPP 完成功能测试。
过往,曾有企业尝试将大数据搜索系统迁移到鲲鹏平台。我们可以此为例总结整个迁移过程,根据张汝涛的介绍,迁移过程共分为如下四步:
 
1、用户业务软件栈汇总及兼容性分析;
2、用户业务软件组件依赖分析——华为鲲鹏代码迁移工具;
3、C/C++ 软件移植修改建议:
4、性能分析优化;
 
在这个过程中,华为提供了完整的开发者套件,可以帮助开发者检测 C、C++ 软件构建配置文件,检测 C、C++ 源码及 x86 汇编指令,并且根据检测出的软件修改规模进行工作量评估。其中,由于指令集不同,开发者重点关注汇编指令移植即可。

3 移植完成,一切才刚刚开始

软件迁移不仅是个工程问题,也是个技术问题,迁移只是第一步,张汝涛表示,鲲鹏平台为企业和开发者提供了一系列完整的服务和生态共建方案。
为了让鲲鹏能够更好地服务各行各业,华为接下来将构建以开发者为中心的人才发展体系,针对开发者在学习、训练、构建、社交等阶段的不同需求,针对性的提供相应资源政策与活动,并优化流程,具体如下:
 
 50 多家大学加入沃土高校教研扶持
 
为了让广大学生开发者掌握基于鲲鹏平台的开发技能,华为已与 50 多家高校开展了鲲鹏相关的教学与科研合作。以教材为例,华为已经发布了 20 套书面教材和超过 200 套线上课程。未来,还将有更多高校加入沃土计划,与华为共同培养鲲鹏人才。
 
24 类华为认证
 
目前,华为已发布 24 类鲲鹏相关的职业认证,并且已被众多企业与机构认可,这是鲲鹏合作伙伴的必备条件,也是个人求职与晋升的有力凭证。未来,具备 HCIE 认证的开发者一定是职场上的高精尖人才。
 
上线“沃土计划 2.0”激励细则
 
去年,华为宣布沃土计划 2.0,五年投入 15 亿美金,覆盖四个领域,分别面向高校,初创企业,开发人员及合作伙伴。如今,所有激励细则均已上线,初创企业最高可获得 75 万人民币的云券,欢迎大家申请。2020 年,华为将投入两亿美金,并公布了针对高校,初创企业,开发人员及合作伙伴的具体人才扶持细则。
  • 高校教研扶持:面向高校,提供 1 亿人民币的扶持金额,包括人才培养,云资源及样机支持,同时华为与教育部签署 3 年协议投入 10 亿人民币,共同推进人才的培养。
  • 初创企业及开发人员扶持:面向初创企业及个体开发人员,以云资源及线下活动的方式发放 1 亿人民币的补助,每家初创公司最高可获得 75 万人民币的云券。
  • 合作伙伴发展扶持:面向合作伙伴,提供 6 亿人民币的扶持总额,其中 3 亿人民币一次性研发费用补贴,3 亿人民币的云资源。
最后,希望各位开发者可以放心尝试在鲲鹏平台之上用代码改变世界。当一个新技术出现时,开发者最擅长的就是抓住它;当一个新的计算拐点出现,开发者大可勇敢的拥抱,一起参与这场可能的 IT 革命。
 
嘉宾介绍:
张汝涛,现任华为计算产品线主任工程师,华为鲲鹏开发套件的规划设计者,负责架构和功能设计。从事软件开发 20 年,在嵌入式软件、企业软件领域有丰富的经验。原 ARM 开源软件部门主任工程师,从事 ARM64 平台开源软件开发、移植和性能优化,完善软件生态。主要贡献于云、存储、网络相关的多个开源项目。多次在开源项目的峰会和社区会议上交流 ARM64 平台软件开发、优化经验。
 
 

最终,我决定将代码迁出x86架构!的更多相关文章

  1. ARM和X86架构

    重温下CPU是什么 中央处理单元(CPU)主要由运算器.控制器.寄存器三部分组成.运算器起着运算的作用,控制器负责发出CPU每条指令所需要的信息,寄存器保存运算或者指令的一些临时文件以保证更高的速度. ...

  2. Linux x86架构下ACPI PNP Hardware ID的识别机制

    转:https://blog.csdn.net/morixinguan/article/details/79343578 关于Hardware ID的用途,在前面已经大致的解释了它的用途,以及它和AC ...

  3. x86架构的android手机兼容性问题

    x86架构的android手机兼容性问题 http://www.cnblogs.com/guoxiaoqian/p/3984934.html 自从CES2012上Intel发布了针对移动市场的Medf ...

  4. 基于x86架构的内核Demo的详细开发文档

    http://hurlex.0xffffff.org/ 这里是hurlex这个基于x86架构的内核Demo的详细开发文档, 包含PDF文档和生成PDF的XeLaTex源码和文档每章节的阶段代码. 你可 ...

  5. X86架构下Linux启动过程分析

    1.X86架构下的从开机到Start_kernel启动的整体过程 这个过程简要概述为: 开机-->BIOS-->GRUB/LILO-->Linux Kernel 其执行的流程图和重要 ...

  6. X86架构CPU常识(主频,外频,FSB,cpu位和字长,倍频系数,缓存,CPU扩展指令集,CPU内核和I/O工作电压,制造工艺,指令集,超流水线与超标量)

    1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度. CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差. ...

  7. x86架构手机跑安卓好吗?(脑补)

    华硕低价位手机ZenFone一推出就掀起市场话题,许多人也对ZenFone所采用的Intel Atom处理器有所意见,深怕其相容性问题无法正确执行应用程式App,这究竟是怎么回事呢? Intel近几年 ...

  8. X86 架构和 ARM 架构

    1.关于x86架构 X86是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X86是由Intel推出的一种复杂指令集,用于控制芯片的运行的程序,现在X86已经广泛运用到了家 ...

  9. ARM架构和X86架构对比

    转载地址 我们就ARM架构的系统与X86架构系统的特性进行一个系统分析,方便用户在选择系统时进行理性.合理的比价分析. 一.性能: X86结构的电脑无论如何都比ARM结构的系统在性能方面要快得多.强得 ...

  10. X86架构

    在接触BIOS的时候,都需要对PC架构有一定的认知.目前的PC架构绝大多数都是Intel的X86架构,貌似也是因为INTEL的这个X86架构早就了目前INTEL如日中天的地位. 废话不多说,X86架构 ...

随机推荐

  1. 谈谈selenium4.0中的相对定位

    相对定位历史 2021-10-13 发布的 selenium 4.0 开始引入,selenium 3.X是没有的 implement relative locator for find_element ...

  2. 如何为你的WSL2更换最新的6.5.7kernel

    1.如果你像我一样,喜欢折腾你的 WSL2 ,这里是安装内核 6.X 的方法. 2.这是一个坏主意,可能会导致系统不稳定.数据损坏和其他问题.也可能会没事的,但不要怪我. Arch linux的wsl ...

  3. LINUX基础知识和命令 二

    LINUX alias (别名) 自定义命令=原始命令 原始命令中有特殊符@#%()请打上 引号,单双无所谓 例:vim /etc/sysconfig/network-scripts/ifcfg-en ...

  4. Unity学习笔记--入门

    Unity引擎学习 入门: Unity中的坐标系: 左手坐标系(z轴正方向向里面) x轴:平行屏幕向右正方向 y轴:平行屏幕向上正方向 Z轴:垂直屏幕向内为正方向 [补]openGL是右手坐标系 Di ...

  5. QAction常用接口总结

    目录 public (一)构造函数 (二)setShortcut (三)setStatusTip Signals (一)trigger() public (一)构造函数 1.QAction(const ...

  6. mybtis-plus 出现 Wrong namespace

    今天进行项目整合,刚开始代码搬的还挺快乐的,但是到后面调试起来,头晕眼花的.记录一个基本的错误. Cause: org.apache.ibatis.builder.BuilderException:  ...

  7. 阿里云上的rds 的隔离级别read committed​ 而不是repeatable-read设置原因

    阿里云上的rds 的隔离级别 是read committed ,而不是原生mysql的"可重复读(repeatable-read)",他们是基于什么原因这样设置的? show va ...

  8. 夯实JAVA基本之一 —— 泛型详解(1):基本使用(转)

    一.引入1.泛型是什么首先告诉大家ArrayList就是泛型.那ArrayList能完成哪些想不到的功能呢?先看看下面这段代码:ArrayList<String> strList = ne ...

  9. git中的ole mode 和 new mode提示问题

    git status 显示如下(文件内容其实并没有改变): old mode 100644 new mode 100755 原因是: 使用chmod修改过文件权限后,filemode会有变化. 解决办 ...

  10. 使用 LCM LoRA 4 步完成 SDXL 推理

    LCM 模型 通过将原始模型蒸馏为另一个需要更少步数 (4 到 8 步,而不是原来的 25 到 50 步) 的版本以减少用 Stable Diffusion (或 SDXL) 生成图像所需的步数.蒸馏 ...