Это хорошая практика для создания каталога /run/shm
(ранее /dev/shm
) и использовать его как временный каталог для приложения?
Предыстория: я пишу тесты черного ящика для программы, которая много работает с файлами и каталогами. Для каждого теста я создаю много файлов и каталогов, затем запускаю программу, затем создаю ожидаемый набор файлов и каталогов и затем запускаю diff для сравнения. Сейчас у меня около 40 тестов, и они уже занимают более 2 секунд для запуска. В надежде ускорить процесс Я хочу запустить тесты в каталоге на каком-нибудь виртуальном диске.
Изучая RAM-диск, я наткнулся на вопрос с ответом о том, что можно создавать каталог /dev/shm
и использовать его как временный каталог. Однако, изучив еще кое-что, я наткнулся на вики-страницу из Debian, заявив, что это /dev/shm
прямое использование ошибки . Я должен использовать shm_*
функции. К сожалению, shm_*
функции не доступны для использования в сценарии оболочки.
Теперь я в замешательстве. Это нормально или не использовать /run/shm
(ранее /dev/shm
) как временный каталог?
/tmp
к общей памяти./tmp
это более семантически. Если у ваших пользователей достаточно оперативной памяти для использования/dev/shm
временных файлов, чтобы ускорить процесс, они подключат его там. Но если им не хватает оперативной памяти, и его установка замедляет работу компьютера, заставляя все процессы использовать файлы подкачки, тогда они сохранят свой оперативную память для более важных задач и используют обычное дисковое пространство для/tmp
файловой системы. Другими словами,/tmp
более настраиваемый.Ответы:
Вполне нормально использовать какой-либо каталог,
/run
если у вас есть соответствующие права на него. В некоторых современных дистрибутивах/tmp
это уже виртуальная файловая система в памяти или символическая ссылка на каталог внутри/run
. Если это ваш случай (вы можете это/etc/fstab
подтвердить или ввестиmtab
), вы можете использовать его/tmp
как временный каталог.Также не путайте статью Debian.
shm_*
Функции используются для создания сегментов общей памяти для межпроцессного взаимодействия. С помощью этих функций вы можете разделить фрагмент памяти между двумя или более процессами, чтобы они могли взаимодействовать или использовать одни и те же данные. Процессы имеют сегмент памяти, связанный в собственном адресном пространстве, и могут читать и записывать туда, как обычно. Ядро имеет дело со сложностью. Эти функции не доступны как функции оболочки (и не очень полезны в контексте оболочки). Для получения дополнительной информации, посмотрите наman 7 shm_overview
. Суть статьи в том, что ни одна программа не должна управлять непосредственно псевдофайлами, представляющими общие сегменты, а вместо этого использовать соответствующие функции для создания, присоединения и удаления сегментов общей памяти.источник
/run
может быть/run/user/${UID}/
.