utiliser `/ run / shm` (anciennement` / dev / shm`) comme répertoire temporaire

9

Est-ce une bonne pratique de créer un répertoire dans /run/shm(anciennement /dev/shm) et de l'utiliser comme un répertoire temporaire pour une application?

Contexte: J'écris des tests de boîte noire pour un programme qui fait beaucoup de choses avec des fichiers et des répertoires. Pour chaque test, je crée un grand nombre de fichiers et de répertoires, puis j'exécute le programme, puis je crée l'ensemble de fichiers et de répertoires attendu, puis j'exécute diff pour comparer. J'ai maintenant environ 40 tests et ils prennent déjà plus de 2 secondes à courir. En espérant accélérer les choses, je veux exécuter les tests dans un répertoire sur une sorte de disque virtuel.

En recherchant sur le disque RAM, je suis tombé sur une question avec une réponse indiquant qu'il est correct de créer un répertoire /dev/shmet de l'utiliser comme un répertoire temporaire. En recherchant un peu plus, je suis tombé sur une page wiki de Debian déclarant que c'est une erreur à utiliser /dev/shmdirectement. Je devrais utiliser les shm_*fonctions. Malheureusement, les shm_*fonctions ne semblent pas disponibles pour une utilisation dans un script shell.

Maintenant je suis confus. Est-il correct ou non d'utiliser /run/shm(anciennement /dev/shm) comme un répertoire temporaire?

lesmana
la source
Oui, de nombreux utilisateurs se montent également /tmpdans la mémoire partagée.
Eddy_Em
J'imagine que /tmpc'est plus sémantique. Si vos utilisateurs ont suffisamment de RAM pour utiliser /dev/shmdes fichiers temporaires pour accélérer les choses, ils le monteront là-bas. Mais s'ils n'ont pas assez de RAM, et le monter ralentit leur ordinateur en forçant tous les processus à utiliser des fichiers d'échange, ils enregistreront leur RAM pour des choses plus importantes et utiliseront l'espace disque ordinaire pour le /tmpsystème de fichiers. En d'autres termes, /tmpest plus ajustable.
Jack

Réponses:

10

Il est tout à fait correct d'utiliser un répertoire /runtant que vous disposez des droits appropriés. Dans certaines distributions modernes, il /tmpexiste déjà un système de fichiers virtuel en mémoire ou un lien symbolique vers un répertoire à l'intérieur /run. Si tel est votre cas (vous pouvez le vérifier /etc/fstabou taper mtab), vous pouvez l'utiliser /tmpcomme répertoire temporaire.

Ne vous confondez pas non plus avec l'article de Debian. shm_*Les fonctions sont utilisées pour créer des segments de mémoire partagée pour la communication inter-processus. Avec ces fonctions, vous pouvez partager un fragment de mémoire entre deux ou plusieurs processus pour les faire communiquer ou collaborer en utilisant les mêmes données. Les processus ont le segment de mémoire attaché dans leur propre espace d'adressage et peuvent y lire et écrire comme d'habitude. Le noyau gère la complexité. Ces fonctions ne sont pas disponibles en tant que fonctions shell (et ne seraient pas très utiles dans un contexte shell). Pour plus d'informations, consultez man 7 shm_overview. Le point de l'article est qu'aucun programme ne doit gérer directement les pseudo-fichiers représentant des segments partagés, mais utiliser à la place les fonctions appropriées pour créer, attacher et supprimer des segments de mémoire partagée.

lgeorget
la source
2
L'endroit le plus approprié ci /run- dessous pourrait être /run/user/${UID}/.
Paul Fenney
1
En effet, sur mon système, pulseaudio et systemd y installent des fichiers comme le fichier pid. Cependant, / tmp serait toujours mon emplacement préféré pour les fichiers temporaires.
lgeorget
2
@PaulFenney: / run / user / $ UID est également connu sous le nom de $ XDG_RUNTIME_DIR
user2394284