/dev/shm быстрее, чем /tmp?

/dev/shm быстрее, чем /tmp?

Этот вопросзапросы, использовать ли /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

Связанный контент