Man page - posix_fadvise(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

POSIX_FADVISE

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
ア ー キ テ ク チ ャ ー 固 有 の 派 生 バ ー ジ ョ ン
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

posix_fadvise - フ ァ イ ル デ ー タ の ア ク セ ス パ タ ー ン を あ ら か じ め 宣 言 す る

書 式

#include <fcntl.h>

int posix_fadvise(int fd , off_t offset , off_t len , int advice );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

posix_fadvise ():

_POSIX_C_SOURCE >= 200112L

説 明

プ ロ グ ラ ム は 、 将 来 特 定 の パ タ ー ン で フ ァ イ ル デ ー タ に ア ク セ ス す る 意 思 を 伝 え る た め に posix_fadvise () を 使 う こ と が で き る 。 こ れ に よ り 、 カ ー ネ ル が 適 切 な 最 適 化 を 実 行 す る こ と が 可 能 に な る 。

advice fd が 参 照 し て い る フ ァ イ ル の offset か ら 始 ま る len バ イ ト の 範 囲 内 ( len が 0 の 場 合 は フ ァ イ ル の 終 り ま で ) の (必 ず し も 存 在 し な い ) 領 域 に 適 用 さ れ る 。 advice は 義 務 づ け で は な い 。 advice は 単 に ア プ リ ケ ー シ ョ ン の た め に 可 能 性 を 構 成 す る だ け で あ る 。

advice に 許 さ れ る 値 に は 、 以 下 の も の が 含 ま れ る :
POSIX_FADV_NORMAL

指 定 さ れ た デ ー タ の ア ク セ ス パ タ ー ン を 指 示 す る ア ド バ イ ス を ア プ リ ケ ー シ ョ ン が 何 も 持 っ て い な い こ と を 示 す 。 オ ー プ ン さ れ た フ ァ イ ル に ア ド バ イ ス が 指 定 さ れ な い 場 合 、 こ れ が デ フ ォ ル ト で 仮 定 さ れ る 。

POSIX_FADV_SEQUENTIAL

ア プ リ ケ ー シ ョ ン は 指 定 さ れ た デ ー タ が シ ー ケ ン シ ャ ル に (大 き な オ フ セ ッ ト の 前 に 小 さ な オ フ セ ッ ト の デ ー タ を 読 む よ う に ) ア ク セ ス さ れ る こ と を 期 待 す る 。

POSIX_FADV_RANDOM

指 定 さ れ た デ ー タ が ラ ン ダ ム な 順 番 で ア ク セ ス さ れ る 。

POSIX_FADV_NOREUSE

指 定 さ れ た デ ー タ は 1 度 し か ア ク セ ス さ れ な い 。

2.6.18 よ り 前 の カ ー ネ ル で は 、 POSIX_FADV_NOREUSE POSIX_FADV_WILLNEED と 同 じ 意 味 で あ っ た 。 こ れ は 多 分 バ グ で あ っ た 。 カ ー ネ ル 2.6.18 以 降 で は 、 こ の フ ラ グ は 何 も 行 わ な い 。

POSIX_FADV_WILLNEED

指 定 さ れ た デ ー タ は 近 い 将 来 ア ク セ ス さ れ る 。

POSIX_FADV_WILLNEED は 、 ペ ー ジ キ ャ ッ シ ュ に 指 定 領 域 の ブ ロ ッ ク さ れ な い 読 み 込 み を 開 始 す る 。 読 み 込 ま れ る デ ー タ の 総 量 は 、 仮 想 メ モ リ ー の 負 荷 に 依 っ て カ ー ネ ル が 減 ら す か も し れ な い (数 メ ガ バ イ ト で あ れ ば 通 常 は 全 く 十 分 で あ り 、 そ れ よ り 多 く て も め っ た に 役 に 立 た な い )。

POSIX_FADV_DONTNEED

指 定 さ れ た デ ー タ は 近 い 将 来 ア ク セ ス さ れ な い 。

POSIX_FADV_DONTNEED は 指 定 さ れ た 領 域 に 関 連 付 け ら れ た キ ャ ッ シ ュ ペ ー ジ を 解 放 し よ う と す る 。 例 え ば 、 こ れ は 大 き な フ ァ イ ル を ス ト リ ー ミ ン グ す る と き に 役 立 つ 。 プ ロ グ ラ ム は 、 使 用 済 み の キ ャ ッ シ ュ さ れ た デ ー タ を 解 放 す る よ う に 、 定 期 的 に カ ー ネ ル に 要 求 す る か も し れ な い 。 そ う す る こ と に よ り 、 さ ら に 有 効 な キ ャ ッ シ ュ さ れ た ペ ー ジ が 、 代 わ り に 破 棄 さ れ る こ と は な い 。

ペ ー ジ の 一 部 分 の 破 棄 要 求 は 無 視 さ れ る 。 不 要 な デ ー タ を 破 棄 す る よ り も 必 要 な デ ー タ を 保 持 す る 方 が よ い 。 ア プ リ ケ ー シ ョ ン が デ ー タ を 破 棄 し た 方 が よ い と 思 う 場 合 は 、 offset len が ペ ー ジ 境 界 に 合 っ て い な け れ ば な ら な い 。

The implementation may attempt to write back dirty pages in the specified region, but this is not guaranteed. Any unwritten dirty pages will not be freed. If the application wishes to ensure that dirty pages will be released, it should call fsync (2) or fdatasync (2) first.

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 失 敗 し た 場 合 は エ ラ ー 番 号 が 返 さ れ る 。

エ ラ ー

EBADF

fd 引 数 が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

無 効 な 値 が advice に 指 定 さ れ た 。

ESPIPE

指 定 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー が パ イ プ ま た は FIFO を 参 照 し て い る ( ESPIPE は POSIX で 規 定 さ れ て い る エ ラ ー だ が 、 バ ー ジ ョ ン 2.6.16 よ り 前 の カ ー ネ ル で は 、 こ の 場 合 に EINVAL を 返 し て い た 。 )

バ ー ジ ョ ン

カ ー ネ ル に よ る サ ポ ー ト は Linux 2.5.60 で 最 初 に 登 場 し 、 対 応 す る シ ス テ ム コ ー ル は fadvise64 () と い う 名 前 で あ る 。 ラ イ ブ ラ リ に よ る サ ポ ー ト は glibc バ ー ジ ョ ン 2.2 以 降 で 提 供 さ れ て お り 、 ラ ッ パ ー 関 数 は posix_fadvise () と い う 名 前 で あ る 。

Linux 3.18 以 降 で は 、 対 応 す る シ ス テ ム コ ー ル の サ ポ ー ト は 任 意 と な り 、 利 用 で き る か は カ ー ネ ル が CONFIG_ADVISE_SYSCALLS オ プ シ ョ ン を 有 効 に し て コ ン パ イ ル さ れ て い る か に 依 存 す る 。

準 拠

POSIX.1-2001, POSIX.1-2008. len 引 数 の 型 が POSIX.1-2001 TC1 に お い て size_t か ら off_t に 変 更 さ れ た 点 に 注 意 す る こ と 。

注 意

Linux で は 、 POSIX_FADV_NORMAL は バ ッ キ ン グ デ バ イ ス の デ フ ォ ル ト サ イ ズ に 先 読 み (readahead) ウ イ ン ド ウ を 設 定 す る 。 POSIX_FADV_SEQUENTIAL は こ の サ イ ズ を 2 倍 し 、 POSIX_FADV_RANDOM は 先 読 み を 全 く 無 効 に す る 。 こ れ ら の 変 更 は フ ァ イ ル 全 体 に 影 響 し 、 指 定 さ れ た 領 域 の み に 影 響 す る わ け で は な い (し か し 同 じ フ ァ イ ル に 対 す る 他 の オ ー プ ン フ ァ イ ル ハ ン ド ル は 影 響 を 受 け な い )。

The contents of the kernel buffer cache can be cleared via the /proc/sys/vm/drop_caches interface described in proc (5).

One can obtain a snapshot of which pages of a file are resident in the buffer cache by opening a file, mapping it with mmap (2), and then applying mincore (2) to the mapping.

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

The name of the wrapper function in the C library is posix_fadvise (). The underlying system call is called fadvise64 () (or, on some architectures, fadvise64_64 ()); the difference between the two is that the former system call assumes that the type of the len argument is size_t , while the latter expects loff_t there.

ア ー キ テ ク チ ャ ー 固 有 の 派 生 バ ー ジ ョ ン

い く つ か の ア ー キ テ ク チ ャ ー で は 、 64 ビ ッ ト の 引 数 は 適 切 な レ ジ ス タ ー の 組 に 割 り 当 て る 必 要 が あ る ( syscall (2) 参 照 )。 こ の よ う な ア ー キ テ ク チ ャ ー で は 、 「 書 式 」 に 書 か れ て い る posix_fadvise () の 呼 び 出 し シ グ ネ チ ャ ー で 、 引 数 fd offset の 間 の パ デ ィ ン グ (詰 め も の ) で レ ジ ス タ ー が 一 つ 消 費 さ れ て し ま う 。 そ の た め 、 こ れ ら の ア ー キ テ ク チ ャ ー で は 引 数 が 適 切 な 順 序 に な っ た 別 の シ ス テ ム コ ー ル が 定 義 さ れ て い る が 、 そ れ 以 外 は posix_fadvise () と 全 く 同 じ で あ る 。

例 え ば 、 Linux 2.6.14 以 降 で は 、 ARM に は 以 下 の シ ス テ ム コ ー ル が 存 在 す る 。

long arm_fadvise64_64(int fd , int advice ,
loff_t
offset , loff_t len );

通 常 、 glibc の posix_fadvise () ラ ッ パ ー 関 数 に よ り 、 こ れ ら の ア ー キ テ ク チ ャ ー 固 有 の 詳 細 は ア プ リ ケ ー シ ョ ン に は 見 え な い 。 glibc の ラ ッ パ ー 関 数 で は 、 適 切 な ア ー キ テ ク チ ャ ー 固 有 の シ ス テ ム コ ー ル が 呼 び 出 さ れ る 。

バ グ

2.6.6 よ り 前 の カ ー ネ ル で は 、 len に 0 が 指 定 さ れ た 場 合 、 「 フ ァ イ ル の 終 り ま で の 全 て の バ イ ト 」 と い う 意 味 で は な く 、 文 字 通 り 「 0 バ イ ト 」 と し て 解 釈 さ れ て い た 。

関 連 項 目

fincore (1), mincore (2), readahead (2), sync_file_range (2), posix_fallocate (3), posix_madvise (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。