Se eu chamar cat /dev/null duas vezes consecutivas em um arquivo, a segunda chamada será autônoma?

StackOverflow https://stackoverflow.com/questions/6088169

  •  09-09-2020
  •  | 
  •  

Pergunta

Eu quero usar cat filepath > /dev/null como um mecanismo barato de cache de memória.O que estou pensando é:Se eu chamar isso pela segunda vez, e o arquivo já está no cache do disco, o sistema operacional é inteligente o suficiente para não fazer nada?

Atualizar:Eu testei isso em um volume CIFS, usando o FADVISE POSIX_FADV_WILLNEED para armazenar o arquivo localmente (usando Linux-Ftools na linha de comando).Acontece que o volume precisa ser montado no modo de leitura e gravação para que isso funcione.No modo somente leitura, o FadVise parece ser ignorado.Isso deve ter algo a ver com o mecanismo de opplock samba.

Foi útil?

Solução

É melhor posix_fadvise(...,POSIX_FADV_WILLNEED) do que cat o arquivo para /dev/null - requer menos IO real e não precisa que o conteúdo do arquivo seja lido na memória RAM do usuário, destruindo caches da CPU.

Além disso, se a parte relevante do arquivo já estiver no cache, o posix_fadvise provavelmente fará muito menos trabalho do que cat file > /dev/null

Se você acha que realmente precisa que as páginas sejam no núcleo agora há pouco, então mmap a seção relevante do arquivo e mlock (desbloqueie-o depois;ele pode ser descartado imediatamente se a pressão da memória for forte).Isso precisa de privilégios de root.

Em geral, fazer esse tipo de coisa é uma pessimização e, no entanto, deve ser evitado.Forçar o kernel a se comportar como você deseja pode reduzir sua capacidade de otimizar a carga de trabalho real agora.

Outras dicas

Não, e não pode.

Determinar se um programa não fará nada geralmente é mais complexo do que apenas executá-lo.

Por que você precisa controlar o cache da memória?Se for absolutamente necessário, considere usar um sistema de arquivos tmpfs ou compcache (um dispositivo de bloco de RAM compactado)

Não vai servir nada, como as outras respostas disseram.Mas se o que você realmente quis dizer foi:

Se eu chamar uma segunda vez, e o arquivo já está no cache do disco, o sistema operacional é inteligente o suficiente para Não leu no disco uma segunda vez?

...então a resposta é sim1.Afinal, é assim que funciona o cache de disco.


1.Desde que o sistema de arquivos em questão use o cache de páginas.

Será rápido como o inferno, mas não será autônomo (se fosse, haveria razões legítimas para os syscalls fazerem coisas inesperadas em vez das funções prometidas...).No entanto, dependendo do driver do sistema de arquivos usado e das opções do kernel, você pode estar executando perto da largura de banda da memória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top