ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- madv ライブラリ
/usr/lib/madv.so.1
madv.so.1 共有オブジェクトは、起動されたプロセス (1 つまたは複数) とその子孫の VM アドバイスを選択的に構成する手段を提供します。madv.so.1 を有効にするには、次の文字列が 1 つ以上の MADV 環境変数とともに環境内に存在する必要があります (ld.so.1(1) を参照)。
LD_PRELOAD=$LD_PRELOAD:madv.so.1
LD_PRELOAD リストに madv.so.1 共有オブジェクトを指定すると、次の環境変数が madv 共有オブジェクトに読み込まれ、指定されたアドバイスをどの生成済みプロセスに適用するのかが決定されます。
MADV には、プロセスのアドレス空間内のすべてのヒープ、共有メモリー、および mmap 領域に使用される VM アドバイスを指定します。この情報は生成されたすべてのプロセスに適用されます。
advice の値は、madvise(3C) でメモリーアクセスパターンを指定するために使用する <sys/mman.h> の値と対応しています。
|
config-file は、次の形式の madv 構成エントリを 1 つ以上含むテキストファイルです。
exec-name exec-args:advice-opts
config-file で指定されたアドバイスは、MADV 環境変数によって指定された情報よりも優先されます。MADVCFGFILE が設定されていない場合は、/etc/madv.conf ファイルからアドバイスが取得されます (存在している場合)。
exec-name には、アプリケーションまたは実行可能ファイルの名前を指定します。対応するアドバイスは、ファイル内で最初に見つかった exec-name と一致する新規作成プロセス (getexecname(3C) を参照) 用に設定されます。
exec-name には、フルパス名、基本名、またはパターン文字列を指定できます。パターンマッチングについては、sh(1) の「ファイル名の生成」を参照してください。
exec-args は、引数と照合する任意指定のパターン文字列です。exec-args が指定されていないか、または exec-name の引数内に存在する場合にのみ、アドバイスは設定されます。
advice-opts は、次のようなさまざまなメモリー領域に対するアドバイスを指定したコンマ区切りのリストです。
プロセスのアドレス空間のすべてのヒープ、共有メモリー、および mmap 領域に適用されます。
ヒープは、brk 領域 (brk(2) を参照) として定義されます。既存のヒープにも、将来割り当てられる追加ヒープメモリーにも適用されます。
任意のフラグ、SHM_SHARE_MMU フラグ、または SHM_PAGEABLE フラグを使用して接続された共有メモリーセグメント (shmat(2) を参照)。ism および dism オプションは、shm オプションよりも優先されます。
mmap(2) の任意のフラグ、MAP_SHARED フラグ、MAP_PRIVATE フラグ、または MAP_ANON フラグを使用して確立されたマッピング。mapshared、mapprivate、および mapanon オプションは、map オプションよりも優先されます。mapanon オプションは、mapshared および mapprivate よりも優先されます。
デフォルトでは、エラーメッセージは syslog(3C) の LOG_ERR レベルと LOG_USER 機能を使用してログに記録されます。MADVERRFILE に有効な pathname (/dev/stderr など) が含まれている場合は、エラーメッセージがその場所に記録されます。
例 1 アドバイスをすべての ISM セグメントに適用する
次の構成では、/usr/bin/foo アプリケーションのすべての ISM セグメントにアドバイスを適用します。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE /usr/bin/foo:ism=access_lwp
例 2 例外付きですべてのアプリケーションにアドバイスを設定する
次の構成では、ls を除くすべてのアプリケーションにアドバイスを設定します。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADV=access_many example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADV MADVCFGFILE example$ cat $MADVCFGFILE ls:
例 3 優先順位規則 (例 2 の続き)
MADVCFGFILE は MADV よりも優先されるため、最後の madv 構成エントリの exec-name に「*」(すべてに一致するパターン) を指定することは、MADV を設定することと同等です。次の例は、例 2 と同等です。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE ls: *:madv=access_many
例 4 領域ごとに異なるアドバイスを適用する
次の構成では、foo で始まる実行可能ファイル名を持つ一連のアプリケーションについて、あるタイプのアドバイスを mmap 領域に、別のタイプのアドバイスをヒープ領域と共有メモリー領域に適用します。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE foo*:madv=access_many,heap=sequential,shm=access_lwp
例 5 アドバイスを選択して適用する
次の構成では、名前が ora で始まり、引数として ora1 が指定されたアプリケーションのヒープにアドバイスを適用します。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE ora* ora1:heap=access_many
構成ファイル
属性についての詳細は、attributes(5) を参照してください。
|
cat(1), ld.so.1(1), proc(1), sh(1), brk(2), exec(2), fork(2), mmap(2), memcntl(2), shmat(2), getexecname(3C), madvise(3C), syslog(3C), proc(4), attributes(5)
アドバイスは継承されます。子プロセスには親と同じアドバイスが適用されます。exec() (exec(2) を参照) では、madv 共有オブジェクトで別のアドバイスが設定されていないかぎり、アドバイスはデフォルトのシステムアドバイスに設定されます。
アドバイスは、ユーザープログラムによって作成された mmap 領域にのみ適用されます。実行時リンカーまたは直接システムコールを行うシステムライブラリ (libthread によるスレッドスタックの割り当てなど) によって確立された領域は影響を受けません。