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/shm
et 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/shm
directement. 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?
/tmp
dans la mémoire partagée./tmp
c'est plus sémantique. Si vos utilisateurs ont suffisamment de RAM pour utiliser/dev/shm
des 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/tmp
système de fichiers. En d'autres termes,/tmp
est plus ajustable.Réponses:
Il est tout à fait correct d'utiliser un répertoire
/run
tant que vous disposez des droits appropriés. Dans certaines distributions modernes, il/tmp
existe 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/fstab
ou tapermtab
), vous pouvez l'utiliser/tmp
comme 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, consultezman 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.la source
/run
- dessous pourrait être/run/user/${UID}/
.