龙芯指令系统架构及其软件生态建设
2022-05-13胡伟武高翔张戈
胡伟武 高翔 张戈
(龙芯中科技术股份有限公司,北京100190)
0 引言
改革开放以来,我国的信息产业主要构建在以Intel的CPU和微软的Windows操作系统形成的Wintel体系和以ARM的CPU和谷歌的Android操作系统形成的AA体系基础之上,这不仅使国家安全受到威胁,产业发展也受制于人。2011年,我国电子信息产业前100强企业的总利润加起来不及美国苹果公司的一半[1]。2012年,全球手机市场总利润中仅苹果公司和三星公司就占97%,该比率在2016年为94%[2]。同样是卖整机,主导手机生态的苹果公司2018年的销售收入为2 656亿美元,净利润为595亿美元[3],而没有自主生态的联想公司2018年的销售收入为510亿美元,净利润为6亿美元[4]。同样是卖芯片,主导计算机生态的Intel公司2018年的销售收入为708亿美元,净利润为210亿美元[5],没有自主生态的展锐公司销售收入为16亿美元,利润亏损(展锐公司手机芯片销售数量不少于Intel公司的电脑芯片销售数量)。可见,我国信息产业的发展关键在于基于自主CPU和操作系统建立独立于Wintel体系和AA体系的自主信息技术体系。
要形成国内信息产业大循环,需把握3个主要环节。一是基于自主核心IP的芯片研发。核心IP对芯片的性能、成本、功耗、安全性具有决定性作用,常见的核心IP有CPU核、GPU核、内存接口、高速IO接口等。二是基于自主指令系统的软件生态。指令系统是计算机最重要的知识产权,决定了软件的编码表征与存储格式,承载着软件生态的发展创新,是建立软件独立生态系统的基础。如X86指令系统承载桌面计算机和服务器的软件生态,手持移动终端软件生态由ARM指令系统承载。三是基于自主可控材料设备的生产工艺。目前,我国境内材料设备工艺已经可以基本满足我国自主信息化建设的要求,但包括光刻胶、光刻机在内的材料和设备还有许多方面受制于人,预计经过努力,这些问题将在未来10年逐步得到缓解。上述“3个基于”实质上就是我国信息产业要打通的3个堵点。
经过2001年以来20多年的努力,通过自主研发CPU核、GPU核、内存接口、高速IO接口等核心IP,龙芯公司于2021年正式推出的龙芯四核3A5000以及16核3C5000处理器的通用处理性能已经逼近市场主流产品的水平,正在研制的下一代龙芯3A6000/3C6000及3A7000/3C7000系列性能将达到市场主流产品的水平。龙芯公司自主生态建设的主要瓶颈从CPU性能不足转向软件生态不够丰富。本文从指令系统、操作系统、二进制翻译、开源社区等方面介绍龙芯软件生态的建设进展及计划。
1 推出自主指令系统架构LoongArch
指令系统是CPU所执行的软件指令的二进制编码格式规范,是计算机的软硬件界面,是CPU和操作系统共同的根技术。一种指令系统承载了一个产业生态,如X86指令系统承载桌面计算机和服务器产业,ARM指令系统承载手持移动终端产业。就像中国人可以用英文写文章,但不可能基于英文发展中华民族文化,基于国外指令系统中国的信息产业可以做产品,但构建安全可控的信息技术体系和产业生态则不可能。
2021年,龙芯公司基于20年的CPU研制和生态建设积累推出了龙芯指令系统架构LoongArch(Loongson Architecture),包括基础架构部分、虚拟化和二进制翻译、向量指令等扩展部分,近2 000条指令。龙芯公司从2020年起新研制的CPU均支持LoongArch,包括3A5000、3B5000、3C5000及后续型号。
LoongArch具有自主研发、技术先进、兼容生态三方面特点。自主研发:龙芯指令系统架构在整个架构的顶层规划各部分的功能定义;对每条指令的编码、名称、含义等都进行了自主设计,具有充分的自主性。技术先进:作为自主研发的新架构,龙芯指令系统架构从设计初始,一方面摒弃了其他传统指令系统中已经不适应软硬件设计技术当前发展趋势的部分陈旧内容,另一方面也吸纳了诸多近年来指令系统设计领域的先进发展成果,因此不仅在硬件方面是便于高性能低功耗的设计,而且在软件方面也易于编译优化以及操作系统和虚拟机的开发。兼容生态:龙芯指令系统架构在设计时充分考虑了兼容生态的需求,在融合了各国际主流指令系统主要功能特性的同时,也依托龙芯团队在二进制翻译方面十余年的技术创新积累,对多种国际主流指令系统实现了高效的二进制翻译,从而实现了对X86、ARM等指令系统平台上二进制应用程序的高效运行,达到了生态融合的目的。
软件生态是龙芯指令系统架构能否成功的基础和关键。基于自主指令系统构建基础软件生态需要“2+3+3+2”的十大能力。一是需要迁移BIOS和操作系统内核到LoongArch,其中操作系统内核还包含虚拟化、图形、网络等驱动程序。二是三大编译器,包括GCC、LLVM和GoLang。三是三大虚拟机,包括Java、JavaScript和.NET。四是两大二进制翻译系统,包括从X86到LoongArch的二进制翻译系统和从ARM到LoongArch的二进制翻译系统。在上述“2+3+3+2”的十大能力基础上,就能够突破指令系统的壁垒,构建LoongArch的软件生态体系。龙芯公司通过长期的技术积累掌握了上述十大能力,奠定了应用软件生态全面持续发展的良好基础。
2 建成基于LoongArch的基础软件技术体系
基础软件技术体系是CPU生态发展的基石,在计算机应用和计算机硬件之间起到承上启下的关键作用。图1以层次结构的形式描述了基于LoongArch的软件技术体系。其中系统架构层、编译工具与运行环境层、专项技术层属于基础软件体系。
系统架构层包括固件、内核、虚拟化系统、驱动系统等,其中虚拟化系统和驱动系统与内核紧密关联,也可以被认为是内核的组成部分。固件及内核除了与指令系统相关,还与硬件结构紧密相关。LoongArch的固件和内核块已经由龙芯公司完成开发并负责维护。为了实现操作系统级的二进制兼容,龙芯公司还制定了涵盖CPU、桥片、固件、操作系统内核的技术发展标准,实现了龙芯统一系统结构标准规范。在该架构规范下,一个操作系统的二进制可以在LoongArch的不同CPU和不同主板上直接安装运行。
编译工具与运行环境层包括GCC编译器、LLVM编译器、GoLang编译器三大编译器以及Java虚拟机、JavaScript虚拟机、.NET虚拟机三大虚拟机。有了上述编译工具,就可以构建出整个操作系统。上述三大编译器和三大虚拟机与指令系统紧密相关,已经由龙芯公司完成开发并负责维护。
图1 基于LoongArch的软件生态层次结构
专项技术层包括浏览器、图形系统、音视频系统、数据库、中间件、容器系统等。龙芯公司设置专门的团队负责浏览器、媒体播放器、图形系统、Docker容器等技术的开发和维护,并支持合作伙伴研发龙芯平台的数据库、中间件等软件产品。这些专项技术都已经在LoongArch平台落地生根,支撑各自领域规模化的产品应用。
应用系统层包括办公软件、版式文件、微信、图形应用、科学计算、办公自动化、大数据及AI应用等。龙芯公司联合全产业链伙伴共同建设应用系统层的生态,主要的OA娱乐等应用厂商都已经发布了基于LoongArch的产品。
经过多年的努力,LoongArch的基础软件趋于完善,下一步的研发重点将更加注重操作系统与应用的结合部,从应用兼容性和自主编程框架等方面取得突破。
3 构建兼容及自主的编程框架
应用的兼容性问题是Linux系统普遍存在一个问题,体现在基于Linux的不同操作系统(如Loongnix、统信、麒麟)应用不兼容以及同一操作系统随开源社区进行版本升级后可能导致原应用不兼容。例如,由于统信和麒麟操作系统打包格式、库版本的不完全一致,虽然同为Linux操作系统,即使在相同硬件上,应用开发者(如微信)仍需要分别针对统信和麒麟操作系统开展迁移工作,而且随着统信或麒麟操作系统的升级,可能还需要重新迁移。为了解决上述问题,龙芯公司正在实现LoongArch平台上不同厂家、不同版本操作系统的应用兼容框架。在该框架下,应用开发者(如微信)针对LoongArch的Linux平台只需要迁移一次(如迁移到统信平台上),当该应用在其他Linux平台(如麒麟或Loongnix)运行时,由龙芯公司开发的兼容包“提供”该应用需要的运行环境,实现该应用在其他Linux平台上的直接运行。实现跨Linux平台的应用兼容是一项综合容器、虚拟机及自主打包格式等在内的综合性技术,其中虚拟机主要针对操作系统内核升级引起的兼容性问题。
自主操作系统的根本性标志是开发出自主编程语言和编程应用框架。操作系统生态是否繁荣的直接标志在于应用的数量,而应用产生于编程应用框架,是操作系统平台的重要组成部分。从某种意义上说,基于Linux的国产操作系统都不是自主操作系统,而是开源操作系统的自主发行版。Android也源于Linux,但同一个APP可以在不同厂家的Android手机上直接运行,且可以在升级后的Android平台上直接运行,就是因为Android设计了专门的编程语言和编程框架(Android Application Framework)。微软的Windows和苹果的IOS也是如此。我国的操作系统由于没有自主的编程语言和编程框架,只能跟着开源的升级而不断升级,导致应用生态发散和无休止的适配。龙芯公司将在充分调研Android、IOS和Windows编程框架的基础上提出自主编程框架,实现从操作系统跟随性发展的“必然王国”走向自主发展的“自由王国”。
4 通过二进制翻译补充LoongArch软件生态
LoongArch作为一种新型指令系统,在其原生软件生态成熟之前,可借助二进制翻译技术兼容支持X86、ARM等生态的应用,以弥补其早期应用生态的不足。作为LoongArch的原生软件生态的补充,构建从X86到Loongarch的体系结构翻译器LATX(Loongson Architecture Translator from X86),从ARM到Loongarch的体系结构翻译器LATA(Loongson Architecture Translator from ARM)。LoongArch体系结构翻译器和之前翻译器工作的区别在于在LoongArch定义时就充分考虑了多种指令系统二进制翻译的需求,强调更加紧密的软硬件协同,大幅提高了跨指令系统二进制翻译的效率。表1给出了LoongArch软件生态的结构。
表1 LoongArch二进制翻译示意表
实现从X86平台到龙芯平台的高效二进制翻译,需要从3个层面展开工作。一是实现从X86指令到LoongArch指令的二进制翻译。二是为了提高翻译效率,为提高X86二进制翻译性能增加专门指令,比如增加一个包含170多条指令的LBT(Loongson Binary Translation)扩展。三是为了运行X86的Windows应用,基于开源的Wine软件[7]在Linux上模拟出Windows的系统调用和驱动程序等功能,由于开源的Wine平台不够完善,需要对Wine进行完善和优化。龙芯二进制翻译系统将支持以下X86平台应用。
(1)在龙芯平台上支持X86/Linux应用。X86/Linux平台上有较为丰富的工程类软件,如EDA工具等。此外,X86/Linux上办公类软件也相对比较丰富,如腾讯QQ等。
(2)在龙芯平台上支持X86/Windows应用。为了运行X86/ Windows应用,不仅需要通过LATX实现对指令的翻译,还需要类似于Wine的平台模拟 Windows环境。目前,基于LATX+Wine平台已经可以在龙芯3A5000上运行包括微信、PhotoShop等在内的X86/Windows应用。
(3)在龙芯平台上支持X86/Windows外设。用户现场的不少老旧打印机未提供Linux系统驱动,无法在Linux类操作系统上使用。基于二进制翻译技术,在龙芯系统上采用虚拟化方式直接运行Windows原生驱动程序。目前,基于龙芯基础版操作系统Loongnix以及基于龙芯平台的商业操作系统已经开始集成支持此方案。
到2021年年底,LATX已经发布了Alpha版。龙芯公司将在兼容性和性能两个方面持续改进和优化LATX和Wine,争取到2022年达到可用水平。在此基础上,龙芯公司开展了LATA二进制翻译器的研究。力争通过持续改进和优化,实现在“十四五”期间消除指令系统壁垒,在LoongArch平台上方便地运行X86和ARM平台的软件。
5 推动LoongArch开源社区建设
全球的信息产业已经构筑在了以开源软件为基础的开放技术体系之上,龙芯的软件生态将深度融入国际开源软件发展的大格局。图2描述了龙芯软件生态的层次关系。第一层是上游开源软件社区,如内核社区、JDK社区、FFMPEG社区、Moziilla社区等,龙芯公司将联合开源软件界的全球力量,实现对LoongArch的社区原生支持。第二层是国内外的操作系统社区,如龙蜥社区、欧拉社区、龙芯Loongnix社区、Debian社区等,这些社区将基于第一层上游开源社区对LoongArch支持的软件版本发布支持龙芯CPU的社区版操作系统。第三层是商业操作系统,如统信操作系统、麒麟操作系统等,基于第一和第二层的工作成果,龙芯公司将支持和配合商业操作系统厂商研制支持龙芯CPU的品牌操作系统。
在上游开源软件社区,LoongArch已得到国际开源软件界广泛认可与支持,正在成为与X86、ARM并列的顶层生态系统。龙芯公司积极推进在上游开源软件社区的LoongArch生态建设工作,已从国际GNU组织获得表征LoongArch的专属架构编号(ELF Machine编号,258号)。至本文撰稿时,基础编译工具链Binutils、主流视频编解码库FFmpeg、浏览器Javascript引擎V8等重要软件社区已经发布了支持LoongArch的最新版本,Linux内核、GCC编译器、LLVM编译器、GLibc库、.Net等社区正在实现对LoongArch的原生支持。从2022年起,龙芯公司将每年投入一定的经费资助海外社区开发者的工作。在得到上游开源软件社区的支持后,LoongArch生态将随社区自动演进,可以极大地丰富支持LoongArch的软件版本,大幅减少软件迁移适配工作。
图2 LoongRrch开源社区及商业操作系统
龙芯公司积极参与国内外操作系统社区的工作,并组建了Loongnix操作系统社区。在与广大合作伙伴的共同努力下,国内的龙蜥、欧拉等操作系统社区都已发布了支持龙芯CPU的社区版操作系统。通过捐赠机器、资助开发者、派驻人员等形式,龙芯公司积极支持Debian、Alpine等国际操作系统社区的龙芯版本研发工作。龙芯公司依托龙芯开源社区(loongnix.cn),强化基础软件核心组件的研发与优化,发布龙芯社区版操作系统Loongnix。作为龙芯软件生态建设的重要平台,Loongnix集成龙芯软件生态研发的最新成果,以“源码开放、免费下载”的形式进行发布,可应用于日常办公、生产、生活等场景。
操作系统有两种典型的商业模式,一是微软的Windows闭源授权模式,二是谷歌的Android开源基础版模式。龙芯公司研制并提供基于LoongArch的基础版操作系统Loongnix,支持包括统信、麒麟在内的专业操作系统企业推出的品牌操作系统,并且同时支持整机和系统企业基于Loongnix的定制操作系统。龙芯公司基于Loongnix平台体系和操作系统发展模式,将统一系统架构、应用兼容框架等技术标准规范贯穿实施到产业技术链的各个环节,使得龙芯平台的操作系统实现跨整机兼容、CPU代际兼容和应用升级兼容。
龙芯公司还组建了应用合作社,作为聚集开发者的平台和发布应用的渠道。通过商务模式创新,龙芯公司聚集国内外的应用开发者开发应用,通过规范组织和管理,实现应用生态的繁荣发展。
6 结束语
我国信息产业的根本出路在于构建独立于Wintel体系和AA体系的自主信息技术体系。基于自主研发的CPU构建自主可控的信息技术体系任重道远,,但前途光明,有利于国家产业发展和人民生活改善。
指令系统和生产工艺是信息产业的两个重要基石。构建自主信息技术体系必须而且只能基于自主指令系统。本文从龙芯指令集系统、操作系统、二进制翻译、开源社区建设等方面介绍了基于自主指令系统构建软件生态的已有进展和工作计划。预计再经过1~2年的努力,就能够完成上述基于LoongArch的基础软件生态建设,引领我国基础软件的生态建设从以前的跟随性发展道路走向自主发展道路。