2016-06-18 7 views
0

どのようにカーネルのページキャッシュを避けるために、アプリケーションは直接ディスクからデータを読み書きできますか?カーネルでは、どのように設定するのですか?Linuxカーネルでページキャッシュを無効にするには?

+0

あなたが尋ねていることは不明です。ユーザスペース内の特定のアプリケーションまたはすべてのユーザスペースプロセスに対してページキャッシュを無効にしますか?カーネル自体でこれを行う必要がありますか、それがどのように行われるかは関係ありませんか?詳細をご提供ください。 –

+0

私はGlusterFSのページキャッシュを無効にしたいだけです.GlusterFSクライアント(nodeA)をdirect-io-mode(FUSEサポート)で/ mnt/glusterfsにマウントしました。 FUSEでサポートされているdirect-io-modeのためGlusterFSクライアント(nodeA)にキャッシュされていますが、ファイルはGlusterFSサーバ(nodeB)にキャッシュされていました。つまり、サーバ(nodeB)ではキャッシュしません。ですから、問題は、GlusterFSサーバー(nodeB)のページキャッシュを無効にする方法ですか? – user6481589

+0

ファイルを開くと、要求は次のように送信されました。open(User-Space、nodeA)---> sys_open(Kernel、nodeA)-----> fuse_open(kernel、nodeA)-------> client_open(ユーザー空間、nodeA)------------> server_open(ユーザー空間、nodeB)-------> sys_open(カーネル、nodeB)------- > ext4_open(カーネル、nodeB)。 – user6481589

答えて

3

O_DIRECTを呼び出すには、アプリケーションが必要です。マニュアルページよりhttp://man7.org/linux/man-pages/man2/open.2.html

これにより、I/O実行中にページキャッシュからの書き込み/読み込みをカーネルに伝えます。

O_DIRECT(Linux 2.4.10以降) この ファイルとのI/Oのキャッシュ効果を最小限に抑えてください。一般的にこれはパフォーマンスを低下させますが、アプリケーションが 自身のキャッシングを行う場合など、特別な状況では が便利です。ファイルI/Oは、ユーザーの間で直接行われます( )。 O_DIRECTフラグはそれ自体でデータを同期的に転送するために努力しますが、データと必要なメタデータ が転送されるO_SYNCフラグを保証するものではありません( )。同期I/Oを保証するには、O_DIRECTに加えてO_SYNCを にする必要があります。さらに の議論については下記の注意を参照してください。

  A semantically similar (but deprecated) interface for block 
      devices is described in raw(8). 
+0

ファイルを開くと、要求は次のように送信されました。(ユーザースペース、nodeA)---> sys_open(カーネル、nodeA)-----> fuse_open(カーネル、ノードA)------ - > client_open(ユーザー空間、nodeA)----- network -------> server_open(ユーザー空間、nodeB)-------> sys_open(Kernel、nodeB) - > -----> ext4_open(Kernel、nodeB)。ネットワークの前にGlusterFSクライアントに属しています。その後、GlusterFSサーバです。client_open()にO_DIRECTフラグを追加すると、サーバは直接ファイルを開き、 ioモード? – user6481589

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ投稿サーバ。この理解が正しい場合は、gluster fsプロトコルの仕様を読んで、この種の属性をサーバーに渡すかどうかを調べる必要があると言います。 –

関連する問題