Как правильно пользоваться /dev/shm в современном линуксе?
Можно ли просто писать временные файлы в эту директорию не заморачиваясь с монтированием каких-либо ещё?


Re: Как правильно пользоваться /dev/shm в современном линуксе?
Забыл уточнить: ядро 2.6.28.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>эту директорию
В упор не вижу никаких директорий. Ты хочешь _временно_ хранить фалы в оперативке?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
Вот это для ознакомления можно почитать.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> Ты хочешь _временно_ хранить фалы в оперативке?
/dev/shm это классический tmpfs

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>/dev/shm это классический tmpfs
в который монтируется корневая фс при работе initramfs

Re: Как правильно пользоваться /dev/shm в современном линуксе?
я правильно её использую так:
scyld-debian:/# cat /etc/initramfs-tools/scripts/init-bottom/scyld
#!/bin/sh
PREREQ="udev"
prereqs()
<
echo "$PREREQ"
>
case $1 in
prereqs)
prereqs
exit 0
;;
esac
modprobe aufs
modprobe squashfs
modprobe loop
mount -o move /root/dev/ /dev/
touch /etc/mtab
mkdir /boot.scyld
mount -w -t tmpfs none /boot.scyld
mkdir /boot.scyld/mount
mount —move /root/ /boot.scyld/mount
mount -o rw,remount /boot.scyld/mount
#
#mkdir /boot.scyld/rw
#mount -t tmpfs none /boot.scyld/rw
#
mkdir /boot.scyld/ro
mknod /dev/loop0 b 7 0
mount -t squashfs -o loop /boot.scyld/mount/root.sfs /boot.scyld/ro
mount -t aufs -o br:/boot.scyld/mount/rw=rw:/boot.scyld/ro=ro none /root
mount -o move /dev /root/dev/
mkdir /root/dev/shm
mount -t tmpfs devshm /root/dev/shm
mount -o move /boot.scyld /root/dev/shm

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> В упор не вижу никаких директорий.
К этой директории на достаточно новых ядрах по умолчанию подмонтирована файловая система tmpfs размером 0,5 объёма физической памяти.
> Ты хочешь _временно_ хранить фалы в оперативке?
Спасибо, но там рассказывают о ramfs по состоянию на 2001 год. Разве от неё не отказались несколько лет назад в пользу tmpfs?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>>/dev/shm это классический tmpfs
> в который монтируется корневая фс при работе initramfs
Я спрашиваю уже про нормальное функционирование системы, когда загрузка закончилась.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> Можно ли просто писать временные файлы в эту директорию не заморачиваясь
Можно, но она не для этого предназначена.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> я правильно её использую так:
Спасибо, но я спрашиваю не про загрузку, а про работу от имени непривилегированного пользователя. Который может даже не иметь права на команду mount.
Скажем, программе надо создать временный файл. Который будет нужен всего в течении нескольких секунд или минуты. И который должен быть доступен нескольким другим программам. Потом его можно со спокойной совестью удалить. Писать на жёсткий диск? Файлов таких много. Объём невелик (от десятков килобайт до нескольких мегабайт), хранить их в памяти позволяет. Желательно, чтобы программа "просто работала" на как можно большем числе компьютеров и не требовала прав рута для установки.
Имеется директория /dev/shm/ с правами drwxrwxrwt. Можно ли туда писать файлы с уникальными именами, или какие-то программы строятся из рассчёта, что /dev/shm/ пуста, и никто кроме них ею не пользуется? Можно ли ожидать, что она будет доступна на большинстве машин? Что о ней говорят основополагающие документы наподобие LSB?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> Можно, но она не для этого предназначена.
> man shm_open
Спасибо. Как осуществлять доступ к этому объекту из других программ? Просто вызывать shm_open с тем же именем? Останется ли объект существовать, после завершения породившего его процесса? Существует ли способ перенаправить ввод-вывод программы, использующей просто open() в такой объект, или для этого надо переписать программу?
Re: Как правильно пользоваться /dev/shm в современном линуксе?
Не вижу ничего, мешающего работать с shm. Я, например, при перекодировании звуковых файлов храню временные файлы там. Если оперативки гигов 8, можно вообще выделить под shm 6гигов, копировать туда образ DVD и заниматься перекодированием в avi, расположенном там же 🙂
(давно о таком мечтаю, но денег на реализацию нет 🙁 )

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>> man shm_open
> Спасибо. Как осуществлять доступ к этому объекту из других программ? Просто вызывать shm_open с тем же именем? Останется ли объект существовать, после завершения породившего его процесса?
Для Линукса, ответы на все вопросы "да", но сами вопросы говорят о том, что тебе не нужен /dev/shm. Если очень хочешь tmpfs, смонтируй ее на /tmp

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> сами вопросы говорят о том, что тебе не нужен /dev/shm
Тогда что мне нужно?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> Для Линукса, ответы на все вопросы "да"
Спасибо. Я правильно понял, что подмена open() невозможна?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>> сами вопросы говорят о том, что тебе не нужен /dev/shm
> Тогда что мне нужно?
По-моему, тебе нужен обычный временный файл. Типа man mktemp. Если тебе нужна семантика delete-on-close, то в Си это реализуется элементарно — открываешь файл, удаляешь его, и пользуешься полученным дескриптором. При закрытии файл будет удален.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> По-моему, тебе нужен обычный временный файл.
Насколько будет различаться время чтения из временного файла в памяти и временного файла на диске?

