最后的日子仍在Joker之前,我真的想带给Habr一次普通的采访,而不是普通的采访。 最近,人们对Arm上的服务器很感兴趣,因此我们有真正的专家来解决这个问题。
Alexander(
alexbel )Belokrylov和Lesha Voitylov以及领导圣彼得堡Oracle开发中心的Grigory Labzovsky一起在一年多以前成立了BellSoft。 现在,该公司已成功运营,开发,并在Java世界中享有盛誉。
根据过去一年在OpenJDK中的提交量,它们排名第五,现在只有Oracle,Red Hat,SAP和Google领先:

您需要了解BellSoft不仅是Arm:
- Liberica JDK 11已发布 ,支持Linux x86_64,Windows,Linux ARMv8,Linux ARMv7(包括Raspberry Pi)。 将针对Mac和Solaris Sparc进行构建。
- 所有架构的图像都发布在Debian,CentOS,Alpine的Docker Hub上。 Alpine的映像是使用
--compress 2
精简版制作的,因此比通常的JDK小得多。
在这次采访中,我们将只涉及Arm,其余时间留给下次使用。
因此,今天在我们的虚拟工作室中:
亚历山大·别洛克里洛夫(Alexander Belokrylov)
蕾莎·沃伊特洛夫
Oleg Chirukhin-JUG.ru集团编辑
告诉我们有关公司的更多信息吗?
BellSoft公司从事多个领域。 每个人都可能知道,圣彼得堡的Oracle在Java Runtime的开发,编译器的开发以及Oracle Cloud-service系统的开发方面具有非常认真的低级专业知识。 甲骨文公司的专业知识也转移到了BellSoft。 今天,我们公司正在开发Java Runtime,我们是OpenJDK的积极贡献者,我们正在开发gcc和llvm编译器,我们将为Apache Graal堆栈做出贡献。 我们从事大数据分析系统,推荐系统的建设,并在IoT上建立了一个小项目,以收集来自现实世界中设备的数据。 在某个时候,我们看到Oracle停止发布用于Arm平台的Java发行版,并发行了自己的发行版,该发行版称为Raspberry Pi的Liberica JDK。 从那时起,我们成功地支持了它。
让我们仔细看看。 例如,什么是Apache堆栈?
我们开始使用Hadoop为Apache Foundation做出贡献-很多与该项目的某些部分相关。 OpenJDK和大型Apache项目虽然不是直接的,但是却是高度互连的。
为什么这一切都是必要的? 例如,某些使它们变慢的类可以超频吗?
是的,这是我们正在努力的领域之一-提高生产率。 例如,特定于平台的部分(在OpenJDK中进行加速)可以帮助加速Hadoop。 如果有兴趣,我们可以谈谈。
解决性能问题时,有必要仔细观察。 也许某个地方存在相同的问题。 您通常会看到在一个地方进行了纠正,因此您需要在几个地方进行纠正,这样通常情况下它会变得更好。 有时(而且经常)将性能优化分解为对多个项目的贡献。 例如,如果要提高checksum
的性能,请查看堆栈的最底部。 假设它是Java。 如果您看起来更高一点,那就是Hadoop,Spark或其他东西。 通常,了解如何改善一个地方,就可以了解如何在另一个地方做。 当然,在这种情况下也有必要进行改进。
每个人都知道你是Liberica :-)让我们谈谈这个。
是的,我们是Liberica JDK。 Liberica首先发现我们没有用于ARM32的端口,并且迫切需要完成这一工作,因为Raspberry Pi上没有Java 9和Java10。那是在2017年Java 9推出时,现在Liberica JDK支持许多架构。和操作系统。
很明显,Oracle不会进一步开发Arm的代码,因此我们开始积极发行和发布我们的发行版以弥合这一差距。 显然人们需要它。
那么,现在有几种Arm分布吗?
是的,Arm有几种Java发行版,它们是不同的。 在我们自己的公司中,您实际上可以获得曾经作为Oracle端口分发工具包的一部分的东西。 我们的发行版包含JavaFX,设备输入/输出和可嵌入的API。 这是一个程序包,从JDK 9开始,它全部与模块一起使用。使用模块化系统,您可以根据需要构建Runtime。 如果需要,可以创建一个小的16 MB运行时。 如果要启用更多功能(例如Web服务器),则需要花费大约32兆字节的静态空间。 您可以根据需要获得运行的运行时。
据我了解,我们在谈论陆军服务器。 并不是说我们已经大量使用了它们。 告诉我有关服务器的信息吗? 在现实生活中它们是否存在?
这个故事已经有很多年了。 最早的Arm服务器是基于32位ARMv7架构制作的。 这是一个非常嘈杂的盒子,实际上无法正常工作,因为BIOS,Linux在那里无法正常工作,几个小时后一切都消失了。 随着时间的流逝,启动它的公司Calxeda关闭了。 但是为服务器开发替代架构的想法在社会上已经存在。 Arm最终发布了适用于32位和64位的ARMv8体系结构的新规范。 基于此规范的64位版本,一些制造商现在正在为服务器构建其处理器实现。 例如,现在由Marvell购买的Ampere Computing,Cavium和Qualcomm。 还有另一家公司-几年前,AMD也发布了基于Arm架构的服务器。 我认为,他们仍然继续这样做。
如果从Marvell删除一个字母L,您将获得超级英雄。 记住所有这些办公室名称的好方法。
那里的超级英雄实际上是Cavium / Marvell,因为所有这些超级英雄都是他们设法在一个CPU上最多组装128个线程的最高效芯片,并且性能与Xeon Gold和Platinum相当或更好。 您可以将多个CPU放在一台服务器中,您会得到一个奇特的东西,它具有可用于严肃任务的快速内存。
普通应用程序的可伸缩性限制如何增加? 坚持一台服务器有意义多少CPU?
这完全取决于您要为其构建服务器的任务。 不同的制造商专注于不同的领域,但是如果我们谈论的是Cavium / Marvell,则它们显然专注于计算领域,在这里您需要快速并行地咀嚼大量数据。 他们不关注单个线程的超大性能(同时非常好),也就是说,通常来说,此CPU表现出高性能且成本低廉。
为什么选择Arm,而不选择Intel? 我们有出色的Intel服务器,为什么还要提出其他建议?
回答这个问题既困难又容易。 首先,一个神圣的地方不会碰巧是空的。 我们看到AMD也在尝试为服务器应用构建某种替代性的Intel。 当然,替代制造商将总是有替代市场。
没有人愿意和一个垄断者生活在一起。
非常真实的话。 所有处理器使用者(主要是云提供商)都希望有替代的机会。 这样您就可以选择将成本与成本进行比较,并针对特定的应用选择更有利可图的架构。
那费用呢? 比英特尔解决方案贵多少钱?
这是一个棘手的问题。 首先,正如Alexey所说,制造商就足够了。 显然,现在武器处理器的制造商不会互相竞争,而是互相竞争。 他们占据了一些稍有不同的壁.。 如果Cavium是高性能计算,那么高通就是中端服务器,而Ampere则是工作站或低端服务器。
如果我没记错的话,来自安培计算公司的CPU本身的价格是600-900美元,而且它们与英特尔竞争,后者的价格约为1,500美元。 鱼子酱有点贵。 他们将再次与英特尔竞争,后者的成本要高得多。 您需要了解服务器价格不仅是CPU的价格。 服务器价格也是内存,磁盘,支持,消耗。 例如,如果您赢得一个参数,那就是CPU的成本-很好,但是您只会便宜一点。 如果您通过两种方式获胜(例如,更便宜,提供更好的性能),那么他们会更密切地关注您。 举例来说,如果您可以用更少的功耗完成所有这三项操作,那么这已经是一个胜利的应用程序。
除了铁及其支持之外,软件支持也很重要。 您无法在Arm上运行您现在在Intel上运行的所有功能。
当然可以 我必须说,Arm软件生态系统已经向前迈进了一大步。 如果五年前在举起一块铁时有问题,那么现在就没有此类问题。 您来了,一切就为您服务。 您曾经使用过的所有东西-Linux,Docker,Kubernetes,Xen,Java,Hadoop,Spark,Kafka等等。
Java呢? 告诉我们它是如何工作的,它与“通常”的有什么不同?
没什么不同,这是它的主要优点。 它足以处理分配给服务器Java的任务。 您将应用程序(我希望它没有本地部分,否则您将不得不重新编译)转移到Arm服务器,检查性能,并在大多数情况下高兴。 最近,发表了一篇文章,我们比较了Arm服务器和Intel服务器的性能 。 这篇文章发表在Java Magazine上。
Oracle是否让您实质上在自己的日记中刊登广告? 说真的
显然,有需求。 事实证明,用于Java工作负载的Java Arm服务器工作得很好。 它们是相同的,甚至比英特尔的同类产品还要好。
谁应该阅读您的文章?
对于那些想看看的人,请测试新体系结构是否适合其负载。 尝试使用Java和相同的Arm服务器。 将Arm Server Cloud推入Google,您可以获得多家云提供商,您可以持卡尝试所需的东西。
Java已经预先安装在那里了吗?
是的 普通的OpenJDK。
常规的OpenJDK和您的Liberica发行版是一样的吗? 我看到您有提交-是它还是其他?
通常,Arm端口和OpenJDK的历史非常有趣且华丽。 最初,Oracle开发了Arm端口,当Arm发布ARMv8体系结构时,向该Arm端口添加了另一个端口,该端口允许Java在ARMv8上运行。 与此同时,Red Hat也朝着这个方向努力,并在此体系结构的OpenJDK中注入了端口。 碰巧的是,社区专注于Red Hat端口。 因此,现在我们有了用于ARM32端口的OpenJDK中的附件,它实际上复制了aarch64端口的功能-我们将在JDK 12中将其从那里删除。通过这样做,我们有了JEP 340。
我必须说,在停止支持之前,Oracle从嵌入式所有Arm端口中倾注了OpenJDK的所有成就。 现在,Oracle中为Arm提供的所有功能都已加入。
这是合乎逻辑的,因为主要是铁的制造商和规范的制造商应该对软件生态系统能够在其硬件上工作并与其规范兼容感兴趣。 为此,必须打开代码。
我看到图表显示了惊人的数字,即位于圣彼得堡的某公司BellSoft淹没了大量提交。
是的,我们在OpenJDK提交者中排名前五。 自然,Oracle处于竞争状态,每年大约有4000次提交。
接下来是Red Hat,SAP,Google和BellSoft。 我们一点也没联系到Google。 在我们之后的是IBM。
您过去在Oracle工作的员工比例是多少?
100%。 BellSoft由前Oracle员工组成。
这是不公平的竞争,因为Google并非由Oracle员工的100%组成。 告诉我什么样的承诺? 如何取得这样的成功? 如何进入前5名提交者?
我们在几个方向上工作。 现在,提交的主要方向是ARM64端口,它是同一服务器端口。 铁生产商对此很感兴趣。 他们对Java快速处理其硬件以应对负载感兴趣。 我们提交的第二件事是我们支持的ARM32端口,这是嵌入式端口。 第三个是旨在支持,修复和改善Java整体功能的承诺。
我们刚刚谈到了服务器上的64位。 为什么32位端口仍然有效?
因为它用于嵌入式。
因为如此多的公司已经为嵌入式应用程序的ARMv7架构实现了CPU。 他们的仓库中有大量筹码。 如果内存适合我,那么这些芯片的全部种类就是ARM32,最受欢迎的是ARMv5。 这种架构已经存在了很多年,但是,CPU相当便宜,制造商仍在考虑在这种架构上创建新设备。
当我们谈论建筑时,我们谈论的是多少? 普通人可以自己买东西做实验吗?
Raspberry Pi是ARM32平台中最受欢迎的平台,它从第二版-第二版和第三版开始,再加上ARM32端口支持的所有功能。 我们的发行版之一是经过测试并且可以在Raspberry Pi上运行的ARM32发行版。 我们看到这是广泛用户最常用的平台,因此我们发布了专门用于Raspberry Pi的端口。 我们有专门针对高度专业化铁的港口,但这是另一回事。
也许您不需要购买。 您可以看到家用路由器中的内容。 很可能有这样的事情。
那里的开发人员技能应该对应多少?
您需要成为Java开发人员。
您是否需要技巧来了解基尔霍夫定律以进行编码?
您只有一台可以通过SSH连接到的计算机。 无需刷新。 您将带有Linux映像的microSD卡插入Raspberry Pi中,将其插入,然后一切开始。 与所有其他单板计算机相比,这是Raspberry Pi的主要优势。 其配置的简单性,获得了可行的系统。
以及如何使用传感器? 我们为了外部系统而做所有这些,对吧?
Raspberry Pi具有GPIO系统和可以连接任何东西的引脚。 通常,所有发烧友都将所有外围设备连接到Raspberry Pi。
API是什么样的? 需要写些什么,例如“从恒温器中获取编号”?
您需要阅读恒温器数据表,并了解什么是寄存器,如何初始化,如何配置。 如果是I2C,请调用该方法进行配置,并在其中传递所有参数。 然后告诉他i2c.open,并将其作为Java对象使用。
是否可以在恒温器周围编写漂亮的对象包装器以在纯对象模型中工作? 可以这样做以便不再阅读数据表,而用立面将其关闭吗?
如果该传感器的制造商进行了现成的配置,那将是很好的选择,而我们作为Java程序员,只是接受并使用了它。 该库使用一个传感器,而库则用于另一个传感器。 这样的库或类似的库称为Pi4J。 现在,它的发展速度不及Oracle迁移Java嵌入式系统时的发展速度,但是它仍然没有消失,定期出现一些更新。 有一个选择:要么使用OpenJDK-GPIO中的东西,要么使用Pi4J库。
如果我是硬件制造商,那么我对Java一无所知,但是我希望Java程序员使用它,我应该与谁联系? 要联系你吗? 还是有做这件事的专家?
是的,我们就是这样的专家。
到目前为止,我们还没有走得太远。 我记得您有一些JEP,对吗?
OpenJDK版本11包含17个JEP。 14是由甲骨文,1 — Google,1 — Red Hat,1 — BellSoft和Cavium联合制造的。 我们的JEP是ARM64平台上针对特定工作负载的Java性能改进的大杂烩。 JEP分别称为“ 改进Aarch64本征” 。 简而言之,我们提高了使用String,使用数组以及使用数学和三角函数进行运算的性能。
什么是内在函数? 并非所有人都知道。
当虚拟机考虑正弦时,可以执行针对特定体系结构的优化汇编程序插入,而不必执行直接的Java代码。
哪个直接调用具有sine命令的处理器?
它将根据复杂的算法进行计算。 有些内在函数会调用某种汇编程序命令。 例如,与校验和的计算相关联的内在函数。 几乎所有架构都存在这样的汇编指令。 为了获得良好的性能提升,编写许多汇编器页面时,内部函数会更加复杂。
还有加密,是在硬件中吗?
是的,这通常是对特定处理器的现有指令的调用。 有时-在扩展芯片上使用扩展名。
返回到您的JEP:如何确定哪些代码如此炙手可热,以至于值得这样做那么硬代码?
好问题。 当我们开始为ARM64平台进行优化时,除了性能之外,我们没有大量的工具。 是的,他没有到处工作。 目前还没有用于ARM64端口的JFR实现;那时Oracle还没有将其放在Open Source中。 我们曾经使用过的各种衡量性能的工具,例如async-profiler,诚实-profiler-它们也不适用于ARM64平台。 我们要做的第一件事是在此架构上获得所有这些工具。
为什么不开箱即用?
因为有某种特定于CPU的部分。
接下来,在您要优化的工作负载上运行这些工具,长时间查看屏幕,尝试了解那里有哪些热门方法,热点在哪些地方。 在某些简单情况下,没有实现某些针对特定体系结构的汇编程序插入。 在这种情况下,回退发生在Java代码中。 仅通过实现这些汇编器插入,就可以提高性能。 当您需要了解需要在Java中为所有体系结构创建的新汇编程序插入项时,还有许多复杂的地方。 这样的工作。
山姆数据集从哪里获得? 压缩整个github并在JIT下运行它?
显然,一些基准或工作负载正在优化中。 著名的基准测试-SpecJBB,SpecJVM。 有特定的工作负载使特定的客户感兴趣。 只需运行这些工作负载并查看瓶颈。
所有这些SpecJVM都是非常古老的测试,对吗? 新的lambda,流,重要日期呢?
没事 不在那里
在哪里得到呢?
新的工作负载。
例如,apachevsky堆栈?
是的Hadoop具有标准的TeraSort基准,硬件制造商喜欢对其进行衡量。这也是优化的有趣任务之一。
现在需要优化的主要功能是什么?例如,同一JEP的顶部。
我们已经关闭了该体系结构的主要问题区域。当然,在那里,我们尚未完成的工作以及我们将继续做的工作仍然处于未耕作的领域。我们将继续使用三角函数,我们将研究将出现的新内在函数。它们还没有出现,但是我们知道它们会很快出现。我们将不得不看一下巴拿马项目,英特尔正在积极参与其中。
编译器将如何看待您的工作?相对而言,魔术般地了解您是否在考虑一些众所周知的公式并进行优化?
Math.sin
, Java- sin
.
- , sin
?
是的 , .
- , , ?
C2, .
- . , ?
.
, Linaro Connect OpenJDK ARM64. Linaro Foundation Arm-.
?
Arm, . .
?
. . Joker, .
!
, . floating point. , , , . — , . , , — . , .
. , , ?
是的 Arm … , — . , . - - , — . , , . , , . , Java- , .
, - , . ?
OpenJDK BellSoft.
, , ? ? Oracle, . JVM-?
, OpenJDK. ()
, 250 . ?
, 250 . .
— ? .
, . . , — . - .
, ?
.
?
. . , - , , . , , , . - . , . , , . , OpenJDK .
?
Mailing list. - mailing list, .
-?
Jira. OpenJDK Jira, , , .
Jira Jira, , ?
OpenJDK . , Jira.
? , , , , , Arm?
Arm, , , . shared-, , . , . .
, . , .
, . HotSpot, , , . , , - — .
- ?
是的 HotSpot tiers. smoke- . , , . , performance-, stress-.
. , , JDK, . JDK, . , ?
JDK, , JVM. JVM 4 : runtime, serviceability, garbage collector, compiler. - . , runtime. - out of order execution, , GC . , JIT, . community OpenJDK — JIT.
, , ?
, . , . . . , -, , .
? ? ? , , - ?
. , .
, , - , . .
. , OpenJDK Arm. , , IT. -, , Arm . , Arm, Arm , . , OpenJDK, Arm. , , . Arm Intel SPEC-. , . . !
, ?
, ?
, .
. . , ARM64? . , Arm .
.
— , , -, . ? - , Arm?
, .
?
Arm . . , , ? . .
, . , , , . - 10 , GPU - , . Cloud- . , , -. GPU, CPU. -, HTTP 404. , . , .
, - , ? - ?
. , . 30 ? . , . - , , . : 20% , 20%, — 10%, - . , Arm .
, Java, , . , , .
Arm , BellSoft — Arm, . OpenJDK, - . Liberica Liberica Arm 32 64, Liberica Linux (64 ), Windows Liberica Mac. Liberica Solaris Sparc. .
Liberica Mac? -.
? Oracle , … . ?
?
, Oracle. , Java- .
Java- .
, . , .
.
是的 -, support . - — , , Cloud-. , , - , .
, Oracle JDK , API. -XX:+UnlockCommercialFeatures
. , . , Oracle , .
, Oracle - Oracle, . . Java , .
, , OpenJDK . . BellSoft , , .
, , . . , , OpenJDK — .
!
. , — . - ?
. , , , . .
- OpenJDK.
. ?
Liberica, . Raspberi Pi, Linux-. , Java, -.
Joker, , BellSoft — .
. , , . , :-) Joker — .
, . !
. Joker 2018 «, ARM? , » . .