建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

太一

发帖: 8粉丝: 20

级别 : 版主,版块专家

发消息 + 关注

发表于2019年07月12日 17:51:22 5844 8
直达本楼层的链接
楼主
显示全部楼层
[新手课堂] 【Hello,鲲鹏】第四期:在鲲鹏上使用编程语言——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在鲲鹏上的兼容性是具备的。


举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

蓝书签

发帖: 63粉丝: 33

发消息 + 关注

发表于2019年07月26日 17:05:41
直达本楼层的链接
沙发
显示全部楼层

不错的系列,希望继续更新

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

寻水的鱼

发帖: 134粉丝: 325

级别 : 管理员

发消息 + 关注

发表于2019年07月30日 17:41:58
直达本楼层的链接
板凳
显示全部楼层

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

LD

发帖: 0粉丝: 0

发消息 + 关注

发表于2019年08月09日 11:02:09
直达本楼层的链接
地板
显示全部楼层

而且部分版本的JVM有Bug,一旦Code Cache满了,则所有的编译功能都会被停止  


这个部分版本 具体是指的哪些版本? 或是 哪些版本没有这个Bug 能否明确下?  @楼主

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

x88484532

发帖: 0粉丝: 0

发消息 + 关注

发表于2019年08月10日 13:15:41
直达本楼层的链接
5#
显示全部楼层

继续学习。

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

太一

发帖: 8粉丝: 20

级别 : 版主,版块专家

发消息 + 关注

发表于2019年08月12日 11:26:20
直达本楼层的链接
6#
显示全部楼层

LD 发表于 2019-8-9 11:02而且部分版本的JVM有Bug,一旦Code Cache满了,则所有的编译功能都会被停止 这个部分版本 具体是指的哪些版本? 或是 哪些版本没有这个Bug 能否



触发问题时,函数位置0x481e00。反汇编后是CodeHeaplargest_free_block函数中的遍历链表的位置。和这个函数有关的BUG有一些,主要都和内存碎片有关

image.png

反汇编地址

(gdb) disassemble 0x481e00

Dump of assembler code for function _ZNK8CodeHeap18largest_free_blockEv:

0x0000000000481d88 <+0>:stpx29, x30, [sp,#-48]!

0x0000000000481d8c <+4>:movx29, sp

0x0000000000481d90 <+8>:stpx19, x20, [sp,#16]

0x0000000000481d94 <+12>:strx21, [sp,#32]

0x0000000000481d98 <+16>:ldrw1, [x0,#248]

0x0000000000481d9c <+20>:ldrx20, [x0,#272]

0x0000000000481da0 <+24>:movx19, x0

0x0000000000481da4 <+28>:lslx20, x20, x1

0x0000000000481da8 <+32>:bl0x8180b4 <_ZNK12VirtualSpace13reserved_sizeEv>

0x0000000000481dac <+36>:movx21, x0

0x0000000000481db0 <+40>:movx0, x19

0x0000000000481db4 <+44>:bl0x8180a4 <_ZNK12VirtualSpace14committed_sizeEv>

0x0000000000481db8 <+48>:ldrx3, [x19,#224]

0x0000000000481dbc <+52>:ldrx2, [x19,#256]

0x0000000000481dc0 <+56>:ldrw5, [x19,#248]

0x0000000000481dc4 <+60>:subx2, x3, x2

0x0000000000481dc8 <+64>:ldrx1, [x19,#272]

0x0000000000481dcc <+68>:lslx2, x2, x5

0x0000000000481dd0 <+72>:subx0, x0, x2

0x0000000000481dd4 <+76>:lslx1, x1, x5

0x0000000000481dd8 <+80>:subx4, x0, x1

0x0000000000481ddc <+84>:subx4, x21, x4

0x0000000000481de0 <+88>:subx4, x4, x20

0x0000000000481de4 <+92>:cmpx4, x20

0x0000000000481de8 <+96>:movx0, x4

0x0000000000481dec <+100>:b.cs0x481e1c <_ZNK8CodeHeap18largest_free_blockEv+148>

0x0000000000481df0 <+104>:ldrx1, [x19,#264]

0x0000000000481df4 <+108>:cbzx1, 0x481e2c <_ZNK8CodeHeap18largest_free_blockEv+164>

0x0000000000481df8 <+112>:movx2, #0x0 // #0

0x0000000000481dfc <+116>:ldrx3, [x1]

0x0000000000481e00 <+120>:ldrx1, [x1,#16]

0x0000000000481e04 <+124>:cmpx2, x3

0x0000000000481e08 <+128>:cselx2, x2, x3, cs

0x0000000000481e0c <+132>:cbnzx1, 0x481dfc <_ZNK8CodeHeap18largest_free_blockEv+116>

0x0000000000481e10 <+136>:lslx0, x2, x5

0x0000000000481e14 <+140>:cmpx0, x4

0x0000000000481e18 <+144>:cselx0, x0, x4, cs

0x0000000000481e1c <+148>:ldpx19, x20, [sp,#16]

0x0000000000481e20 <+152>:ldrx21, [sp,#32]

0x0000000000481e24 <+156>:l


free_sz足够的,但是FreeBlock链表中没有足够长的连续长度。

size_t CodeHeap::largest_free_block() const {

// First check unused space excluding free blocks.

size_t free_sz = size(_free_segments);

size_t unused = max_capacity() - allocated_capacity() - free_sz;

if (unused >= free_sz)

return unused;

// Now check largest free block.

size_t len = 0;

for (FreeBlock* b = _freelist; b != NULL; b = b->link()) {

if (b->length() > len)

len = b->length();

}

return MAX2(unused, size(len));

}



下面是其中一个相关的Bug,解决版本是7u101。


https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8006952

image.png


点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

chenzeshi

发帖: 4粉丝: 0

发消息 + 关注

发表于2020年01月04日 00:28:14
直达本楼层的链接
7#
显示全部楼层

高级语言的支持非常重要,java,python应用范围非常广

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

linzhuofeng

发帖: 37粉丝: 5

发消息 + 关注

发表于2020年01月05日 19:59:08
直达本楼层的链接
8#
显示全部楼层

python3.7是否也进行过兼容性验证了?

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

五湖四海@银河护卫队

发帖: 168粉丝: 72

级别 : 版主,版块专家

发消息 + 关注

发表于2020年04月29日 19:44:43
直达本楼层的链接
9#
显示全部楼层

很赞~

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200