共有オブジェクト madv.so.1 は、起動されたプロセスやその子プロセスに対して選択された仮想メモリーの構成を実現します。共有オブジェクトを使用するには、環境変数に次の文字列を指定する必要があります。
LD_PRELOAD=$LD_PRELOAD:madv.so.1
madv.so.1 共有オブジェクトは、 MADV 環境変数の値に従ってメモリーのアドバイス情報を適用します。MADV 環境変数は、プロセスのアドレス空間におけるすべてのヒープ、共有メモリー、および mmap 領域のために使用する仮想メモリーのアドバイス情報を指定します。この情報は生成されたすべてのプロセスに適用されます。次に示す MADV 環境変数値は、複数の lgroup 間でのリソースの割り当てに影響を与えます。
この値は、カーネルに期待されるアクセスパターンをデフォルトに戻す
この値は、アドレス範囲に次回アクセスする LWP が、その領域に最も頻繁にアクセスする LPW であることをカーネルに指定する。それに応じて、カーネルはメモリーや他のリソースをこの領域と LWP に割り当てる
この値は、多くのプロセスまたは LPW が、ランダムにシステム全域からメモリーにアクセスしていることをカーネルに指定する。それに応じて、カーネルはメモリーや他のリソースを割り当てる
MADVCFGFILE 環境変数値は、メモリー構成のアドバイス情報エントリが <exec-name>:<advice-opts> の書式で記述されているテキストファイルの名前です。
<exec-name> の値は、アプリケーションまたは実行プログラムの名前です。<exec-name> には、フルパス名、基本名、またはパターン文字列による指定が可能です。
<advice-opts> の値は、 <region>=<advice> の書式で記述します。 <advice> の値は、MADV 環境変数の値と同じです。<region> には、次のいずれかの規定された値を指定します。
プロセスのアドレス空間のすべてのヒープ、共有メモリー、および mmap(2) 領域に、アドバイス情報が適用される
ヒープは、brk(2) 領域として定義される。アドバイス情報は、既存のヒープにも将来割り当てられる追加ヒープメモリーにも適用される
アドバイス情報は、共有メモリーセグメントに適用される。共有メモリー操作に関する詳細は、shmat(2) を参照
アドバイス情報は、SHM_SHARE_MMU フラグを使用している共有メモリーセグメントに適用される。 ism オプションは、shm より優先される
アドバイス情報は、SHM_PAGEABLE フラグを使用している共有メモリーセグメントに適用される。dsm オプションは、shm より優先される
アドバイス情報は、MAP_SHARED フラグを使用した mmap() システムコールにより作成されたマッピングに適用される
アドバイス情報は、MAP_PRIVATE フラグを使用した mmap() システムコールにより作成されたマッピングに適用される
アドバイス情報は、MAP_ANON フラグを使用した mmap() システムコールにより作成されたマッピングに適用される。複数のオプションが指定された場合は、mapanon オプションが優先される
MADVERRFILE 環境変数値は、エラーメッセージが記録されるファイル名です。MADVERRFILE による指定がない場合は、 madv.so.1 共有オブジェクトは syslog(3C) を使用してエラーを記録します。重要度は LOG_ERR 、機能記述子は LOG_USER になります。
メモリーに関するアドバイス情報は継承されます。子プロセスには親と同じアドバイス情報が適用されます。madv.so.1 共有オブジェクトにより異なるレベルのアドバイスを設定しない限り、exec(2) が呼び出された後には、アドバイスはシステムデフォルトの設定に戻されます。 アドバイス情報は、ユーザープログラムによって作成された mmap() 領域にのみ適用されます。実行時リンカーまたはシステムライブラリによって作成された直接システムコールを呼び出す領域は影響を受けません。
次の例では、 madv.so.1 共有オブジェクトの機能について個別に説明します。
この設定では、exec が foo で始まるすべてのアプリケーションの ISM セグメントにアドバイス情報を適用しています。
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE foo*:ism=access_lwp
この設定では 、ls を除くすべてのアプリケーションにアドバイス情報を適用しています。
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADV=access_many $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADV MADVCFGFILE $ cat $MADVCFGFILE ls:
MADVCFGFILE に指定された構成は MADV の設定値より優先されるので、ファイルの最後の構成エントリで <exec-name> に指定した * は、MADV を指定した場合と同じ意味になります。 この例は、前述の例と同じ結果になります。
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE ls: *:madv=access_many
この構成では、あるアドバイスのタイプを mmap() 領域に適用し、exec() が foo で始まるアプリケーションのための、ヒープおよび共有メモリーに対して別のアドバイス情報を適用しています。
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE foo*:madv=access_many,heap=sequential,shm=access_lwp