Мне нужно настроить систему хранения в памяти для примерно 10 ГБ данных, состоящих из множества отдельных файлов (изображений) по 100 КБ. Будет много чтений и довольно периодических записей (добавление новых файлов, удаление некоторых старых).
Теперь я знаю, что tmpfs ведет себя как обычная файловая система, для которой вы можете, например, проверять свободное / используемое пространство с помощью df , что очень удобно. Тем не менее, мне интересно , предложат ли ramfs некоторые преимущества в отношении скорости операций ввода-вывода. Я знаю, что не могу контролировать размер используемой памяти при использовании ramfs и что моя система может зависать, если она полностью использует свободную оперативную память, но это не будет проблемой в этом сценарии.
Подводя итог, я заинтересован:
- Производительность, которая быстрее: ramfs или tmpfs (и, возможно, почему)?
- Когда tmpfs использует пространство подкачки? Перемещает ли уже сохраненные данные в раздел подкачки (чтобы освободить ОЗУ для других работающих в данный момент программ) или только новые данные, если в этот момент не осталось свободной ОЗУ?
источник
Ответы:
Моя рекомендация:
Измерять и наблюдать реальную активность в нормальных условиях.
Эти файлы вряд ли когда-либо понадобятся и будут обслуживаться из кэша всегда. Но есть хороший инструмент под названием vmtouch, который может сказать вам, что находится в кеше в данный момент. Вы также можете использовать его для блокировки определенных каталогов или файлов в кеше. Посмотрите, как все выглядит после некоторого регулярного использования. Использование tmpfs и ramfs не обязательно для этой ситуации.
Смотрите: http://hoytech.com/vmtouch/
Я думаю, вы будете удивлены, увидев, что наиболее активные файлы, вероятно, уже будут храниться в кеше.
Что касается tmpfs и ramfs, то заметной разницы в производительности нет. Есть эксплуатационные различия. Реальный пример использования - Oracle, где ramfs использовался, чтобы позволить Oracle управлять данными в оперативной памяти без риска их замены. Данные tmpfs могут быть выгружены под давлением памяти. Существуют также различия в изменении размера и изменении настроек на лету.
источник
Не думай об этом. Поместите достаточно оперативной памяти в вашу систему и позвольте кешу диска ядра позаботиться о вас. Таким образом, вы получаете выгоду от чтения, поступающего непосредственно из памяти, при этом сохраняя возможность сохранять данные на диске.
источник
1) Тест производительности.
Используя эту страницу в качестве ссылки, я провел сравнение операций ввода / вывода между tmpfs и ramfs, и в результате он оказался практически идентичным по производительности:
2) Согласно этой странице , tmpfs использует swap, а ramfs не использует swap.
источник
Если у вас установлено достаточное количество оперативной памяти для размещения различных буферов ядра, стека и кучи приложений, обычного кэша файловой системы и всех файлов, которые вы намереваетесь поместить в него,
ramfs
никогда не должно быть медленнее, чем,tmpfs
поскольку не будет никакого риска физический ввод / вывод по конструкции. Физические операции ввода-вывода, несомненно, являются основной причиной снижения производительности в этой области.Однако, если у вас не установлен такой объем ОЗУ, использование
ramfs
может и, вероятно, будет медленнее, чем то,tmpfs
что последний использует эвристику виртуальной памяти, чтобы решить, что лучше должно быть на диске (то есть в области подкачки), а что должно быть в ОЗУ. в то время какtmpfs
данные вашей файловой системы застряли в оперативной памяти, что может быть пустой тратой ресурсов.Чтобы ответить на второй вопрос, да,
tmpfs
сначала будут перемещены старые данные в область подкачки, а не последний «горячий».источник