malloc thread cache の構成と使用

Malloc Thread Cache は、グローバルなヒープ構造の競合を減らす目的で、未割り当てメモリーのスレッド・プールごとに維持されています。

このキャッシュは、既に実行されたスレッドによる割り当てのパターンに応じて、将来の利用のためにメモリー断片を事前割り当てしようとします。 Thread Cache 内の未割り当て断片の 1 つを使用して、割り当て要求をサービスできる場合は、それをキャッシュから除去して呼び出し元に戻します。 キャッシュ内の未割り当て断片を使用して、割り当て要求をサービスできない場合は、その要求をグローバルなヒープ構造に受け渡します。

スレッド・キャッシュの割り当て戦略|

最初に、スレッドは 4096 バイトより少ないメモリーを要求します。Thread Cache は、グローバルなヒープ構造から同じサイズの複数チャンクのメモリーを事前割り当てします。 また、それは、将来の要求をサービスするために使用する大容量のメモリーを予約します。 スレッドがメモリーの一部を解放すると、その断片はスレッド・キャッシュに保持して将来の割り当てに使用します。 ただし、解放中にスレッド・キャッシュのサイズが特定のしきい値を超えた場合は、キャッシュ内のエレメントの半分をバッキング・アロケーターに戻します。 本質的に、スレッド・キャッシュの振る舞いは、 個々の割り当て/割り当て解除呼び出しをグループ化して一度に実行する「バッチ・プロセッサー」ということができます。 これにより、グローバルなヒープでの競合の減少につながり、多くの場合、効率が良くなります。

malloc thread cache の使用可能化

Malloc Thread Cache は、Watson アロケーターではデフォルトで使用可能になっています。 これは、 プロセスを始動する前に MALLOCOPTIONS 環境変数を次のように設定することによって、使用不可にすることができます。
$ MALLOCOPTIONS=threadcache:off
Malloc Thread Cache は、デフォルト・アロケーターの場合、デフォルトでは使用可能になっていません。 これは、プロセスを始動する前に MALLOCOPTIONS 環境変数を次のように設定することによって、使用可能にすることができます。
$ MALLOCOPTIONS=threadcache