É uma boa prática criar um diretório /run/shm
(anteriormente /dev/shm
) e usá-lo como um diretório temporário para um aplicativo?
Antecedentes: estou escrevendo testes de caixa preta para um programa que faz muitas coisas com arquivos e diretórios. Para cada teste, crio muitos arquivos e diretórios e, em seguida, executo o programa, crio o conjunto esperado de arquivos e diretórios e, em seguida, executo o diff para comparar. Agora tenho cerca de 40 testes e eles já estão demorando mais de 2 segundos para serem executados. Na esperança de acelerar as coisas, eu quero executar os testes em um diretório em algum tipo de ramdisk.
Pesquisando sobre o disco ram, me deparei com uma pergunta com uma resposta afirmando que não há problema em criar um diretório /dev/shm
e usá-lo como um diretório temporário. Pesquisando um pouco mais, no entanto, me deparei com uma página wiki do debian, afirmando que é um erro usar /dev/shm
diretamente. Eu deveria usar as shm_*
funções. Infelizmente, as shm_*
funções parecem não estar disponíveis para uso em um script de shell.
Agora eu estou confuso. Está tudo bem ou não usar /run/shm
(anteriormente /dev/shm
) como um diretório temporário?
fonte
/tmp
na memória compartilhada./tmp
é mais semântico. Se seus usuários tiverem RAM suficiente para usar/dev/shm
arquivos temporários para acelerar as coisas, eles o montarão lá. Mas se eles não tiverem RAM suficiente, e montá-lo lá diminui a velocidade do computador, forçando todos os processos a usarem arquivos de troca, eles salvarão seu RAM para coisas mais importantes e usarão espaço em disco comum para o/tmp
sistema de arquivos. Em outras palavras,/tmp
é mais sintonizável.Respostas:
Não há problema em usar algum diretório
/run
desde que você tenha os direitos apropriados. Em algumas distribuições modernas,/tmp
já existe um sistema de arquivos virtual na memória ou um link simbólico para um diretório interno/run
. Se esse for o seu caso (você pode verificar/etc/fstab
ou digitarmtab
), você pode usar/tmp
como seu diretório temporário.Além disso, não se confunda com o artigo do Debian.
shm_*
As funções são usadas para criar segmentos de memória compartilhada para a comunicação entre processos. Com essas funções, você pode compartilhar um fragmento de memória entre dois ou mais processos para que eles se comuniquem ou colaborem usando os mesmos dados. Os processos têm o segmento de memória anexado em seu próprio espaço de endereço e podem ler e gravar nele como de costume. O kernel lida com a complexidade. Essas funções não estão disponíveis como funções de shell (e não seriam muito úteis em um contexto de shell). Para mais informações, dê uma olhadaman 7 shm_overview
. O objetivo do artigo é que nenhum programa deve gerenciar diretamente os pseudo-arquivos que representam segmentos compartilhados, mas usar as funções apropriadas para criar, anexar e excluir segmentos de memória compartilhada.fonte
/run
pode ser/run/user/${UID}/
.