Azul SystemsはZing 17.03が利用可能となったと本日発表した。これはAzulの新しいジャストインタイム(JIT)コンパイラであるFalconを完全にサポートしている。FalconはLLVMをベースにしており、Zingの前のバージョンで使われていたC2コンパイラを置き換えるよう設計されている。C2コンパイラはOracle HotSpotとOpenJDKでも使われている。FalconはC2が1997年にJavaOneで紹介されて以来、初めてのJava SEで利用できる新しいJITコンパイラ製品である。
LLVMは最新のオープンソースコンパイラフレームワークで、SwiftやRustのような多くの新しい言語のための推奨バックエンド"エンジン" である。学術コミュニティとAMDやApple、Cray、IBM、Intel、Microsoft、Sony、SAPを含む広い範囲の商業界の支持者から手厚いサポートがある。この広いサポートが新しいサーバハードウェアと新しい命令セットを活用する助けとなる。IntelのBroadwellやSkylakeプロセッサでのベクトル化や暗号最適化のような新しいプロセッサ技術を、他の言語がサポートするはるか前に活用することもしばしばある。
AzulのCTOであるGil Tene氏はInfoQに語った。
LLVMが私たちに提供するものをどんどん積極的に使うことで、最適化と最新プロセッサの互換性への追随に費やされた文字通り数百人の作業をすぐJavaコードに適用することができます。
このことの単純で具体的な例は、最新のIntel CPUが持つ最新ですばらしいベクトル命令(たとえばBroadwell Intel E5-v4サーバの現行ファミリにあるAVX2命令セット)を使うために、FalconがいつものJavaループをいかに最適化しているかということです。AVX2が予測のベクトル命令能力を追加するので、Falconはループ内の予測された処理をベクトル化できます(たとえば"この配列にある全偶数を加算する")。これは以前のハードウェアではベクトル化できませんでした。そのためまったく同じJavaクラスでも新しいサーバではより早く実行できます。(現行の)HotSpotでは試してさえいません…
しかしもっとも重要な部分は、この利益はAzulエンジニアたちがベクトル化の最適化や各プロセッサに合わせた正しい方法を選択したりすることに時間を使って得たわけではない、ということです。たとえばIntelがLLVMの最適化に過去数年間投資、貢献したことから得ています。彼らの貢献は(今)Javaに適用されているのと同様に、C/C++/Clang/Rustに適用されています。
Falconで私たちはJVMに関連するよい最適化を、いくつか適用できます。これはC2では適用できなかったことです。GCバリア関連の最適化はこの一例です。高レベル言語の最適化もまたそうです。Falconで導入した高レベルの最適化の具体的な例は、C2のときより劇的に低いコストで済んでいますが、"真にfinalな"フィールドの最適化と呼ぶものです(インスタンスのfinalフィールドで難しい点は、それらが"真にfinal"ではないかもしれないということです。リフレクションやUnsafeで上書きできるからであり、それはよく起こります)。FalconはJavaでインスタンスのfinalフィールドを使用する処理を以前のJITがしなかった方法で最適化できます(たとえばループ外のfinal配列において配列の範囲チェックを巻き上げることを含む)。これはプロトタイプモードの開発ではHotSpotもZingにも数年間あった機能です(OpenJDKメーリングリストのいくつかでこれについての議論が残っています)。しかしJVMで製品版の機能となったことはありませんでした。部分的にはそれをうまく扱うにはJITコンパイラが複雑となることが原因です。
こうした経緯から、Falconが新しいハードウェア上でC2を上回るということに驚きはない。たとえばTene氏は、Skylakeベースのサーバ(Intel Xeon E5-xxxx)を使ったベンチマークとして、特定の暗号化処理ベンチマークではOracle HotSpotより最大3.5倍早く、Cassandraのベンチマークでは10%程度早いとInfoQに話した。また低レイテンシ環境では前のバージョンのZingよりかなり早い。トレーディング基盤を実行している既存のAzul Zing顧客で18-24%程度速度が向上した場合もあるとTene氏は私たちに語った。
Azulは製品グレードのメモリ管理付きランタイムでLLVMを使う最初の組織である。この作業のために、LLVMはセーフポイントとGCバリアの下での最適化とJITコードの置換および脱最適化の提供能力、暗黙的なnullチェックや推測的な脱最適化、ガードされたインライン化といった推測的なランタイム最適化を含む機能追加とともにAzulにより拡張された。
期待する人がいるであろうが、Falconは2014年に導入されたAzulのReadyNow技術もサポートする。ReadyNowはJava仮想マシンの"ウォーミングアップ"を不要とするよう設計されている。ウォームアップとは、JVMがどのコードをマシンレベルにコンパイルすべきか十分に学んだあとにアプリケーションの所有者がJITコンパイラの最適化を試みることだ。
Zing 17.03は既存の顧客ならZingサポートポータルからすぐにダウンロードして利用できる。新しいZingのリリースは30日間の試用版もAzulウェブサイトから利用できる。Zingのシングルライセンスの年間サブスクリプションはサーバごとに$3500米ドル、多数のサーバかつ長期間のサブスクリプションならかなり価格を抑えられる。
5月4日、太平洋標準時の午前11時にAzulのCTOであるGil Tene氏は"Falconコンパイラの内部詳細"というタイトルのオンラインセミナーを開催する。オンラインセミナーと質疑応答でほぼ1時間となる予定だ。
Rate this Article
- Editor Review
- Chief Editor Action