[Java] Malthusian Locks

原文はこちら。
https://blogs.oracle.com/dave/entry/malthusian_locks1

Malthusian LocksについてEuroSys 2017で発表します。
Malthusian Locks
https://blogs.oracle.com/dave/resource/eurosys17-dice.pdf
EuroSys 2017
http://eurosys2017.org/
上記PDFは抜粋で、arxivにもUpされています。
Malthusian Locks
https://arxiv.org/abs/1511.06035

Abstract:

モダンなマルチスレッド環境で動作するアプリケーションは時としてオーバースレッド(スレッド過多)の場合があります。スレッドが多すぎる場合、パフォーマンスの改善が見込めないどころか、スケーラビリティが壊れてパフォーマンスが低下する原因になることがあります。また、利用可能なCPUコアに比べて準備されているスレッドが少ない場合にも発生する可能性があります。こういったソフトウェアにはロック競合が多いこともあります。一定期間内にロックを循環する個別のスレッドの数を意図的に制限するためロック許可ポリシーを変更することによって、このようなロックの存在を利用します。具体的には、ロックが(継続的に保持されて)飽和状態となるために必要なスレッド数よりも多くのスレッドが循環している場合、筆者の考える手法では、余分なスレッドの一部を選択して取り除きます。ロック競合に陥っている場合、メモリ管理におけるスワッピングの概念を借りて、同時実行制限(CR、 concurrency restriction)を課します。結果として決まる入場順は、確かに短期的には不公平ではありますが、定期的に不動態化されたスレッドと、アクティブに循環しているスレッド間でシフトすることで、明示的に長期的な公平性を提供します。具体的には、無制限のバイパスや欠乏を許す、よくあるtest-and-setテストに比べ、スループットが影響をうけない、もしくは改善され、そして不公平が制限されます。パイプラインやプロセッサ、キャッシュといった共有リソースの競合の減少によって、並行性の制限が結果として全体的なリソース消費を削減し、システム全体の負荷容量を向上させる可能性があります。

0 件のコメント:

コメントを投稿