
Этот вопросзапросы, использовать ли /dev/shm
или /tmp
. В предоставленных ответах возникает общее впечатление, что /dev/shm
быстрее, чем , /tmp
поскольку он пишет в ОЗУ вместо диска. Поиск в сети по этой теме смутно подтверждает это впечатление. К сожалению, я не могу найти надежный источник, несомненно показывающий, какой из них более производительный, например, путем измерения.
Например, эта цитата из первого ответа:
Поскольку оперативная память значительно быстрее, чем дисковое хранилище, вы можетеиспользуйте /dev/shm вместо /tmp для повышения производительности, если ваш процесс интенсивно использует ввод-вывод и временные файлы.
В статье по ссылке говорится:
/dev/shm — это не что иное, как реализация традиционной концепции общей памяти. Это эффективное средство передачи данных между программами. Одна программа создаст часть памяти, к которой другие процессы (если им разрешено) смогут получить доступ. Это приведет к ускорению работы Linux.
Это не подтверждает ответ, ссылающийся на этот веб-сайт, и не сравнивает производительность /dev/shm
с /tmp
. Это скорее просто описание того, что /dev/shm
есть.
Тем не менее, есть одинкомментарийв первом ответе говорится (на сегодняшний день):
При использовании /dev/shm нет никакого прироста производительности. /dev/shm — это память (tmpfs), поддерживаемая диском (swap). /var/tmp — это память (дисковый кэш), поддерживаемая диском (файловая система на диске). На практике производительность примерно одинакова (tmpfs имеет небольшое преимущество, но недостаточное, чтобы это имело значение). /tmp может быть tmpfs или нет, в зависимости от того, как администратор его настроил. Нет никаких веских причин использовать /dev/shm в ваших скриптах.
Поскольку этот комментарий остается неоспоренным, а другие ответы и комментарии свидетельствуют об обратном, остается вопрос: /dev/shm
быстрее /tmp
или нет?
NB: Я прекрасно понимаю, что ответ, скорее всего, будет таким: «Это зависит от обстоятельств».вопрос здесь на SU:SEо том, какую файловую систему использовать для /tmp
. Также естьсвязанный вопрос на SO.
решение1
При использовании /dev/shm
вы не пишете напрямую в ОЗУ. Этоtmpfsфайловая система,tmpfsхранит все файлы в виртуальной памяти (диск как расширение оперативной памяти).
Отkernel.org:
Если сравнить его с ramfs (который был шаблоном для создания tmpfs), то вы получаете подкачку и проверку ограничений. Еще одна похожая вещь — RAM-диск (/dev/ram*), который имитирует жесткий диск фиксированного размера в физической RAM, где вам нужно создать обычную файловую систему поверх. RAM-диски не могут подкачиваться, и у вас нет возможности изменять их размер.
Поскольку tmpfs полностью находится в кэше страниц и в swap, все страницы tmpfs будут отображаться как «Shmem» в /proc/meminfo и «Shared» в free(1). Обратите внимание, что эти счетчики также включают разделяемую память (shmem, см. ipcs(1)). Самый надежный способ получить счетчик — использовать df(1) и du(1).
рамфсэто файловая система на базе оперативной памяти:
Ramfs — очень простая файловая система, которая экспортирует механизмы кэширования дисков Linux (кэш страниц и кэш dentry) в виде динамически изменяемой файловой системы на базе оперативной памяти.
Поэтому, отвечая на ваш вопрос, прироста производительности нет, поскольку оба (/dev/shm и /tmp) используют диск.
Вы можете проверить, когда вы пишете в оперативную память, с помощью этого примера:
mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free