Re: Как правильно пользоваться /dev/shm в современном линуксе?
>Спасибо, но я спрашиваю не про загрузку, а про работу от имени непривилегированного пользователя. Который может даже не иметь права на команду mount.
если б ты читал не по диагонали, ты бы всё понял и не тупил.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> Насколько будет различаться время чтения
Померял. На полутора гигабайтах временных файлов разница в полтора-два раза.

Re: Как правильно пользоваться /dev/shm в современном линуксе?
> если б ты читал не по диагонали
Что из этого скрипта может повторить пользователь, не имеющий прав на mount и sudo? По-моему, ничего.
Что из создаваемого этим скриптом может быть полезно пользователю, не имеющему прав на sudo и mount?
Создаётся директория /boot.scyld, к ней монтируется tmpfs. Создаётся директория /root/dev/shm, к ней тоже монтируется tmpfs, затем в эту директорию перемещается то, что было смонтировано в /boot.scyld. И? Что из них останется после загрузки?
/root/dev/shm, надо думать, в итоге станет /dev/shm, но что там будет? Как в дальнейшем система испольует /dev/shm/ помимо вешанья на неё временных директорий? Для такого использования команда «mount -t tmpfs devshm /root/dev/shm» не нужна, достаточно создать какую-нибудь /root/tmp/1/, скомандовать, скажем, «mount -t tmpfs devshm /root/tmp/1/», а потом при желании перевешивать эту tmpfs из /root/tmp/1/ куда в голову взбредёт. Или не так?
При чём тут squashfs и aufs? Похоже, к использованию tmpfs они не относятся, здесь они решают задачи с ней напрямую несвязанные.
Как это соотносится с конфигурацией компьютера без initramfs? Тоже не ясно.
Итого ценного в скрипте: примеры запуска mount с -t tmpfs и -o move. Полезная информация, но ничего нового.
Русские Блоги
/ Dev / shm / — очень полезный каталог в linux, потому что этот каталог находится не на жестком диске, а в памяти. Поэтому в Linux нет необходимости тратить много усилий на создание виртуального диска, непосредственное использование / dev / shm / может обеспечить очень хороший эффект оптимизации. / dev / shm / Следует обратить внимание на проблему с пропускной способностью: в Linux по умолчанию она составляет не более половины размера памяти, что можно увидеть с помощью команды df -h. Но он на самом деле не занимает эту память. Если в каталоге / dev / shm / нет файла, то занимаемая им память фактически равна 0 байтам, если это максимум 1 ГБ и в нем 100 МБ файлов, остальные 900 МБ. Он по-прежнему может использоваться другими приложениями, но занимаемая им память 100 МБ никогда не будет перераспределена системой. В противном случае, кто осмелится сохранить файлы?
По умолчанию система будет загружать / dev / shm, которая является так называемой tmpfs (система виртуальной памяти). Некоторые люди говорят, что она отличается от ramdisk (виртуальный диск). Как и виртуальный диск, tmpfs может использовать вашу оперативную память, но он также может использовать ваш раздел подкачки для хранения. А традиционный виртуальный диск — это блочное устройство, и для его использования требуется команда типа mkfs. Tmpfs — это файловая система, а не блочное устройство, вы просто устанавливаете его, и его можно использовать. Самая большая особенность tmpfs заключается в том, что его пространство хранения находится в виртуальной памяти (VM), которая управляется подсистемой vm внутри ядра linux , Размер виртуальной машины под Linux состоит из RM (реальной памяти) и подкачки. Размер RM — это размер физической памяти, а размер подкачки определяется вами. Swap — это пространство памяти, виртуализированное жестким диском, поэтому скорость чтения и записи намного ниже, чем RM (реальная память), Когда процесс запрашивает определенный объем памяти, например, когда подсистема vm ядра обнаруживает, что RM недостаточно, он будет обмениваться некоторыми редко используемыми данными в RM в Swap. Если вам нужно повторно использовать эти данные, перенесите их из Swap Обмен на РМ.
Виртуальная машина состоит из двух частей: RM + Swap, поэтому максимальное пространство хранения tmpfs не превышает (размер RM + размер Swap). Но для самой tmpfs он не знает, является ли используемое им пространство RM или Swap, и все они управляются подсистемой vm ядра. Размер tmpfs по умолчанию равен половине RM. Если ваша физическая память равна 1024M, то размер tmpfs по умолчанию составляет 512M. В нормальных условиях он настроен на размер меньше физической памяти. Размер конфигурации tmpfs на самом деле не занимает эту память.Если в каталоге / dev / shm / нет файла, то занимаемая им память фактически равна 0 байтам, если это максимум 1 ГБ, в нем содержится 100 МБ файлов, а остальные 900M все еще может использоваться другими приложениями, но занимаемая им память 100M не будет разделяться системой. При удалении файлов в tmpfs драйвер файловой системы tmpfs динамически сокращает файловую систему и освобождает ресурсы виртуальной машины.
У tmpfs есть следующие преимущества:
1. Размер динамической файловой системы.
2. Еще одним важным преимуществом tmpfs является его молниеносная скорость. Поскольку типичная файловая система tmpfs полностью находится в оперативной памяти, чтение и запись могут быть практически мгновенными.
3. Данные tmpfs не будут сохранены после перезапуска, поскольку виртуальная память по своей природе является энергозависимой. Поэтому необходимо сделать несколько сценариев для выполнения таких операций, как загрузка и привязка.
Во-вторых, измените размер / dev / shm
Максимальная половина размера памяти по умолчанию может быть недостаточной в некоторых случаях, и число inode по умолчанию, как правило, невелико. Как правило, вам нужно увеличить его. Вы можете использовать команду mount для управления им.
На машине 2G максимальная емкость устанавливается на 1,5 ГБ, а число инодов — на 1000000, что означает, что можно хранить до миллиона небольших файлов.
Если вам нужно постоянно изменять значение / dev / shm, вам нужно изменить / etc / fstab
Примечание. Используйте команду df -h для просмотра результатов.
Три, / dev / shm приложение
Сначала создайте папку tmp в / dev / shm, а затем свяжите ее с фактическим / tmp
После использования команды mount —bind olddir newerdir для монтирования каталога в другой каталог вся информация, такая как разрешения и владелец newerdir, изменится. Подключенный каталог наследует все атрибуты подключенного каталога, кроме имени. В режиме управления памятью amm в Oracle 11g используется / dev / shm, поэтому иногда изменение MEMORY_TARGET или MEMORY_MAX_TARGET приводит к ошибке ORA-00845.
Записки системного программиста
Если в своей Linux системе вы посмотрите на вывод команды mount, то в одной из строк скорее всего вы увидите что-то вроде:
Многие знают, что такое tmpfs, и даже используют эту файловую систему размещающую данные в памяти (например, монтируя ее в /tmp), но наверняка не многие знают зачем она смонтирована именно в /dev/shm? Что за странное место для временного хранилища?
Название /dev/shm наводит на мысль о механизме межпроцессного взаимодействия IPC shared memory. Но нетрудно убедиться, что для привычного System V IPC эта файловая система не требуется. Вызов shmget, например, не обращается к файловой системе, пространство имен поддерживается ядром. Так зачем /dev/shm? Оказывается, в glibc, кроме System V shared memory IPC есть реализация POSIX IPC. И вот эта реализация и использует /dev/shm. Убеждаемся в этом:
6 комментариев:
почему нет ни одного коммента? отличный пост, спасибо!
Спасибо! Коротко и ясно.
Зачем пустой #include? Если не нужен, то можно его вообще опустить. Без инклудинга компилит нормально.
PS: Считаю, что критика это хорошо — она помогает достичь совершенства 🙂
Linux — Shared Memory (SHM) (/dev/shm)
The shared memory system can also be used to set permissions on memory.
There are two different types of shared memory implementations:
Articles Related
Management
By default, your operating system includes an entry in /etc/fstab to mount /dev/shm .
File structure
shm / shmfs is also known as tmpfs.
tmpfs means temporary file storage facility. It is intended to appear as a mounted file system, but one which uses virtual memory instead of a persistent storage device.
How to check its size ?
To check the size of the shared memory file system, enter the following command:
Limit
To determine current shared memory limits you can use the ipcs command.
Parameters
shmmax
shmmax define the Maximum size (in bytes) for a shared memory segment.
We gan get the parameters limit by using the proc Filesystem such as:
shmall total shared memory avail: 2097152
segments
Process
SHR – Shared Mem size (kb)
Documentation / Reference
Recommended Pages

