jemallocはどのように機能しますか?利点は何ですか?
質問
Firefox 3には、新しいアロケーター jemalloc
が付属しています。
この新しいアロケーターの方が良いと聞いたことがあります。ただし、Googleの上位の結果ではこれ以上の情報は提供されず、どのように機能するのか興味があります。
解決
jemalloc
は、「Jason Evans」の発案であるFreeBSDで最初に登場したため、「je」です。私がかつて paxos
というオペレーティングシステムを記述していなかったら、私は彼を利己的だとforします:-)
詳細については、このPDF を参照してください。これは、アルゴリズムの仕組みを詳細に説明したホワイトペーパーです。
主な利点は、複数のアリーナ(割り当てが行われる生メモリのチャンク)を使用することにより、部分的に達成されるマルチプロセッサおよびマルチスレッドシステムのスケーラビリティです。
シングルスレッドの状況では、複数のアリーナに実際のメリットはないため、単一のアリーナが使用されます。
ただし、マルチスレッドの状況では、多くのアリーナが作成され(プロセッサーの4倍のアリーナ)、スレッドはラウンドロビン方式でこれらのアリーナに割り当てられます。
これは、複数のスレッドが malloc
または free
を同時に呼び出すことができますが、同じアリーナを共有する場合にのみ競合するため、ロックの競合を減らすことができることを意味します。アリーナが異なる2つのスレッドは相互に影響しません。
さらに、 jemalloc
は、RAMからデータをフェッチする動作が、CPUキャッシュに既にあるデータを使用するよりもはるかに遅いため、キャッシュの局所性を最適化しようとします(高速フェッチの概念に違いはありません) RAMからの読み込みとディスクからの遅いフェッチ)。そのため、アプリケーションのワーキングセット全体がキャッシュ内にある可能性が高いため、最初に全体的なメモリ使用量を最小化しようとします。
そして、それが達成できない場合、一緒に割り当てられたメモリは一緒に使用される傾向があるため、割り当てが連続することを保証しようとします。
これらの戦略は、ホワイトペーパーから、シングルスレッドでの使用に対して現在の最適なアルゴリズムと同様のパフォーマンスを提供し、マルチスレッドでの使用を改善するように思われます。
他のヒント
興味深いソースが1つあります。Cソース自体です。 http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c
最初は、簡単な概要で大まかに動作する方法を説明します。ただし、より詳細なアルゴリズム分析はありません。
jemallocがmozillaにもたらしたメリットについては、 http ://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (mozilla + jemallocの最初のGoogle結果):
[...] jemallocは、長期間実行した後、断片化の最小量を与えたと結論付けました。 [...] Windows Vistaでの自動テストでは、jemallocをオンにするとメモリ使用量が22%減少することが示されました。
Aerospikeは2013年にjemallocをプライベートブランチに実装しました。2014年にAerospike 3.3に組み込まれました。 Psi Mankoskiは、Aerospikeの実装について書いたばかりでなく、いつ、どのようにjemallocを効果的に使用するかについて、高いスケーラビリティ。
jemallocは、Aerospikeが最新のマルチスレッド、マルチCPU、マルチコアコンピューターアーキテクチャを活用するのを本当に助けました。アリーナを管理するためにjemallocに組み込まれているいくつかの非常に重要なデバッグ機能もあります。デバッグにより、Psiは、たとえば、本当のメモリリークとメモリフラグメンテーションの結果を区別することができました。 Psiは、スレッドキャッシュとスレッドごとの割り当てが全体的なパフォーマンス(速度)の改善をどのように提供したかについても説明します。