03-11
2020
龙芯信息化平台的应用迁移工作思考
龙芯信息化平台的应用迁移工作思考
靳国杰1 张 戈1 高 翔1 胡伟武1,2
(1. 龙芯中科技术有限公司 北京 100095;2. 中国科学院计算技术研究所 北京 100190)
靳国杰1 张 戈1 高 翔1 胡伟武1,2
(1. 龙芯中科技术有限公司 北京 100095;2. 中国科学院计算技术研究所 北京 100190)
摘要:“构建信息技术体系”已经成为我国解决国家信息安全并提升产业竞争力的共识。龙芯CPU经过多年发展,在相关信息化应用的带动下,底层软硬件平台逐步完善,在这种情况下,如何针对已有大量成熟的上层应用进行应用迁移将成为打造自主软硬件生态成败的关键。由于大量应用基于主流API(应用编程接口)而不是ISA(CPU指令集)进行开发,因此应用迁移的关键在于对主流API的良好兼容和支持。目前,龙芯CPU平台已经全面兼容主流编程语言和API,并积极投入API平台软件相关的开源社区生态建设。在此过程中,龙芯团队加强应用迁移的技术支持与服务力量,并为应用开发者提供应用迁移指南教程与培训,及时解决应用迁移过程中遇到的各类问题,为构建信息技术体系提供有效提速手段。
关键词:龙芯;软件生态;应用迁移;API
中图分类号: TP274+.2 文献标识码 B
Application Migration to Loongson Platform In the Environment of Information Systems
Jin Guojie1 Zhang Ge1 Gao Xiang1 Hu Weiwu1,2
(1 Loongson Technology Corporation Limited, Beijing 100095;2 Institute of Computing Technology of the Chinese Academy of Sciences, Beijing 100190)
Key words: Loongson; Self-determination and Controllability; Security and Reliability; Software Ecology;Application Migration; API
1 引 言
信息体系是指核心信息技术,能够以此构建信息技术体系。国内的信息体系长期呈现应用发达、基础薄弱的不对等现象,需要从根本上改变CPU、操作系统两大核心技术长期采用国外产品的现状,在产品制造、产品供给、技术发展等各方面消除受制于人的命门,并且在此基础上建立自主软件生态。
随着自主软硬件平台在应用中不断提升成熟度,建设信息体系的战略面临着重要转轨,以前的主要矛盾聚焦于解决CPU、OS的自主研发问题,下一阶段将逐步过渡到打造自主软件生态的轨道上来。
2 应用推广瓶颈从底层基础软硬件逐步转向应用迁移
2.1 自十八大以来,在有关应用的带动下,龙芯CPU基础平台成熟度大幅度提高,正在从量的积累形成质变
具体体现在以下四个方面:
(1)功能完整:龙芯平台经过多轮,在过程中联合合作伙伴完善了包括操作系统、数据库、中间件、Java虚拟机、核心浏览器、Flash等插件、虚拟化平台以及实际用户办公场景下的大量打印机、扫描仪等外设产品适配,操作系统由32位升级为64位,实现了应用仓库、在线升级特性以提升使用体验、简化运维管理,龙芯平台面向办公业务类信息化支撑功能完备;
(2)架构稳定:应用初期,不同主板需要进行专门的操作系统适配,CPU升级也得专门的操作系统适配,形成组合爆炸。通过完善包括CPU、桥片、固件(BIOS)、操作系统的技术规范,龙芯平台逐步统一了系统架构,目前已经做到了同一个操作系统版本对不同主板、整机和CPU系列芯片的二进制兼容,大幅降低系统架构层面的适配工作量;
(3)性能优化:龙芯处理器从早期的3A1000到目前的3A3000,CPU性能总体提升3至4倍,底层基础软件如Java虚拟机、浏览器JavaScript引擎性能平均提升2.5倍,总体应用性能提升1个数量级;正在研制的3A4000/3C5000,在保持系统架构兼容的基础上,单核性能再提升1至2倍,同时提高核数,综合通用性能接近主流CPU水平;
(4)问题收敛:初期,应用适配中发现的很多与稳定性、性能相关的问题追溯到CPU或操作系统,需要CPU和操作系统企业紧急组织攻关解决。而近一年来,应用适配中发现的问题很少追溯到底层的CPU和操作系统,更多在于操作系统之上与应用软件之间的磨合适配,自主基础软硬件平台的成熟度在用户不断使用当中得到大幅提升。
2.2 随着自主基础软硬件的成熟,如何针对已有大量成熟应用进行应用迁移将成为打造自主软硬件生态成败的关键
向自主软硬件平台进行全面应用迁移,这是一个具有历史性的大工程,难点在于以下方面:一是工作量庞大,面临以往30年间建设的应用系统,难以胜数,而解决国家安全问题的任务紧迫,留给自主软硬件进行替的时间窗口较短。二是开源软件生态的碎片化,Linux的“集市式开发”导致生态严重发散,操作系统、编译器、API(Application Programming Interface,应用编程接口)都形成了多种分支,版本升级过程中普遍存在不向下兼容的现象。三是政府和企业信息化未建立标准体系规范,由于缺乏顶层规划,现实中的编程语言、API都有随意性,烟囱林立。这些问题构成应用迁移需要解决的难点,如何协助应用厂商做好应用迁移是龙芯后续的战略性工作。
3 应用迁移的关键在于打造良好规范的应用编程接口API
软件生态建设的关键在于开发者而不是用户,而开发者更加关注API(应用编程接口)而不是ISA(Instruction-Set Architecture,CPU指令系统)。API是应用开发者的生产工具,各类应用程序(APP)都是基于API接口(如Java、JavaScript、QT等)开发出来的。只有掌握了API,才能吸引大量开发者围绕龙芯的技术平台进行应用开发工作,并在此基础上逐步形成产业生态。
(1)随着应用开发与编程环境的重要性越来越高,指令集(ISA)的区别对于应用生态的影响越来越小。指令集是指CPU所执行的机器指令的二进制编码格式。Intel的CPU基于x86指令集,而龙芯CPU在兼容MIPS指令系统的基础上发展出自主的龙芯指令系统LoongISA,无法运行被编译成x86指令集的软件代码,因此Windows操作系统和所有针对x86编译的应用程序都无法在龙芯上运行。指令集包括两个子集,一个是核心态指令集,只在操作系统中使用;另一个是用户态指令集,可供应用程序使用汇编语言进行调用。事实上,现在应用程序绝大部分使用平台无关的高级语言编程,都是由编译器实现应用程序源代码到机器指令的转换,国内信息化中的应用程序都几乎不再采用汇编语言进行编程,已经看不到指令集的概念,因此ISA对于应用程序可以认为是透明的。
(2)应用编程接口(API)的区别是应用迁移的主要问题来源。应用编程接口是应用软件与编程环境(编译器、函数库、框架、引擎等)之间的调用接口。龙芯电脑运行的操作系统基于开源Linux,所包含的编程环境和Windows有很大差异,像Windows专用的编程环境MFC、.Net Framework都不对Linux操作系统开放,龙芯电脑的应用编程接口和Windows不兼容。随着龙芯在信息化项目中的瓶颈由底层“上移”到应用层面,应用迁移的主要工作都是在解决API层面的问题。目前,在基于Linux平台的信息化领域,运行的各类常用API接口与编程语言大致分布如图 1所示。
图 1 信息基础平台中应用软件和API的关系
可以看到,在信息化应用中跟指令集ISA直接相关的只有汇编语言,而汇编语言在信息化应用中的比例不到1%甚至远小于1%。其余的语言都与CPU平台无关,例如C/C++、Qt这两种面向C/S架构的源代码只需要使用编译器重新编译,而剩下的Java语言、SQL语言、JavaScript/HTML/CSS、PHP/Python/Ruby、Flash等面向B/S架构的源代码总共占据高达90%以上的比例,本身就是跨平台的中间字节码,不需要重新编译,把x86平台上的二进制文件直接传送到龙芯平台上即可运行。这意味着大部分应用软件能够在短时间内完成迁移,甚至在API软件版本相同的情况下已经不需要迁移。4 龙芯在应用迁移方面所开展的工作
4.1 经过多年软件生态建设,龙芯全面支持了计算机主流API和编程语言
龙芯平台目前全面兼容支持计算机主流API和编程语言,能够满足大部分信息化应用系统对基础软件的要求,如表 1所示。近两年来,很多软件开发商在没有龙芯甚至操作系统厂商任何技术支持的情况下独立完成了应用开发或应用迁移。
表 1龙芯平台支持的API和编程语言[j1]
类型 | API名称 | 典型开发工具 | 典型应用 |
编程语言 | Java | OpenJDK | Web、本地应用 |
C/C++ | GCC | 本地应用 | |
PHP | Apache | Web应用 | |
Python | Python虚拟机 | Web、本地应用 | |
Ruby | Ruby虚拟机 | Web应用 | |
Node.js | Node.js虚拟机 | Web应用 | |
Go | golang | Web、本地应用 | |
函数库 | 本地图形界面库 | Qt | 本地图形界面应用 |
Java图形界面库 | AWT/Swing,JavaFX | 本地图形界面应用 | |
Java本地接口库 | JNI,JNA | Web、本地应用 | |
3D图形库 | OpenGL | 3D图形应用 | |
视频解码库 | ffmpeg、openh264、libvpx | 视频播放器 | |
平台引擎 | Web中间件 | Tomcat, Jboss, Jetty | Web应用 |
Java EE引擎 | GlassFish | Web应用 | |
数据库 | Mysql(关系型) MongoDB(非关系型) | Web、本地应用 | |
3D中间件 | OSG、MapBox、 Cesium、OGRE | 3D图形应用 | |
云平台 | Docker | Web应用 | |
大数据 | Spark,Storm | 大数据应用 | |
分布式文件系统 | Hadoop | 分布式应用 | |
文本搜索引擎 | ElasticSearch | 搜索引擎应用 | |
浏览器 | JavaScript/HTML/CSS | Firefox,Chromium | Web应用 |
JavaScript组件和框架 | jQuery,AngularJS | Web应用 | |
CSS框架 | Bootstrap | Web应用 | |
Adobe Flash | Flash插件 | Web应用 | |
HTML5 | Firefox,Chromium | Web应用 | |
WebGL | Firefox,Chromium | Web页面3D应用 | |
WebRTC | Firefox,Chromium | Web页面视频应用 | |
本地程序嵌入Web页面 | CEF,Electron | 本地应用 | |
性能分析工具 | Profiling Tool | Oprofile,Perf | 本地应用 |
集成开发环境 | Java/C/C++ IDE | Eclipse, Netbeans | Web、本地应用 |
Qt IDE | Qt Creator | 本地图形界面 |
4.2 龙芯积极投入API平台软件相关的开源社区的生态建设
目前,龙芯在关键API软件以及编程接口方面,维护的代表性基础软件和开源社区贡献如下:
(1)在Java虚拟机方面,龙芯公司是JAVA社区JCP的Full Member,是MIPS分支的维护者,从无到有开发了MIPS平台的OpenJDK,通过了Java兼容性测试套件JCK测试,符合Java SE 标准,正在与官方社区合作开展后续研发工作。龙芯的OpenJDK在业内已经形成一定的影响力,全球知名JVM公司Azul、创发科技等正在基于龙芯OpenJDK开源版本进行产品定制。
(2)在浏览器方面,Firefox、Chromium都可以在龙芯平台上稳定运行,并在此基础上对功能和性能进行了开发和优化,例如:提供了即时编译器(Just-In-Time compiler,JIT)的后端支持,并针对平台对JIT进行了优化,对图形渲染后端引擎进行优化,提高页面展现和滚动性能。增加了性能分析和调试工具,以及对插件独立进行的支持。优化音视频媒体库、WebGL 3D等高级特性。
(3)在编译器和工具链方面,龙芯目前是binutils的MIPS分支维护者。3A3000的编译器支持代码已提交GCC社区,并得到Phoronix.com科技报道。
(4)在操作系统方面,龙芯推出社区操作系统发行版Loongnix,集成了上述所有技术方向的软件成果,在社区上提供所有代码和开发工具的开放下载,可供下游操作系统厂商进行定制以形成品牌操作系统。为了缓解开源软件的碎片化问题,龙芯对基础软件平台提出 “研要跟、用要稳”原则,即对Loongnix坚持在未来五到十年之间长期维护,即使龙芯推出下一代升级CPU,现有的Loongnix版本仍然能够在新的CPU上安装使用,软件开发商已经适配的上层应用软件不受任何影响。
龙芯通过将大量第三方开源软件在龙芯平台上进行移植,解决功能问题、性能优化问题,最终将成果提交反哺给开源社区,不断缩小与x86生态的距离,甚至解决了很多开源社区都没有发现、x86平台上也存在的问题。例如在龙芯Java虚拟机中修正了x86平台也存在的8个共性问题,龙芯浏览器的功能完善程度超过开源浏览器。龙芯向开源社区提交的API项目贡献汇总见表 2。
表 2龙芯开源项目贡献汇总[j2]
技术方向 | 项目 | 项目地址 | 代码行数 | 维护者 |
编译器和 工具链 | binutils-2.24 | http://cgit.loongnix.org/cgit/binutils-2.24/ | 2,285 | 工具链团队 |
gcc-4.9.3 | http://cgit.loongnix.org/cgit/gcc-4.9.3/ | 4,555 | 工具链团队 | |
glibc-2.20 | http://cgit.loongnix.org/cgit/glibc-2.20/ | 8,830 | 工具链团队 | |
gcc上游社区 | https://gcc.gnu.org/ | 24 | 工具链团队 | |
binutils上游社区 | https://sourceware.org/binutils/ | 1,344 | 工具链团队 | |
qemu | http://www.qemu.org | 690 | OS团队 | |
Node.js | https://github.com/nodejs/node | 40 | OS团队 | |
Java虚拟机 | OpenJDK8 | http://hg.loongnix.org/ | 73,000 | JAVA团队 |
Firefox 浏览器 | firefox24 | http://cgit.loongnix.org/cgit/firefox24/ | 20,414 | 浏览器团队 |
firefox45 | http://cgit.loongnix.org/cgit/firefox45/ | 2,048 | 浏览器团队 | |
firefox52 | http://cgit.loongnix.org/cgit/mozilla-esr52 | 25,407 | 浏览器团队 | |
gecko-dev | https://hg.mozilla.org/integration/mozilla-inbound/ | 2,765 | 浏览器团队 | |
Chromium 浏览器 | v8 | https://chromium.googlesource.com.com/v8/v8.git | 547 | 浏览器团队 |
chrome31 | http://cgit.loongnix.org/cgit/chrome31/ | 10,817 | 浏览器团队 | |
chrome52 | http://cgit.loongnix.org/cgit/chrome52/ | 11,298 | 浏览器团队 | |
chrome60 | http://cgit.loongnix.org/cgit/chrome60/ | 8,397 | 浏览器团队 | |
cef | http://gerrit.loongnix.org:8081/#/admin/projects /browser/cef | 708 | 浏览器团队 | |
electron | https://github.com/electron/libchromiumcontent | 9,699 | 浏览器团队 | |
chromium | https://chromium.googlesource.com/chromium | 1,420 | 浏览器团队 | |
图形库 | skia | http://gerrit.loongnix.org:8081/#/admin/projects /graphic/skia | 4,460 | 图形团队 |
libyuv | https://chromium.googlesource.com/libyuv | 10,023 | 图形团队 | |
libpng | http://cgit.loongnix.org/cgit/libpng | 11,424 | 图形团队 | |
jpeg | http://cgit.loongnix.org/cgit/jpeg | 7,930 | 图形团队 | |
媒体库 | libvpx | http://cgit.loongnix.org/cgit/libvpx/ | 9,706 | 媒体团队 |
ffmpeg | http://cgit.loongnix.org/cgit/ffmpeg/ | 57,529 | 媒体团队 | |
openh264 | http://cgit.loongnix.org/cgit/openh264/ | 21,949 | 媒体团队 |
4.3 龙芯为开发者进行应用开发和迁移提供技术指导和支持
为提升软件开发商在龙芯电脑上进行应用开发和迁移的能力,快速推动建设龙芯生态,龙芯团队提供以下组织保障:
(1)加强组织对应用开发商、集成开发商的技术培训。目前已发布《龙芯信息化应用迁移、适配、调优指南》文档,定期举办“应用迁移培训会”,由国产操作系统、中间件、数据库、流式软件、版式软件等厂家的研发负责人授课,讲授从x86平台向龙芯平台迁移应用系统的方法和经验。首次培训会在2018年5月举办,有来自全国的60多个软件开发商、150多名开发人员参加培训,取得良好效果。
(2)编写并出版教材《龙芯应用开发标准教程》。本教程基于龙芯计算机平台,全面阐述了应用开发适配、迁移和优化技术,通过丰富的实践案例,为开发者提供了龙芯平台具体详实的应用开发指导。随后还会编写《龙芯桌面操作系统和办公软件使用指南》、《龙芯服务器操作系统管理教程》、《龙芯云平台管理教程》等系列化著作,为龙芯平台用户、开发者进行不同侧重点的教程培训和指导。
(3)扩充应用迁移技术支持团队。针对用户实施过程中遇到的问题及时提供现场服务,协助当地产业链厂商就应用迁移中遇到的基础软硬件问题、应用适配、性能调优等问题提供支持与服务,为龙芯平台各类相关问题进行技术兜底。并通过与地方政府合作建立自主软硬件推广攻关平台,集聚资源,形成产业链条,共同推动自主软硬件及相关产业落地。
5 结语和建议
构建信息技术体系的工作正处在关键时期,建议采用以下提速手段:
(1)重点关注应用迁移工作,引导应用开发商迁移到国产系统上来。政府应加大鼓励软件开发商向国产平台迁移应用,自顶向下调动各方力量投入资源,加快推动国产商业软件在国产CPU与OS平台上移植;重点支持高水平的开发集成商,根据应用系统在国产平台上的迁移和运行效果来评估开发集成商,推动实现真正的信息化体系。
(2)针对政府和企业信息化体系未建立标准规范的问题,采用政策引领、标准先行的方法,统一应用API规范。所有软件开发商、操作系统厂商遵循相同的接口契约,在政府信息化和更广泛领域消除小烟囟,减少应用迁移中的低层次重复工作,使软件开发商的成本降到最低。
(3)重视知识产权保护和人才培养工作。牢牢把住自主研发的关口,在此过程中不断探索,形成有竞争力的自主知识产权成果和标准,建立真正的技术体系,保证可持续的自主创新能力。在人才培养方面改变现有信息技术教学体系,以取代Windows和x86,开展相关教学培养,形成真正的产学研用全链条的产业体系,保证我国信息化产业发展真正做大做强。
参考文献
[1] 胡伟武.建立自主产业体系,助力网络信息安全[J].信息安全研究, 2018.4.
[2] 倪光南.构建的桌面计算机技术体系.http://www.stc.sic.gov.cn/index.php
[3] 陈左宁.我国发展的对策建议.
http://wemedia.ifeng.com/61923246/wemedia.shtml
[4] 卢锡城.聚焦——核心信息技术发展思考[J].中国信息安全, 2018.3.
[5] 中国电子信息产业发展研究院.2018中国信息技术产品白皮书.2018.9.
[6] 龙芯开源生态社区,http://www.loongnix.org
作者简介:
靳国杰(1979-),男,汉族,博士学位,高级工程师,现任龙芯中科技术有限公司技术总监,承担龙芯推广相关国家课题,发表学术论文20篇,发明专利40项。业务领域包括龙芯系统软件研发、龙芯信息化生态建设和市场推广。
张 戈,(1983-),男,汉族,毕业于中国科学院计算技术研究所,博士学位,教授级高工。现任龙芯中科技术有限公司副总裁,中国计算机学会体系结构专委会委员。长期从事龙芯处理器的研发、管理、市场与产业化工作,曾主持“核高基”、国家自然科学基金、863计划等多个国家级课题,并获得中国计算机学会“科技进步奖”一等奖等。
高翔(1982-),男,汉族,毕业于中国科学技术大学,博士学位,高级工程师。现任龙芯中科技术有限公司主管研发的副总裁。全程参与了龙芯处理器的研发与产业化工作,主持过核高基等多项国家级课题,发表学术论文20余篇,申请发明专利40余项。研究领域包括计算机体系结构、操作系统等。
胡伟武,(1968-),男,汉族,龙芯中科技术有限公司总裁,中科院计算所总工程师、研究员、博士生导师,第十一届全国青联常委,第十一届全国人大代表,党的十八大、十九大代表。师从著名计算机专家夏培肃院士,博士论文被评为全国百篇优秀论文。先后主持完成了我国第一个通用处理器龙芯 1 号、第一个 64 位通用处理器龙芯 2 号、第一个四核处理器龙芯 3 号的研制,并在国家安全,党政,能源等多个关键信息基础设施领域得到了应用。