13

毎週だけ実行され、大量のファイルを1回だけ読み取るCプログラムがあります。Linuxは読み取られたすべてのものもキャッシュするため、キャッシュが不必要にいっぱいになり、SSDドライブがない限り、システムの速度が大幅に低下します。

では、ディスクキャッシュをいっぱいにすることなく、ファイルを開いて読み取るにはどうすればよいですか?

ノート:

ディスクキャッシングとは、ファイルを2回読み取ると、2回目はディスクからではなくRAMから読み取ることを意味します。つまり、ディスクから読み取られたデータはRAMに残されるため、同じファイルを後で読み取っても、ディスクからデータを再読み取りする必要はありません。

4

2 に答える 2

10

に渡すO_DIRECTopen()役立つと思います:

O_DIRECT (Linux 2.4.10 以降)

このファイルに対する I/O のキャッシュ効果を最小限に抑えるようにしてください。一般に、これはパフォーマンスを低下させますが、アプリケーションが独自のキャッシュを行う場合など、特別な状況で役立ちます。ファイル I/O は、ユーザー空間バッファーとの間で直接行われます。O_DIRECT フラグ自体は、データを同期的に転送しようとしますが、データと必要なメタデータが転送されるという O_SYNC の保証は与えません。同期 I/O を保証するには、O_DIRECT に加えて O_SYNC を使用する必要があります。

man ページO_DIRECTの下部には、Linus からの楽しい引用を含む、さらに詳細なメモがあります。

于 2013-03-07T08:14:05.470 に答える
6

アドバイスとともに使用posix_fadvise()POSIX_FADV_DONTNEEDて、システムが既に読んだページを解放するように要求できます。

于 2013-03-07T08:24:01.383 に答える