SAP ERP 6 EHP5 — Installation Java Linux
SAP ERP 6 EHP5 — Installation Java Linux About New Installation of SAP ERP 6.0 with Enhancement Packages (EHP) on a central system architecture (Chapter 3 of the — Installation of an Enhancemen «.

Azure — Oracle Database Manually Installation on Linux
The installation of the Oracle database on bare-bone Linux. For a quick an dirty installation, see Articles Related VM Create Creation of a VM with Oracle Linux 7 Update 4 and a Standard_DS1_ssh c «.
Linux — IPCS command
The ipcs command provides information on the ipc facilities. Articles Related Resources Resources may be specified as follows: -m: shared memory segments -q: message queues -s: semaphore arrays -a «.
Linux — Memory
Process memory reports on Linux are difficult to interpret for various reasons. One of the main reasons is the way processes can share or re-use memory allocated to another process. Linux normally all «.
Linux — System V Shared Memory IPC
System V IPC is meant to provide and entire IPC mechanism which provides three methods of communication: message queues, semaphores, and shared memory segments. Articles Related
Timesten — (Memory|Database) (Size|Space|Partition)
TimesTen manages database space using two separate memory partitions within a single contiguous memory space. One partition contains: permanent data and the other contains temporary datacheckpointt «.
Timesten — Database Installation and configuration on Linux
On UNIX/Linux systems before installing application, you must in general configure the following: The number of semaphores Allowable shared memory In addition for timesten, you need to perform the f «.