「Javaの世界は二度と変わらない」-BellSoftのAlexander BelokrylovとAlexey Voitilovへのインタビュー

最後の日はジョーカーの前に残り、私は本当に普通のインタビューではなく、強力なゲームをHabrに持ち込みたかった。 最近、人々はArm上のサーバーに興味を持っているので、たまたまこのトピックに関する専門家がいます。



Alexander( alexbel )BelokrylovとLesha Voytylovは、サンクトペテルブルクのOracle開発センターを率いたGrigory Labzovskyとともに、1年ほど前にBellSoftを設立しました。 現在、同社は正常に運営、開発を行っており、すでにJavaの世界で名声を得ています。



過去1年間のOpenJDKでのコミット数で5位になりましたが、現在はOracle、Red Hat、SAP、Googleのみが先を行っています。







BellSoftはArmだけではないことを理解する必要があります。





このインタビューでは、Armのみに触れ、次回は残りを残します。



それで、今日私たちの仮想スタジオで:



アレクサンダー・ベロクリロフ







レシャ・ヴォイティロフ







Oleg Chirukhin-JUG.ruグループの編集者










会社についてもっと教えてください。







BellSoft社はいくつかの分野に従事しています。 サンクトペテルブルクのOracleは、Javaランタイムの開発、コンパイラの開発、Oracleクラウドサービスシステムの開発において非常に深刻な低レベルの専門知識を持っていることを誰もが知っているでしょう。 そして、Oracleのこの専門知識はBellSoftに移行しました。 現在、当社はJavaランタイムを開発しています。OpenJDKの積極的な貢献者であり、gccおよびllvmコンパイラを開発しています。Apache、Graalスタックに貢献します。 ビッグデータ分析システム、レコメンダーシステムの構築に携わっており、IoTで小規模プロジェクトを構築して、実世界のデバイスからデータを収集しています。 ある時点で、OracleはArmプラットフォーム用のJavaディストリビューションのリリースを停止し、Raspberry Pi用のLiberica JDKと呼ばれる独自のディストリビューションをリリースしました。 それ以来、私たちはそれを正常にサポートしています。








よく見てみましょう。 たとえば、Apacheスタックとは何ですか?







私たちはHadoopでApache Foundationに貢献し始めました-このプロジェクトの特定の部分に多くが結びついています。 OpenJDKと大規模なApacheプロジェクトは、直接ではありませんが、高度に相互接続されています。










なぜこれがすべて必要なのでしょうか? たとえば、速度を落とす一部のクラスはオーバークロックできますか?







はい、これは私たちが取り組んでいる分野の1つであり、生産性の向上です。 たとえば、プラットフォーム固有のパーツは、OpenJDKで加速するとHadoopの加速に役立ちます。 興味があれば、それについて話すことができます。







パフォーマンスの問題を解決するとき、何かを間近に見るのは理にかなっています。 おそらくどこかで同じ問題があります。 1つの場所で修正したことをいくつかの場所で修正する必要があることがよくあります。そのため、一般的には改善されます。 時々(そして非常に頻繁に)パフォーマンスの最適化は、いくつかのプロジェクトへの貢献に分解されます。 checksum



パフォーマンスなどを改善したい場合は、スタックの一番下を見てください。 Javaだとしましょう。 少し高く見ると、Hadoop、Spark、または他の何かになります。 通常、ある場所を改善する方法を理解すると、別の場所でそれを行う方法を理解できます。 もちろん、この場合、そこに行って改善することも理にかなっています。








誰もがあなたがリベリカであることを知っています:-)これについて話しましょう。







はい、私たちはLiberica JDKです。 Libericaは、ARM32用のポートがないことがわかったという事実から始まりましたが、Raspberry PiにはJava 9とJava 10が残っていなかったため、早急に行う必要があります。およびオペレーティングシステム。







OracleがArmのコードをさらに開発することはないことが明らかになり、このギャップを埋めるためにディストリビューションを積極的に提供およびリリースし始めました。 人々がそれを必要としていることが明らかになりました。










それで、今、いくつかのArmディストリビューションがありますか?







はい、ArmにはいくつかのJavaディストリビューションがありますが、それらは異なります。 弊社では、Oracleポート配布キットの一部であったものを実際に入手できます。 ディストリビューションには、JavaFX、デバイスの入力/出力、埋め込み可能なAPIがあります。 これはパッケージであり、すべてJDK 9以降のモジュールで機能します。モジュラーシステムを使用すると、必要に応じてランタイムをビルドできます。 必要に応じて、16メガバイトの小さなランタイムを作成できます。 Webサーバーなど、より多くの機能を有効にするには、約32メガバイトの静的スペースを使用する必要があります。 必要に応じて動作するランタイムを取得できます。








