168 lines
6.6 KiB
Groff
168 lines
6.6 KiB
Groff
.\" Copyright (c) 1991, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)madvise.2 8.1 (Berkeley) 6/9/93
|
|
.\" %FreeBSD: src/lib/libc/sys/madvise.2,v 1.17.2.6 2001/12/14 18:34:01 ru Exp %
|
|
.\"
|
|
.\" WORD: revert 書き戻す(dirty なページをファイルシステムに書き込む)[madvise.2]
|
|
.\" WORD: physically backing store 物理的バッキングストア
|
|
.\" (仮想記憶の裏にあるディスク領域、swap やファイルシステム?!)
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd July 19, 1996
|
|
.Dt MADVISE 2
|
|
.Os
|
|
.Sh 名称
|
|
.Nm madvise
|
|
.Nd メモリの使用法について助言を与える
|
|
.Sh ライブラリ
|
|
.Lb libc
|
|
.Sh 書式
|
|
.In sys/types.h
|
|
.In sys/mman.h
|
|
.Ft int
|
|
.Fn madvise "void *addr" "size_t len" "int behav"
|
|
.Sh 解説
|
|
.Fn madvise
|
|
システムコールによって、自身のメモリ利用の習性の知識があるプロセスは、それを
|
|
システムに説明できます。
|
|
これまで知られている習性は、
|
|
.Aq Pa sys/mman.h
|
|
で定義されており、次のとおりです。
|
|
.\" 6 から訳追加
|
|
.Bd -literal
|
|
#define MADV_NORMAL 0 /* これ以降、特殊な処理は必要ない */
|
|
#define MADV_RANDOM 1 /* ランダムなページ参照が予測される */
|
|
#define MADV_SEQUENTIAL 2 /* シーケンシャルな参照が予測される */
|
|
#define MADV_WILLNEED 3 /* これらのページを必要とする */
|
|
#define MADV_DONTNEED 4 /* これらのページを必要としない */
|
|
#define MADV_FREE 5 /* データは今や重要ではない */
|
|
#define MADV_NOSYNC 6 /* 明示的に物理的バッキングストアが
|
|
コミットされない場合 */
|
|
#define MADV_AUTOSYNC 7 /* デフォルトは物理的バッキングストアに
|
|
コミットされる */
|
|
#define MADV_NOCORE 8 /* コアファイルにページを含まないこと */
|
|
#define MADV_CORE 9 /* コアファイルにページを復帰させる */
|
|
.Ed
|
|
.Pp
|
|
.Bl -tag -width MADV_SEQUENTIAL
|
|
.It Dv MADV_NORMAL
|
|
デフォルトのページング動作に戻るようにシステムに指示します。
|
|
.It Dv MADV_RANDOM
|
|
ページがランダムにアクセスされ、プリフェッチが有利ではないと考えられるという
|
|
ヒントです。
|
|
.It Dv MADV_SEQUENTIAL
|
|
指定のページがフォルトで読み込まれたとき、そのページの直前のページの
|
|
優先順位を VM システムが下げるようにします。
|
|
.It Dv MADV_WILLNEED
|
|
指定の仮想アドレス範囲内にあるページが一時的に高い優先順位を持つようにし、
|
|
それらがメモリ内にある場合、解放される可能性を減少させます。
|
|
さらに既にメモリ内にあるページはただちにプロセスにマップされ、
|
|
それによってプロセス全体にわたるフォルトによる読み込みによる
|
|
不要なオーバーヘッドを除去します。
|
|
これは、フォルトによるページのバッキングストアからの
|
|
読み込みを生じさせるのではなく、
|
|
メモリ内に既にあるページを呼び出し側のプロセスに素早くマップさせます。
|
|
.It Dv MADV_DONTNEED
|
|
VM システムに、指定の範囲内のページのメモリ内優先順位の減少を許可します。
|
|
今後、このアドレス範囲への参照はページフォルトを発生させるでしょう。
|
|
.It Dv MADV_FREE
|
|
VM システムにページを解放する自由を与え、指定ページ範囲内の情報がもはや
|
|
重要でないことをシステムに通知します。これは、アドレス空間を有効にしたままで
|
|
.Xr malloc 3
|
|
がアドレス空間内の任意の位置のページを解放できるようにする効率的な方法です。
|
|
ページが次に参照される時には、そのページは要求時ゼロクリアの対象に
|
|
なっている可能性もありますし、または
|
|
.Dv MADV_FREE
|
|
呼び出しの前にそこにあったデータが残っているかもしれません。
|
|
ページが再び修正されるまで、そのアドレス空間範囲に対する参照だけでは、
|
|
VM システムはバッキングストアから情報をページに読み込む動作を行わなくなります。
|
|
.\" 訳追加
|
|
.It Dv MADV_NOSYNC
|
|
このマップに関連づけられているデータを
|
|
物理的バッキングストアにフラッシュしないようにシステムに要求します。
|
|
通常、これにより、ファイルシステムアップデートデーモンが
|
|
VM システムが汚したページを特に理由もないのに
|
|
物理ディスクに書込む不要な動作を防止します。
|
|
VM とファイルシステムの一貫性は常に維持されることに注意してください。
|
|
この機能は、マップされたデータが必要なときだけ、
|
|
(通常、システムページャにより) フラッシュされることを
|
|
保証しているに過ぎません。
|
|
.Pp
|
|
この機能を使用する典型的な場合とは、
|
|
ファイルを裏に持つ共有メモリ領域をプロセス (IPC) 間通信で使いたいとき、
|
|
特に、その領域に格納されるデータを物理的ディスクに書き込む必要がない場合です。
|
|
この機能は、SysV 共有メモリ呼び出しで得られる mmap 性能と
|
|
同等の性能を与えてくれますし、かつ、SysV 共有メモリ呼び出しを使うより、
|
|
きめ細かい制御が可能でより制約が少ない方法でもあります。
|
|
しかしこの機能は UNIX プラットホーム間で移植性がないことに注意してください
|
|
(いくつかのプラットホームではデフォルトで正しく振る舞うかも知れませんが)。
|
|
詳しい情報に関しては、
|
|
.Xr mmap 2
|
|
の
|
|
MAP_NOSYNC セクションを参照してください。
|
|
.It Dv MADV_AUTOSYNC
|
|
将来、アドレス範囲内のページが汚された場合のために
|
|
MADV_NOSYNC の効果を元に戻します。
|
|
既に汚されているページについての効果は不定です。
|
|
書き戻しするかもしれませんし、しないかもしれません。
|
|
書き戻しを確実に行なうには、
|
|
.Xr msync 2
|
|
または
|
|
.Xr fsync 2
|
|
システムコールを使用します。
|
|
.It Dv MADV_NOCORE
|
|
領域は、コアファイルに含まれません。
|
|
.It Dv MADV_CORE
|
|
コアファイルの領域を含みます。
|
|
.El
|
|
.Sh 戻り値
|
|
.Rv -std madvise
|
|
.Sh エラー
|
|
.Fn madvise
|
|
関数は次の場合に失敗します。
|
|
.Bl -tag -width Er
|
|
.It Bq Er EINVAL
|
|
.Fa addr
|
|
引数と
|
|
.Fa len
|
|
引数で指定された仮想アドレス範囲が有効ではありません。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr mincore 2 ,
|
|
.Xr mprotect 2 ,
|
|
.Xr msync 2 ,
|
|
.Xr munmap 2
|
|
.Sh 歴史
|
|
.Fn madvise
|
|
関数は
|
|
.Bx 4.4
|
|
ではじめて登場しました。
|