2011-08-19 7 views
18

私はLinuxサーバー上で動作するWebアプリケーションを作成しています。アプリケーションは250Kファイルに絶えずアクセスしています。これはメモリにロードし、読み取り、いくつかの情報をユーザーに返します。このファイルは常に読み込まれているので、私のクライアントはMemcacheのようなものをメモリにキャッシュすることを提案しています。これは、おそらく読み込み処理が高速になるからです。Linuxファイルシステムは効率的にファイルをキャッシュしますか?

しかし、私はLinuxファイルシステムがおそらく頻繁にアクセスされているのでメモリ内のファイルをキャッシュしていると考えています。そうですか?あなたの意見では、memcacheは本当の改善をもたらしますか?それとも、Linuxがすでにやっているのと同じことをするつもりですか?

私はLinuxとmemcacheのどちらもよく知らないので、誰かがこれを明確にすることができたら本当に感謝します。

+3

「Linuxファイルシステム」はありません。 Linuxがサポートするファイルシステムはたくさんあります。 – cdhowie

+2

モノリシックな250k BLOBは、あなたが解決しようとしている問題が何であれ間違った解決策のように聞こえます。 – tripleee

+3

'mmap'のように聞こえるかもしれませんが、メモリをすべてカーネルに任せる方が良いかもしれません。 –

答えて

18

はい、ファイルを開くたびにファイルを変更しないとします。

Linuxはファイルの情報をメモリにコピーし、ファイルをメモリにロードするのは非常に高速です(最悪の場合はページテーブルのスワップ)。

編集:cdhowieが指摘しているように、「Linuxファイルシステム」はありません。しかし、私は関連するコードがLinuxのメモリ管理にあると考えているため、問題のファイルシステムとは独立しています。不思議なことに、linux/mm/mmap.cのvm_area_structオブジェクトの扱いについては、linuxのソースで主に読むことができます。

+3

答えに追加するには、 'vmtouch'を使ってファイルがメモリに入っていることを確認することができます。このリンクは次のように説明しています:http://hoytech.com/vmtouch/ 実際、ファイルを常に 'vmtouch'を使ってファイルシステムのキャッシュに保存することができます。上記のリンクを参照してください。 – goblinjuice

2

はい、間違いありません。何か他のものがメモリを必要としない限り、アクセスされたファイルは無期限にメモリ内に保持されます。

fadviseシステムコールで(ある程度)この動作を制御することができます。詳細はmanページを参照してください。

システムコールの読み書きは、通常はデータをコピーする必要があるため、実際のボトルネックが発生した場合は、キャッシュページを直接プロセスにマッピングすることでコピーを回避できるmmap()を使用することを検討してください。

3

人々が言及したように、mmapは良い解決策です。

ただし、1つの250kファイルは非常に小さいです。あなたはそれを読んで、スタートアップ時にユーザーに返信したいものと一致する何らかの種類のメモリ構造に入れたいかもしれません。テキストファイルの場合、行の配列は良い選択かもしれません。

1

私はそのファイルをramdisk(tmpfs)に入れるのは大きな修正なしに十分な利点があると思います。応答時間がマイクロ秒単位で本当に深刻でない限り、

2

ファイルをキャッシュする必要がありますが、マウント時にnoatimeオプションが設定されていることを確認してください。そうしないと、アクセス時間がファイルに保存され、キャッシュが無効になります。

関連する問題