У меня довольно старый сервер с 4 ГБ ОЗУ, и он почти весь день обслуживает одни и те же файлы, но делает это с жесткого диска, в то время как 3 ГБ ОЗУ «свободны».
Любой, кто когда-либо пробовал управлять приводом, может засвидетельствовать, что это круто с точки зрения скорости. Использование памяти этой системой обычно никогда не превышает 1 ГБ / 4 ГБ, поэтому я хочу знать, есть ли способ использовать эту дополнительную память для чего-то хорошего.
- Можно ли указать файловой системе всегда обслуживать определенные файлы вне ОЗУ?
- Существуют ли другие методы, которые я могу использовать для улучшения возможностей чтения файлов с использованием оперативной памяти?
Точнее, я не ищу здесь «взлом». Я хочу, чтобы вызовы файловой системы обслуживали файлы из ОЗУ без необходимости создания оперативной памяти и копирования файлов туда вручную. Или, по крайней мере, сценарий, который делает это для меня.
Возможные приложения здесь:
- Веб-серверы со статическими файлами, которые читаются много
- Серверы приложений с большими библиотеками
- Настольные компьютеры со слишком большим количеством оперативной памяти
Есть идеи?
Редактировать:
- Нашел это очень информативным: Linux Page Cache и pdflush
- Как указал Зан, память на самом деле не свободна. Я имею в виду, что он не используется приложениями, и я хочу контролировать, что должно кэшироваться в памяти.
linux
cache
virtual-memory
Andrioid
источник
источник
Ответы:
vmtouch кажется хорошим инструментом для работы.
Особенности:
Руководство vmtouch
РЕДАКТИРОВАТЬ: Использование, как указано в вопросе, указано в примере 5 на vmtouch Hompage
РЕДАКТИРОВАТЬ 2: Как отмечается в комментариях, теперь доступен репозиторий git .
источник
vmtouch
хорошо вписывается в эту нишуЭто также возможно с помощью vmtouch Virtual Memory Toucher утилиты .
Инструмент позволяет контролировать кэш файловой системы в системе Linux. Вы можете принудительно заблокировать или заблокировать определенный файл или каталог в подсистеме кэша виртуальной машины или использовать его для проверки того, какие части файла / каталога содержатся в виртуальной машине.
Или же...
источник
Хитрость бедного человека в том, чтобы загружать данные в кеш файловой системы - просто перехватить их и перенаправить в / dev / null.
источник
cat
периодически отправляет файл в / dev / nullLinux будет кэшировать столько дискового ввода-вывода в памяти, сколько сможет. Вот что такое статистика кеша и буферной памяти. Это, вероятно, сделает лучшую работу, чем вы будете хранить правильные вещи.
Однако, если вы настаиваете на хранении ваших данных в памяти, вы можете создать флеш-накопитель, используя tmpfs или ramfs. Разница в том, что ramfs выделит всю запрошенную вами память, поскольку tmpfs будет использовать только ту память, которую использует ваше блочное устройство. Моя память немного ржавая, но вы должны уметь:
или же
а затем скопируйте ваши данные в каталог. Очевидно, что когда вы выключите или размонтируете этот раздел, ваши данные будут потеряны.
источник
После тщательного изучения функций подкачки ядра 2.6 и кэширования страниц я нашел 'fcoretools'. Который состоит из двух инструментов;
(Если кому-то это покажется интересным, я размещу это здесь)
источник
Существуют две настройки ядра, которые могут значительно помочь даже без использования других инструментов:
swappiness
говорит ядру Linux, насколько агрессивно он должен использовать swap. Цитирую статью из Википедии:
vfs_cache_pressure
Цитирование из vm.txt :
Установив
swappiness
высокий уровень (например, 100), ядро перемещает все, что ему не нужно, и освобождает ОЗУ для кэширования файлов. И, установивvfs_cache_pressure
ниже (скажем, 50, а не 0!), Он будет отдавать предпочтение кэшированию файлов вместо хранения данных приложения в оперативной памяти.(Я работаю над большим проектом Java, и каждый раз, когда я запускаю его, он занимал много оперативной памяти и сбрасывал кэш диска, поэтому в следующий раз, когда я скомпилировал проект, все снова было прочитано с диска. Регулируя эти два параметра, я управляю хранить исходники и скомпилированный вывод в кэше в ОЗУ, что значительно ускоряет процесс.)
источник
Я очень сомневаюсь, что на самом деле он обслуживает файлы с диска с 3 ГБ ОЗУ. Кэширование файлов в Linux очень хорошее.
Если вы видите дисковый ввод-вывод, я бы посмотрел ваши настройки регистрации. Многие журналы устанавливаются как небуферизованные, чтобы гарантировать доступность самой последней информации журнала в случае сбоя. В системах, которые должны работать быстро, используйте буферизованный журнал ввода-вывода или удаленный сервер журналов.
источник
Если у вас достаточно памяти, вы можете просто читать файлы, которые вы хотите кэшировать с помощью cat или аналогичных файлов. Linux будет хорошо справляться с этой задачей.
источник
Вы можете иметь программу, которая просто
mmap
хранит ваши файлы и продолжает работать.источник
Существуют различные системы ramfs, которые вы можете использовать (например, ramfs, tmpfs), но в целом, если файлы действительно часто читаются, они помещаются в кеш вашей файловой системы. Если ваш рабочий набор файлов больше, чем ваш свободный ОЗУ, то файлы будут удалены из него, но если ваш рабочий набор будет больше, чем ваш свободный ОЗУ, вы никак не сможете вписать все это в виртуальный диск.
Проверьте вывод команды «free» в оболочке - значение в последнем столбце в разделе «Cached» показывает, сколько свободного памяти используется для кэша файловой системы.
источник
Что касается вашего последнего вопроса, убедитесь, что ваша RAM находится на разных каналах памяти, чтобы процессор мог получать данные параллельно.
источник
Я думаю, что это может быть лучше решено на уровне приложений. Например, для этого, вероятно, существуют специализированные веб-серверы, или вы можете рассмотреть mod_cache с Apache. Если у вас есть конкретная цель, например, более быстрое обслуживание веб-контента, то я думаю, что вы можете получить улучшения от такого рода вещей.
Но ваш вопрос носит общий характер, подсистема памяти Linux предназначена для обеспечения наилучшего общего использования оперативной памяти. Если вы хотите ориентироваться на определенные типы производительности, попробуйте поискать все в / proc / sys / vm.
Пакет fcoretools интересен, мне были бы интересны любые статьи о его приложении ... Эта ссылка рассказывает о реальных системных вызовах, используемых в приложении.
источник
Настольные компьютеры (например, Ubuntu) уже используют предварительную загрузку файлов (по крайней мере, популярных общих библиотек) в память при загрузке. Он используется для ускорения загрузки и запуска различных вредоносных программ, таких как FF, OO, KDE и GNOME (с эволюцией bloat-mailer).
Инструмент называется readahead http://packages.ubuntu.com/dapper/admin/readahead
Существует также соответствующий системный вызов: readahead (2) http://linux.die.net/man/2/readahead
Также есть проект предварительной загрузки демона: http://linux.die.net/man/8/preload
источник
http://www.coker.com.au/memlockd/ делает это
хотя вам это действительно не нужно, linux отлично справится с кэшированием файлов, которые вы используете самостоятельно.
источник
я только что попробовал dd, если = / dev / yourrootpartition = / dev / null \ bs = 1Mcount = howmuchmemoryyouwanttofill
это не дает мне контроль, который вы хотите, но он по крайней мере пытается использовать потерянную память
источник
я использую find / -name stringofrandomcharacter, это очень помогает
источник
Не совсем то, что спросили, но я использую
инициировать инициализацию файлов в томе AWS, созданном из моментального снимка. Это более сфокусировано, чем официальная рекомендация использовать dd, если вы просто хотите прочитать некоторые файлы.
источник
Иногда я могу захотеть кэшировать файлы в определенной папке и ее подпапках. Я просто захожу в эту папку и выполняю следующее:
находить . -exec cp {} / dev / null \;
И эти файлы кэшируются
источник