Мне нужно настроить систему хранения в памяти примерно на 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, и результаты таковы, что они практически идентичны с точки зрения производительности:
# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)
# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s
# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s
# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s
2) Согласно эта страница, tmpfs использует swap, а ramfs не использует swap.
Если у вас установлен достаточный объем ОЗУ для размещения различных буферов ядра, стека приложений и кучи, обычного кеша файловой системы и всех файлов, которые вы собираетесь в него поместить, ramfs
никогда не должен быть медленнее, чем tmpfs
так как в силу конструкции отсутствует риск физического ввода-вывода. Физические операции ввода-вывода, несомненно, являются основной причиной снижения производительности в этой области.
Однако, если у вас не установлен такой объем ОЗУ, используйте ramfs
может и, вероятно, будет медленнее, чем tmpfs
поскольку последний использует эвристику виртуальной памяти, чтобы решить, что лучше быть на диске (то есть в области подкачки), а что должно быть в ОЗУ, в то время как с tmpfs
данные вашей файловой системы застревают в ОЗУ, что может быть пустой тратой ресурсов.
Чтобы ответить на второй вопрос, да, tmpfs
сначала переместит в область подкачки старые данные, а не последние «горячие».