Эффективно ли кэширует файлы файловая система Linux? - PullRequest
21 голосов
/ 19 августа 2011

Я создаю веб-приложение, работающее на сервере Linux.Приложение постоянно обращается к файлу размером 250 КБ - оно загружает его в память, читает и отправляет некоторую информацию пользователю.Поскольку этот файл читается постоянно, мой клиент предлагает использовать что-то вроде memcache для кеширования его в память, возможно потому, что это ускорит операции чтения.

Однако я думаю, что файловая система Linuxвероятно, уже кэширует файл в памяти, так как к нему часто обращаются.Это правильно?По вашему мнению, обеспечит ли memcache реальное улучшение?Или он собирается сделать то же самое, что Linux уже делает?

Я не очень знаком ни с Linux, ни с memcache, поэтому я был бы очень признателен, если бы кто-то мог это прояснить.

Ответы [ 5 ]

20 голосов
/ 19 августа 2011

Да, если вы не изменяете файл каждый раз, когда открываете его.

Linux будет хранить информацию о файле на страницах копирования при записи в памяти, и «загрузка» файла в память должна быть очень быстрой (в худшем случае подкачка таблицы страниц).

Редактировать: Хотя, как указывает cdhowie, «linux filesystem» не существует. Тем не менее, я считаю, что соответствующий код находится в управлении памятью Linux и, следовательно, не зависит от рассматриваемой файловой системы. Если вам интересно, вы можете прочитать в источнике linux об обработке объектов vm_area_struct в основном в linux / mm / mmap.c.

3 голосов
/ 19 августа 2011

Как уже упоминалось, mmap - хорошее решение.

Но один файл размером 250 Кбайт очень мал.Возможно, вы захотите прочитать его и поместить в некую структуру памяти, которая соответствует тому, что вы хотите отправить обратно пользователю при запуске.Т.е., если это текстовый файл, то хорошим выбором может быть массив строк и т. Д.

2 голосов
/ 10 марта 2013

Файл должен быть кэширован, но убедитесь, что на монтировании установлена ​​опция noatime, в противном случае время доступа будет пытаться сохранить в файл, делая кеш недействительным.

2 голосов
/ 19 августа 2011

Да, определенно. Он будет сохранять доступ к файлам в памяти неограниченное время, если только что-то еще не потребуется памяти.

Вы можете управлять этим поведением (в некоторой степени) с помощью системного вызова fadvise. Для получения более подробной информации смотрите страницу «man».

Системный вызов чтения / записи обычно все равно должен копировать данные, поэтому, если вы видите реальное узкое место, делающее это, рассмотрите возможность использования mmap (), которая может избежать копирования, отображая страницы кэша непосредственно в процессе. 1005 *

1 голос
/ 19 августа 2011

Полагаю, что помещение этого файла в ramdisk (tmpfs) может дать достаточно преимуществ без больших модификаций.Если вы действительно не серьезно относитесь ко времени отклика в микросекундах.

...