Skip to main content
QUICK REVIEW

[論文レビュー] NG2C: Pretenuring N-Generational GC for HotSpot Big Data Applications

Rodrigo Bruno, Luís Picciochi Oliveira|arXiv (Cornell University)|Apr 12, 2017
Cloud Computing and Resource Management参考文献 55被引用数 3
ひとこと要約

NG2C は、ホットスポット JVM を対象とした新しいガーベジコレクションアルゴリズムであり、大規模データワークロードにおける GC の一時停止時間を短縮するために、寿命プロファイルに基づいてオブジェクトを N 世代のヒープに事前に割り当てる仕組みを採用している。これにより、オブジェクトのコピーやフラグメンテーションを最小限に抑え、G1 や CMS と比較してスループットやメモリのオーバーヘッドを増加させることなく、Cassandra や Lucene、GraphChi における最悪ケースの一時停止時間で最大 96.45% の短縮を達成している。

ABSTRACT

Big Data applications suffer from unpredictable and unacceptably high pause times due to Garbage Collection (GC). This is the case in latency-sensitive applications such as on-line credit-card fraud detection, graph-based computing for analysis on social networks, etc. Such pauses compromise latency requirements of the whole application stack and result from applications' aggressive buffering/caching of data, exposing an ill-suited GC design, which assumes that most objects will die young and does not consider that applications hold large amounts of middle-lived data in memory. To avoid such pauses, we propose NG2C, a new GC algorithm that combines pretenuring with an N-Generational heap. By being able to allocate objects into different generations, NG2C is able to group objects with similar lifetime profiles in the same generation. By allocating objects with similar lifetime profiles close to each other, i.e. in the same generation, we avoid object promotion (copying between generations) and heap fragmentation (which leads to heap compactions) both responsible for most of the duration of HotSpot GC pause times. NG2C is implemented for the OpenJDK 8 HotSpot Java Virtual Machine, as an extension of the Garbage First GC. We evaluate NG2C using Cassandra, Lucene, and GraphChi with three different GCs: Garbage First (G1), Concurrent Mark Sweep (CMS), and NG2C. Results show that NG2C decreases the worst observable GC pause time by up to 94.8% for Cassandra, 85.0% for Lucene and 96.45% for GraphChi, when compared to current collectors (G1 and CMS). In addition, NG2C has no negative impact on application throughput or memory usage.

研究の動機と目的

  • ホットスポット JVM 上で実行される低遅延要求の高い大規模データアプリケーションにおける予測不能で長時間の一時停止を解消すること。
  • 多くのオブジェクトが若いうちに死ぬという弱い世代仮説の限界を乗り越え、大規模データワークロードにおける実際のオブジェクト寿命プロファイルに適合した GC の最適化を実現すること。
  • 同じ寿命を持つオブジェクトを専用の世代にグループ化することで、長時間の一時停止の主な要因であるオブジェクトのコピーやヒープフラグメンテーションを低減すること。
  • 極めて短い最悪ケースの一時停止時間の実現を図りながら、高いアプリケーションスループットとメモリ効率を維持する GC のソリューションを設計すること。
  • 開発者が手動での GC タイミング調整を回避できるように、プロファイラーツールを用いた寿命認識の自動事前割り当てを実現すること。

提案手法

  • NG2C は、ガーベジ・ファースト(G1)GC を拡張し、オブジェクトの寿命プロファイルに基づいて分離された N 世代のヒープ構造を導入している。
  • オブジェクトは、オブジェクト寿命記録ツール(OLR)から得たプロファイリングデータに基づき、割り当て時に適切な世代に直接事前割り当てされる。
  • 同じ寿命を持つオブジェクトが同じ世代に割り当てられるようにすることで、世代間のコピーやヒープのコンパクト化を回避している。
  • システムはプロファイラ(OLR)を用いてアプリケーション動作を分析し、割り当てサイトに対する注釈を自動生成することで、事前割り当ての意思決定を支援している。
  • NG2C は OpenJDK 8 HotSpot と統合され、オブジェクトの割り当てと世代管理の変更により、コピーやフラグメンテーションを低減している。
  • 既存の GC メカニズム(リメンダードセットやコンcurrent マーキングなど)を保持し、割り当てと世代配置の部分に焦点を当てている。

実験結果

リサーチクエスチョン

  • RQ1寿命プロファイルに基づいて複数の世代にオブジェクトを事前割り当てすることで、大規模データワークロードにおける GC の一時停止時間を短縮できるか?
  • RQ2同じ寿命を持つオブジェクトを専用の世代にグループ化することで、オブジェクトのコピーやヒープコンパクト化を低減できるか?
  • RQ3NG2C は、最悪ケースの GC 一時停止時間を短縮しながらも、高いアプリケーションスループットとメモリ効率を維持できるか?
  • RQ4NG2C は、G1 や CMS と比較して、低遅延の大規模データアプリケーションでどの程度優れた性能を発揮できるか?
  • RQ5自動的な寿命プロファイリングによって、手動のチューニングやアプリケーション固有の設定なしに、効果的な事前割り当てを実現できるか?

主な発見

  • Cassandra において、NG2C は G1 や CMS と比較して、観察可能な最悪ケースの GC 一時停止時間を最大 94.8% 減少させた。
  • Lucene では、NG2C がベースラインのコレクタと比較して、最悪ケースの一時停止時間を 85.0% 減少させた。
  • GraphChi では、NG2C が最悪ケースの一時停止時間を 96.45% 減少させ、グラフ処理ワークロードにおける優れたパフォーマンスを示した。
  • 割り当ての複雑さが増加したものの、NG2C は G1 や CMS と同等のアプリケーションスループットを維持し、測定可能なメモリオーバーヘッドはなかった。
  • NG2C は、G1 や CMS と比較して、オブジェクトのコピーオンリーを最大 89.2% 減少させ、長時間の一時停止の根本的要因を直接解消した。
  • NG2C は、最大スループット設定であっても、CMS より 66%、G1 より 39% の短い一時停止時間で動作した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。