私の知る限り、軍用サーバーについて話していました。 私たちがそれらを大量に使用したと言っているわけではありません。 サーバーについて教えてください? 現実の世界では、それらはまったく存在しますか?







この物語は長年にわたって存在しています。 最初のArm-serverは、ARMv7、32ビットのアーキテクチャに基づいて作成されました。 それはひどくうるさい箱でしたが、実際には機能しませんでした。BIOS、Linuxがそこで動作せず、数時間後にすべてが消えたからです。 それを始めた会社であるCalxedaは、時間とともに閉鎖されました。 しかし、サーバーの代替アーキテクチャを開発するというアイデアは、社会にownかれました。 Armは最終的に、32ビットと64ビットの両方をサポートするARMv8アーキテクチャの新しい仕様をリリースしました。 この仕様の64ビットバージョンに基づいて、いくつかのメーカーは現在、サーバープロセッサの実装を構築しています。 たとえば、現在Marvellが購入しているAmpere Computing、Cavium、およびQualcomm。 そして別の会社があります-AMDは数年前にArmアーキテクチャに基づくサーバーもリリースしました。 私の意見では、彼らはまだこれを続けています。








Marvellから文字Lを1つ削除すると、スーパーヒーローが得られます。 これらすべてのオフィスの名前を覚えるのに良い方法です。







そこにいるスーパーヒーローは実際にはCavium / Marvellです。そのすべてのために、1つのCPUで最大128スレッドの生産性の高いチップを組み立てることができ、Xeon GoldおよびPlatinumと同等以上のパフォーマンスを実現しました。 1台のサーバーに複数のCPUを搭載でき、深刻なタスクに使用できる高速メモリを備えた巨大なものを取得できます。








一般的なアプリケーションのスケーラビリティ制限はどのように拡大しますか? 1台のサーバーに固執するのはどのくらいのCP​​Uに意味がありますか?







それはすべて、サーバーを構築するタスクに依存します。 異なるメーカーは異なるニッチに焦点を当てていますが、Cavium / Marvellについて話している場合、彼らは明らかに大量のデータを並行して素早く噛む必要があるコンピューティングニッチに焦点を当てています。 彼らは、単一のスレッドの超大規模なパフォーマンスに焦点を合わせていません(同時に、非常に優れています)。つまり、一般に、このCPUは低コストで高いパフォーマンスを発揮します。








IntelではなくArmを選ぶ理由 素晴らしいIntelサーバーがありますが、なぜ他の何かを思い付きますか?







この質問に答えることは難しく、簡単です。 まず、聖地はたまたま空ではありません。 AMDは、サーバーアプリケーション向けに何らかの代替Intelを構築しようとしていることもわかります。 そしてもちろん、代替メーカーからの市場の代替部分が常に存在します。






1人の独占者と一緒に住みたいと思う人はいません。







非常に真の発言。 すべてのプロセッサコンシューマ、およびこれらは主にクラウドプロバイダであり、代替手段を求めています。 選択できるように、コストとコストを比較し、特定のアプリケーションに対してより収益性の高いアーキテクチャを選択します。










そして、コストはどうですか? インテルのソリューションよりもはるかに高価ですか?







これは難しい質問です。 まず、アレクセイが言ったように、メーカーで十分です。 現在、アームプロセッサの製造業者は互いに競合せず、他の誰かと競合していることは明らかです。 それらはわずかに異なるニッチを占有します。 Caviumが高性能コンピューティングである場合、Qualcommはミッドレンジサーバーであり、Ampereはワークステーションまたはローエンドサーバーです。







私の記憶が正しければ、Ampere ComputingのCPU自体の価格は600〜900ドルで、Intelと競合し、CPUの価格は約1,500ドルです。 キャビウムは少し高価です。 繰り返しますが、彼らはIntelと競争しますが、Intelはかなり高価です。 サーバーの価格はCPUの価格だけではないことを理解する必要があります。 サーバーの価格は、メモリ、ディスク、サポート、消費量でもあります。 たとえば、CPUのコストなど、1つのパラメーターで勝った場合、それで問題ありませんが、少し安くなります。 たとえば、より安く、より良いパフォーマンスを提供するなど、2つの方法で勝った場合、彼らはあなたをより注意深く見ます。 また、たとえば3つで、より少ない電力消費でこれをすべて実行できる場合、これはすでに勝利を目指しています。








鉄とそのサポートに加えて、ソフトウェアでのサポートも重要です。 現在IntelでスピンしているすべてをArmで実行することはできません。







