Arquivos de mapeamento de memória para um servidor da web rápido no Linux

2

Existe alguma maneira simples de dizer ao Linux para manter um diretório de arquivos em cache na memória?

Percebi que o Node.Js e o Apache estão gastando mais tempo em E / S de arquivos, fazendo com que os usuários esperem se você tiver muitos arquivos (especialmente para arquivos de script e modelo; o banco de dados faz um trabalho OK armazenando as coisas conforme necessário , se as tabelas não forem muito grandes). É claro que você deve usar o Squid ou outras formas de acelerar as coisas, mas isso requer muita configuração, e não pode ser feito facilmente de forma automática, e meu foco está na "implantação" (mesmo uma instalação interativa exigiria muito de Claro, todas as considerações de segurança devem ser tomadas (incluindo a correção automática da configuração do httpd incluído).

Arquivos de mapeamento de memória, por outro lado, devem ser fáceis, já que você realmente quer apenas dizer ao sistema: "Ei, mantenha esse arquivo na memória até que eu diga para soltar ou até reiniciar"; ou até mesmo alguma API intrusiva que obtém seus ganchos diretamente nas chamadas POSIX ou do sistema relevantes e faz exatamente isso no espaço do usuário. É tão simples assim? Eu não consigo encontrar um trecho de código simples ou um conjunto de instruções para fazer isso (não para Linux ou Windows).

A ajuda seria muito apreciada!

    
por Domi 02.05.2014 / 12:53

2 respostas

5

Você pode usar o utilitário vmtouch para bloquear um arquivo ou até mesmo um diretório de arquivos na memória.

vmtouch -dl /var/www/html/important_files

Uso:

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

Então eu posso pegar um diretório como esse e ver quanto está na memória:

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

Para que eu possa "tocar" no diretório e trazê-los para o cache:

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

Uma verificação subseqüente mostra:

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

Os arquivos lidos do disco são sempre armazenados no cache de arquivos. A CPU não pode acessar o HD diretamente. Todo o disco i / o é mapeado para o espaço de memória virtual e a CPU acessa os arquivos lendo as áreas desse espaço de memória virtual. Se os arquivos não estiverem carregados na memória, o kernel os recuperará do disco e armazenará os arquivos na memória até que a pressão da memória faça com que o kernel esvazie o cache de arquivos.

    
por 03.05.2014 / 18:03