web-dev-qa-db-ja.com

Linux上の超高速Webサーバーのメモリマッピングファイル

Linuxにファイルのディレクトリをメモリにキャッシュしておくように指示する簡単な方法はありますか?

Node.JsとApacheがファイルI/Oにほとんどの時間を費やしていることに気付きました。ファイルがたくさんある場合(特にスクリプトファイルとテンプレートファイルの場合)、データベースは必要に応じてテーブルをキャッシュするというOKの仕事をします。大きすぎない)。もちろん、Squidやその他の方法で処理を高速化することになっていますが、これには多くの構成が必要であり、自動的に簡単に実行することはできません。私の焦点は「デプロイ可能性」です(インタラクティブなインストールでも、あなたの平均的なユーザー。もちろん、すべてのセキュリティの考慮事項に注意する必要があります(含まれているhttpdの構成の自動パッチ適用を含む)。

一方、メモリマッピングファイルは、本当にシステムに次のように伝えたいので、簡単なはずです。「ファイルを削除するように指示するまで、または再起動するまで、そのファイルをメモリに保持してください」。または、関連するPOSIXまたはシステムコールにフックを正しく取得し、ユーザースペースでそれを正確に実行する侵入型APIですらあります。そんなに簡単ですか?それを実行するための簡単なコードスニペットまたは一連の手順が見つからないようです(LinuxまたはWindows用ではありません)。

助けていただければ幸いです!

2
Domi

vmtouchユーティリティ を使用して、ファイルまたはファイルのディレクトリをメモリにロックできます。

vmtouch -dl /var/www/html/important_files

使用法:

vmtouch v0.8.0 - the Virtual Memory Toucher by Doug Hoyte
Portable file system cache diagnostics and control

Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ...

Options:
  -t touch pages into memory
  -e evict pages from memory
  -l lock pages in physical memory with mlock(2)
  -L lock pages in physical memory with mlockall(2)
  -d daemon mode
  -m <size> max file size to touch
  -f follow symbolic links
  -v verbose
  -q quiet

だから私はこのようなディレクトリを取り、メモリにどれだけあるかを見ることができます:

[root@xt /var/www/html/xt/centos]# vmtouch .
           Files: 146
     Directories: 14
  Resident Pages: 0/5996  0/23M  0%
         Elapsed: 0.059768 seconds

したがって、ディレクトリを「タッチ」してキャッシュに入れることができます。

[root@xt /var/www/html/xt/centos]# vmtouch -t .
           Files: 146
     Directories: 14
   Touched Pages: 5996 (23M)
         Elapsed: 0.64321 seconds

後続のチェックは次のことを示しています。

[root@xt /var/www/html/xt/centos]# vmtouch .
           Files: 146
     Directories: 14
  Resident Pages: 5996/5996  23M/23M  100%
         Elapsed: 0.001846 seconds
5
ewwhite

ディスクから読み取られたファイルは、常にファイルキャッシュに保存されます。 CPUはHDに直接アクセスできません。すべてのディスクI/Oは仮想メモリ空​​間にマップされ、CPUはこの仮想メモリ空​​間の領域を読み取ることによってファイルにアクセスします。ファイルがまだメモリにロードされていない場合、カーネルはそれらをディスクから取得し、メモリ不足によってカーネルがファイルキャッシュを空にするまで、ファイルをメモリに保存します。

2
robbyt