もちろん。 ソフトウェアのArmエコシステムは大きく前進したと言わなければなりません。 5年前に鉄片の調達に問題があったとしても、今はそのような問題はありません。 あなただけが来て、すべてがあなたのために箱から出して動作します。 Linux、Docker、Kubernetes、Xen、Java、Hadoop、Spark、Kafkaなど、使用に慣れているすべてのもの。








javaはどうですか? どのように機能するか、「通常の」ものとどう違うのか教えてください。







違いはありません。これが主な利点です。 サーバーのJavaに割り当てられているタスクに対処するのに十分な生産性です。 アプリケーションを(ネイティブ部分がないことを願っています。そうでない場合は、再コンパイルする必要があります)、Armサーバーにパフォーマンスを確認し、ほとんどの場合、喜んでください。 最近、ArmサーバーとIntelサーバーのパフォーマンスを比較する記事が公開されました 。 この記事はJava Magazineに掲載されました。








オラクルは、本質的にあなた自身の雑誌に広告を掲載させましたか? 真剣に。







どうやら、需要があります。 Javaワークロード用のJava Armサーバーは非常にうまく機能することがわかりました。 これらは、Intelの同等品と同じか、さらに優れています。








誰があなたの記事を読むべきですか?







見たい人のために、新しいアーキテクチャが負荷に適しているかどうかをテストします。 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コミッターのトップ5に入っています。 当然のことながら、オラクルは競争の対象外であり、年間約4,000件のコミットがあります。







次に、Red Hat、SAP、Google、およびBellSoftが登場します。 Googleには少しも連絡しませんでした。 そして、私たちのすぐ後にIBMがいます。








従業員の何パーセントがオラクルで働いていましたか?







100%。 BellSoftは元Oracleの従業員で構成されています。








GoogleはOracleの従業員の100%で構成されていないため、これは不公平な競争です。 どんな種類のコミットですか? そのような成功を達成する方法は? トップ5のコミッターになるには?







私たちはいくつかの方向に取り組んでいます。 現在、コミットの主な方向は、同じサーバーポートであるARM64ポートです。 鉄の生産者にとって興味深い。 彼らは、Javaがハードウェアで素早く動作し、負荷に対処することに興味を持っています。 コミットする2番目は、サポートするARM32ポートです。これは組み込みポートです。 3番目は、Javaの全体的な機能のサポート、修正、および改善を目的としたコミットです。








サーバーで64ビットについて話しました。 なぜ32ビットポートがまだ生きているのですか?







埋め込みで使用されるため。







非常に多くの企業が、組み込みアプリケーション用のARMv7アーキテクチャ用のCPUを実装しているためです。 彼らは倉庫に大量のチップを持っています。 私の記憶が私に正しく役立つなら、これらのARM32チップの中で最も人気があるのはARMv5です。 このアーキテクチャは長年使用されてきましたが、それでもCPUは非常に安価であり、製造業者はこのアーキテクチャで新しいデバイスを作成することをまだ検討しています。








私たちが建築について話すとき、私たちはどのくらい話しているのでしょうか? 普通の人は自分で何かを買って実験できますか?







ARM32プラットフォームで最も人気のあるのはRaspberry Piで、2番目のバージョンから始まります-2番目と3番目のバージョンに加えて、これらはすべてARM32ポートでサポートされています。 当社のディストリビューションの1つは、Raspberry Piでテストおよび実行されるARM32用のものです。 これは幅広いユーザーにとって最も一般的なプラットフォームであることがわかりました。したがって、Raspberry Pi専用のポートをリリースします。 高度に特殊化された鉄のためのより具体的なポートがありますが、それは別の話です。







たぶん購入する必要はありません。 自宅のルーターにあるものを見ることができます。 そのようなものがある可能性が非常に高いです。








そこで、開発者のスキルはどれくらい対応する必要がありますか?







Java開発者である必要があります。








コーディングするためにキルヒホッフの法則を知るためのトリッキーな方法が必要ですか?







SSH経由で接続できるコンピューターがあります。 フラッシュする必要はありません。 Raspberry Pi用のLinuxイメージを含むmicroSDカードを取り出して挿入すると、すべてが始まります。 これは、他のすべてのシングルボードコンピューターと比較したRaspberry Piの主な利点です。 構成のシンプルさ、実行可能なシステムの取得。








また、センサーの操作方法は? 外部システムのためにこれをすべて行いますか?







Raspberry PiにはGPIOシステムと、何でも接続できるピンがあります。 通常、すべての愛好家がすべての周辺機器をRaspberry Piに接続します。








APIはどのように見えますか? 「サーモスタットから番号を取得してください」など、何を書く必要がありますか?







サーモスタットのデータシートを読んで、レジスタとは何か、それを初期化する方法、設定する方法を理解する必要があります。 I2Cの場合、設定のためにメソッドを呼び出し、そこにすべてのパラメーターを渡します。 次に、i2c.openに伝えて、Javaオブジェクトとして操作します。








