AIX OS

MALLOCMULTIHEAP (マロック・マルチ・ヒープ)

2009年10月4日

マルチ・スレッド・アプリケーションで効果が出やすい環境変数。デフォルトでは指定が無い。指定すると Performance が良くなる場合もあるが、同時にメモリを食いつぶしてコア・ダンプやサーバーのクラッシュを起こす場合もある。

以下は、AIX V6.1のマニュアルより

MALLOCMULTIHEAP={considersize,heaps:n} (AIX 4.3.1 以降)

スレッド化アプリケーションが malloc()free()、および realloc() サブルーチン呼び出しを出して複数のスレッドを持つことができるように、複数のヒープが必要です。単一ヒープの場合、malloc()free()、または realloc() 呼び出しを試行するスレッドはすべてシリアライズされます (呼び出しは一度に 1 回だけです)。その結果はマルチプロセッサー・マシンに重大な影響を与えます。複数のヒープを使用すると、各スレッドは独自のヒープを入手します。すべてのヒープが使用されている場合、呼び出しを試行する新しいスレッドはどれも、1 つ以上のヒープが再び使用可能になるまで待機する必要があります。なお、シリアライズが発生する場合でも、その発生の可能性と発生したときの影響は非常に軽減されます。

malloc / free / realloc (使ったこと無い・・・)、を使うスレッドがマルチに走る場合、ヒープは1個なので、関数の呼び出し処理がシリアライズされるが、MALLOCMULTIHEAP を指定する事で、各スレッドが自分のヒープを持てる→パフォーマンスが上がる。と言う事らしい。

MALLOCMULTIHEAP=considersize,heaps:3

の様にheaps:n というオプションで、指定するとヒープの数は n に制限されるらしい。これなら安心か。何も指定しない MALLOCMULtIHEAP =1 では、最大の32までのヒープが使える。

環境変数 MALLOCMULTIHEAP が設定された場合 (例えば、MALLOCMULTIHEAP=1)、スレッド化アプリケーションは 32 のヒープすべてを使用することができます

ただ、参考リンクにある様に、メモリを食いつぶすリスクを考えると、指定するのはちょっと怖い。。何でも指定すれば良いというものでも無いみたいだ。

参考リンク

-AIX, OS

Copyright© エンジニアの何でもメモ帳 , 2021 All Rights Reserved.