大家好,鲲鹏论坛《云话鲲鹏之大咖来了》第4期如约在周一与大家见面!
科技前沿,探寻不怠,以责任、权威和专业,
《云话鲲鹏之大咖来了》将从#初识鲲鹏#、#探索鲲鹏#、#玩转鲲鹏#等不同的维度带领大家更深刻的认识和学习鲲鹏!
本期邀请到的大咖仍然是太一,作为华为云鲲鹏解决方案架构师,太一在鲲鹏社区发表了一系列关于鲲鹏的专业技术文章,我们会在接下来的大咖说中逐一为大家推荐!
文末有福利哦
文末有福利哦
本期大咖
【论坛昵称】 太一
【大咖称号】 华为云鲲鹏解决方案架构师
【技能介绍】 丰富的鲲鹏软件调研、鲲鹏迁移、鲲鹏开发和云上开发者生态建设经验
本期推荐文章:在鲲鹏上使用编程语言——Java、Python
#关键词#:初识鲲鹏 、Java、Python
【内容简介】
在鲲鹏上使用编程语言——Java
在鲲鹏上使用编程语言——Python
正文开始
在鲲鹏上使用编程语言——Java、Python
之所以把这两种语言放到一起讨论,是因为在某些场景下,他们的行为非常相似。
他们都通过源文件生成机器码
他们都利用vm解释机器码完成程序运行
在绝大多数场景下,Java编译生成的出来的机器码,是由JVM解释运行的;同样python会在运行时将源码编译成机器码,再由python来解释运行,我姑且把他俩都称为解释型语言。
理论上,一个代码工程如果完全由JAVA或者python的源码与机器码构成,那么代码本身不关心自己所运行的芯片平台。
但仍然有一些常用的天然特性其实是区分平台的,例如java中的NIO在linux上调用epoll,而windows上则调用了IOCP;python的绝大多数数学运算库,scipy、numpy中的核心算法部分都使用C、Fortran编写。而他们恰恰就是Java语言的主要应用场景——web应用和python语言的主要应用场景——AI/数学计算中最至关重要的部分。
JAVA部分
Java社区对ARMv8指令集的支持相对完整,这里是JVM的支持体系列表,我们使用JDK 8时,就已经可以支持JVM的全部主要功能了。
x86/64 |
aarch64 |
arm(32-bit) |
||
VMs |
Client |
Yes |
No |
Yes |
Server |
Yes |
Yes |
Yes |
|
Minimal |
Yes (32 bit) |
Yes, since JDK 12 |
Yes |
|
JIT |
C1 |
Yes |
Yes |
Yes |
C2 |
Yes |
Yes |
Yes |
|
TieredCompilation |
Yes |
Yes |
Yes |
|
Graal JIT (Experimental) |
Yes, since JDK 10 |
Yes, since JDK 11 |
No |
|
GC |
SerialGC |
Yes |
Yes |
Yes |
ParallelGC |
Yes |
Yes |
Yes |
|
CMS |
Yes, Deprecated |
Yes, Deprecated |
Yes, Deprecated |
|
G1 |
Yes |
Yes |
Yes |
|
ZGC |
Experimental |
In development |
No |
|
Runtime |
Container support |
Yes |
Yes |
Yes |
AppCDS |
Yes |
Yes, since JDK 10 |
Yes, since JDK 10 |
|
HugePages |
Yes |
Yes |
Yes |
|
Numa Support |
Yes |
Yes |
No |
|
Serviceability |
Java Flight Recorder |
Yes |
Yes, since JDK 11 |
Yes, since JDK 11 |
Table1 JVM端口功能对照表
JAVA字节码在执行过程中,JIT会对热点的字节码进行优化编译,编译成机器码后存放在Code Cache区域。如果Code Cache区域满了,那么会导致部分或者全部的代码仅仅通过对字节码逐条解释运行,进而导致JAVA程序性能大减但主机和进程无任何明显的指标异常。由于ARMv8是简单指令集,JAVA for ARM64的机器码的体积会数倍于X86,而且部分版本的JVM有Bug,一旦Code Cache满了,则所有的编译功能都会被停止。
防止CodeCache满,需要调整JVM的一些扩展配置,以之相关的扩展配置项主要有:
XXTieredCompilation 多级编译,OpenJDK 7与OracleJDK7 for ARM64版本默认是true,OpenJDK 7与OracleJDK 7for x86上是false,JDK8都是默认为true。由于默认开启了这个配置,会导致Code Cache中存放有多个层级的机器码,机器码体积倍增。关闭后JVM会只开启C2 Compilor线程进行机器码编译,大大降低Code Cache的消耗。
XXReservedCodeCacheSize 默认值与JDK版本和平台有关,从48M到240M不等。对内存成本考虑不高的情况下,建议可以设置大一些,如512MB,这样可以有效防止因为Code Cache区域内存溢出导致JVM性能下降。
Python部分
python的开源社区比java的要松散许多,社区官方也没有意图收编很多看起来属于基本功能的模块,故而想要厘清python对ARMv8指令集的支持情况其实非常困难,因为仅仅python本体能够支持ARMv8并没有太大意义。粗浅的打个比方,python在如今的代码世界里,更多的是充当胶水,越来越多的功能其实不是由python native的代码编写。如果python生态中的许多功能模块不支持ARMv8,空有一瓶好胶水其实也是没有用的。
不过经过实测,使用python2.7.9、python3.5在鲲鹏服务器上运行完整的Openstack应用(Nova、Cinder、Swift、Glance、Neutron、Ceilometer等等),所有功能和测试用例都是正常的,因此可以相对乐观的认为,python2.7.9和python3在鲲鹏上的兼容性是具备的。
来喽来喽,福利,福利,福利,它真的来喽!
【回帖有奖】
看完上述文章,你知道怎么在鲲鹏上使用编程语言Java、Python了吗?纸上得来终觉浅,绝知此事要躬行,鲲鹏社区云端实验室已就位,模拟真实场景,完善的虚拟环境配置搭建,想要直接操作体验的小伙伴们请移步基于华为云鲲鹏弹性云服务器部署Web应用
本期有奖问答题目:你觉得在鲲鹏上开发Java或者Python进行开发跟在X86上有什么异同?
活动时间:2019年12月23日-2020年1月5日
参与方式:回答上述问题或者将您在云端实验室中"基于华为云鲲鹏弹性云服务器部署Web应用"操作时遇到的问题、体验、学习笔记等在下方跟帖回复
获奖方式:
1、有效回复均可获得码豆100个(数量有限,先到先得)
2、活动结束后,本期大咖太一将会从所有评论中挑选出3名优质评论,奖励码豆2000个
3、按回复楼层百分比抽取8名用户,奖励HDC大会6折购票资格(早鸟票再打6折购票福利,获奖楼层:8%、23%、31%、46%、54%、69%、85%、100%)
活动规则:
1、楼层计算中出现小数的,四舍五入;中奖楼层不符合参与方式的,顺延至下一有效楼层;
2、所有用户均可参与,为杜绝恶意灌水,每个ID连续回复不得超过3楼,总回复不得超过10楼,否则取消获奖资格,奖品顺延至下一有效楼层;
3、中奖用户不重复;
4、码豆发放需要在活动结束后统一发放,需要提供正确的华为云账号名,开奖后请于3日内私信楼主提供个人信息,逾期作废,*注意事项:1.用户需要至少登陆过一次DevCloud会员中心。 2.用户提供的账号名需要是注册时首次填写账号名,后期修改过的无法发放。 3.如果用户是一个租户下的子账号,需要同时提供租户名及用户名;
5、6折购票福利将于活动结束后3个工作日内,在论坛通过私信方式发放,请注意查收论坛提醒和信息。
往期<云话鲲鹏之大咖来了>
《云话鲲鹏之大咖来了》第1期:#初识鲲鹏#之“鲲鹏初学者开始指南”
《云话鲲鹏之大咖来了》第2期:#探索鲲鹏#之“创造一个属于自己鲲鹏开发者环境”
《云话鲲鹏之大咖来了》第3期:#探索鲲鹏#之“在鲲鹏上使用编程语言——C语言
这是新的一期哦,在前几期的留言仍然在的哈~
... 查看全部