используйте `/ run / shm` (ранее` / dev / shm`) в качестве временного каталога

9

Это хорошая практика для создания каталога /run/shm(ранее /dev/shm) и использовать его как временный каталог для приложения?

Предыстория: я пишу тесты черного ящика для программы, которая много работает с файлами и каталогами. Для каждого теста я создаю много файлов и каталогов, затем запускаю программу, затем создаю ожидаемый набор файлов и каталогов и затем запускаю diff для сравнения. Сейчас у меня около 40 тестов, и они уже занимают более 2 секунд для запуска. В надежде ускорить процесс Я хочу запустить тесты в каталоге на каком-нибудь виртуальном диске.

Изучая RAM-диск, я наткнулся на вопрос с ответом о том, что можно создавать каталог /dev/shmи использовать его как временный каталог. Однако, изучив еще кое-что, я наткнулся на вики-страницу из Debian, заявив, что это /dev/shmпрямое использование ошибки . Я должен использовать shm_*функции. К сожалению, shm_*функции не доступны для использования в сценарии оболочки.

Теперь я в замешательстве. Это нормально или не использовать /run/shm(ранее /dev/shm) как временный каталог?

lesmana
источник
Да, многие пользователи также подключаются /tmpк общей памяти.
Eddy_Em
Я думаю, что /tmpэто более семантически. Если у ваших пользователей достаточно оперативной памяти для использования /dev/shmвременных файлов, чтобы ускорить процесс, они подключат его там. Но если им не хватает оперативной памяти, и его установка замедляет работу компьютера, заставляя все процессы использовать файлы подкачки, тогда они сохранят свой оперативную память для более важных задач и используют обычное дисковое пространство для /tmpфайловой системы. Другими словами, /tmpболее настраиваемый.
Джек

Ответы:

10

Вполне нормально использовать какой-либо каталог, /runесли у вас есть соответствующие права на него. В некоторых современных дистрибутивах /tmpэто уже виртуальная файловая система в памяти или символическая ссылка на каталог внутри /run. Если это ваш случай (вы можете это /etc/fstabподтвердить или ввести mtab), вы можете использовать его /tmpкак временный каталог.

Также не путайте статью Debian. shm_*Функции используются для создания сегментов общей памяти для межпроцессного взаимодействия. С помощью этих функций вы можете разделить фрагмент памяти между двумя или более процессами, чтобы они могли взаимодействовать или использовать одни и те же данные. Процессы имеют сегмент памяти, связанный в собственном адресном пространстве, и могут читать и записывать туда, как обычно. Ядро имеет дело со сложностью. Эти функции не доступны как функции оболочки (и не очень полезны в контексте оболочки). Для получения дополнительной информации, посмотрите на man 7 shm_overview. Суть статьи в том, что ни одна программа не должна управлять непосредственно псевдофайлами, представляющими общие сегменты, а вместо этого использовать соответствующие функции для создания, присоединения и удаления сегментов общей памяти.

lgeorget
источник
2
Наиболее подходящее место ниже /runможет быть /run/user/${UID}/.
Пол Фенни
1
Действительно, в моей системе pulseaudio и systemd устанавливают там некоторые файлы, такие как файл pid. Тем не менее, / tmp все равно будет моим предпочтительным местом для временных файлов.
lgeorget
2
@PaulFenney: / run / user / $ UID также известен как $ XDG_RUNTIME_DIR
user2394284