サーモスタットの周りに美しいオブジェクトラッパーを記述して、後で純粋なオブジェクトモデルで作業できるようにすることは可能ですか? データシートをもう読み取らないように、ファサードで閉じるようにできますか?







このセンサーの製造元が既製の構成を作成し、Javaプログラマーとしてそれを単純に使用していただければ幸いです。 ライブラリは1つのセンサーで動作し、別のセンサーで動作するライブラリです。 このようなライブラリまたはこれに近いものはPi4Jと呼ばれます。 現在、Oracleが組み込みJavaを動かしていた頃ほど急速に開発されていませんが、まだ死なず、定期的に更新されています。 選択肢があります:OpenJDKのGPIOにあるものを使用するか、Pi4Jライブラリを使用します。








ハードウェアメーカーの場合、Javaについては何も知りませんが、JavaプログラマーにJavaを使用してもらいたいのですが、誰に連絡すればよいですか? あなたに連絡するには? または、これを行う専門家はいますか?







はい、私たちはそのような専門家です。








これまでのところ、我々は遠くまで走っていません。 JEPがいくつかあったことを覚えていますよね?







OpenJDKバージョン11には17個のJEPが含まれています。 14はOracle、1 — Google、1 — Red Hat、1 — BellSoftとCaviumによって作成されました。 JEPは、特定のワークロード向けのARM64プラットフォームでのJavaパフォーマンス改善の寄せ集めです。 JEPは、それぞれImprove Aarch64 Intrinsicsと呼ばれます。 つまり、文字列、配列、および数学と三角法を使用した操作のパフォーマンスが向上しました。








組み込み関数とは何ですか? 誰もが知っているわけではありません。







仮想マシンは、直接Javaコードを実行する代わりに、サインを考慮すると、特定のアーキテクチャの最適化されたアセンブラー挿入に置き換えることができます。








どちらがサインコマンドを持つプロセッサを直接呼び出しますか?







複雑なアルゴリズムに従って計算します。 ある種のアセンブラコマンドを呼び出す組み込み関数があります。 たとえば、チェックサムの計算に関連する組み込み関数。 このようなアセンブリ命令は、ほとんどすべてのアーキテクチャに存在します。 パフォーマンスを向上させるために、多くのアセンブラページを記述する場合、より複雑な組み込み関数があります。








暗号化、それはハードウェアですか?







はい、これは通常、特定のプロセッサの既存の命令への呼び出しです。 時々-それらがあるチップで拡張機能を使用します。








JEPに戻る:どのコードが非常にホットで、ハードコードする価値があるかを判断する方法





いい質問ですね。 ARM64プラットフォーム向けに最適化を開始したとき、perf以外に多数のツールはありませんでした。 はい、彼はどこでも働きませんでした。 ARM64ポートにはJFR実装はありませんでしたが、Oracleはその時点ではまだオープンソースに実装していませんでした。 非同期プロファイラー、正直プロファイラーなど、使用していたパフォーマンスを測定するためのさまざまなツール-ARM64プラットフォームでも機能しませんでした。 最初にしたことは、このアーキテクチャでこれらのツールをすべて入手することでした。








すぐに動作しないのはなぜですか?







ある種のCPU固有の部分があるからです。



次に、最適化しようとしているワークロードでこれらのツールを起動し、画面を長時間見て、そこでどのメソッドがホットで、どの場所がホットであるかを理解しようとします。 特定のアーキテクチャの一部のアセンブラ挿入が実装されていない単純なケースがあります。 この場合、フォールバックはJavaコードで発生します。 これらのアセンブラインサートを実装するだけで、パフォーマンスを向上させることができます。 すべてのアーキテクチャ用に作成するためにJavaで必要な新しいアセンブラの挿入を理解する必要がある場合、より複雑な場所があります。 そのような仕事。








Samデータセットの入手先 github全体を圧縮してJITで実行しますか?







一部のベンチマークまたはワークロードが最適化されていることは明らかです。 有名なベンチマーク-SpecJBB、SpecJVM。 特定の顧客に関心のある特定のワークロードがあります。 これらのワークロードを実行して、ボトルネックを確認してください。








これらのSpecJVMはすべて非常に古いテストです。 新しいラムダ、ストリーム、ビッグデートはどうですか?







なし。 そこにはありません。








そして、どこで入手できますか?







新しいワークロード。








たとえば、apachevskyスタック?







はい Hadoop TeraSort, . .








, ? , JEP.







, , . , , , . , , . , , . Panama, Intel.








, ? , , - ?







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? , » . チケットは会議の公式ウェブサイトで購入できます。



All Articles