використовувати `/ run / shm` (раніше` / dev / shm`) як тимчасовий каталог


9

Чи є хорошою практикою створювати каталог /run/shm(раніше /dev/shm) і використовувати його, як тимчасовий каталог для програми?

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

Досліджуючи ram-диск, я натрапив на запитання, у якому відповів, що добре створити каталог /dev/shmі використовувати його, як тимчасовий каталог. Досліджуючи ще кілька, проте я натрапив на сторінку wiki з debian, заявивши, що це помилка /dev/shmбезпосередньо використовувати . Я повинен використовувати shm_*функції. На жаль, shm_*функції, здається, недоступні для використання в сценарії оболонки.

Тепер я розгублений. Це добре чи не використовувати /run/shm(раніше /dev/shm) як тимчасовий каталог?


Так, багато користувачів також вмонтовуються /tmpв спільну пам'ять.
Eddy_Em

Я б міг уявити, що /tmpце більш смислово. Якщо у ваших користувачів достатньо оперативної пам’яті для використання /dev/shmтимчасових файлів для прискорення роботи, вони зможуть встановити її там. Але якщо у них не вистачає оперативної пам’яті, а встановлення його там уповільнює роботу комп'ютера, змушуючи всі процеси використовувати файли свопу, тоді вони зберігають свій оперативної пам’яті для більш важливих речей і використовують звичайний дисковий простір для /tmpфайлової системи. Іншими словами, /tmpє більш налаштованим.
Джек

Відповіді:


10

Цілком нормально використовувати якийсь каталог /run, якщо у вас є відповідні права на нього. У деяких сучасних дистрибутивах - /tmpце вже віртуальна файлова система в пам'яті або символьне посилання на каталог всередині /run. Якщо це ваш випадок (ви можете це зареєструвати /etc/fstabабо ввести mtab), ви можете використовувати його /tmpяк тимчасовий каталог.

Крім того, не плутайте зі статтею Debian. shm_*функції використовуються для створення сегментів спільної пам'яті для міжпроцесорної комунікації. За допомогою цих функцій ви можете поділити фрагмент пам'яті між двома або більше процесами, щоб вони могли спілкуватися або співпрацювати за допомогою одних і тих же даних. Процеси мають сегмент пам'яті, приєднаний у власному адресному просторі, і вони можуть читати і записувати там, як зазвичай. Ядро має справу зі складністю. Ці функції недоступні як функції оболонки (і не будуть дуже корисні в контексті оболонки). Для отримання додаткової інформації погляньте man 7 shm_overview. Суть статті полягає в тому, що жодна програма не повинна безпосередньо керувати псевдофайлами, що представляють спільні сегменти, а натомість використовувати відповідні функції для створення, приєднання та видалення сегментів спільної пам'яті.


2
Найбільш підходяще місце /runможе бути нижче /run/user/${UID}/.
Пол Фенні

1
Дійсно, у моїй системі pulseaudio та systemd встановлюють деякі файли, такі як pid-файл. Однак / tmp все одно буде моїм кращим місцем розташування тимчасових файлів.
lgeorget

2
@PaulFenney: / run / user / $ UID також відомий як $ XDG_RUNTIME_DIR
user2394284
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.