Назад | Перейти на главную страницу

Файлы отображения памяти для невероятно быстрого веб-сервера в Linux

Есть ли какой-нибудь простой способ указать Linux, чтобы каталог файлов был кэширован в памяти?

Я понял, что Node.Js и Apache большую часть времени тратят на файловый ввод-вывод, заставляя пользователей ждать, если у вас много файлов (особенно для файлов сценариев и шаблонов; база данных выполняет нормальную работу по кэшированию вещей по мере необходимости, если таблицы не слишком большие). Конечно, вы должны использовать Squid или другие способы ускорить процесс, но это требует большой настройки и не может быть легко выполнено автоматически, и я сосредоточен на «возможности развертывания» (даже интерактивная установка потребует слишком многого от ваш средний пользователь. Конечно, необходимо позаботиться обо всех соображениях безопасности (включая автоматическое исправление включенной конфигурации httpd).

Файлы отображения памяти, с другой стороны, должны быть легкими, поскольку вы действительно хотите сказать системе: «Эй, просто держите этот файл в памяти, пока я не скажу вам сбросить его или до перезагрузки»; или даже какой-нибудь навязчивый API, который вставляет свои крючки прямо в соответствующие POSIX или системные вызовы и делает именно это в пользовательском пространстве. Это так просто? Кажется, я не могу найти простой фрагмент кода или набор инструкций, чтобы это сделать (не для Linux или Windows).

Помощь будет очень признательна!

Вы можете использовать утилита 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

Файлы, прочитанные с диска, всегда хранятся в файловом кеше. ЦП не может получить прямой доступ к HD. Весь дисковый ввод-вывод отображается в пространство виртуальной памяти, и ЦП обращается к файлам, читая области этого пространства виртуальной памяти. Если файлы еще не загружены в память, ядро ​​извлекает их с диска и будет хранить файлы в памяти до тех пор, пока из-за нехватки памяти ядро ​​не очистит файловый кеш.