É possível no linux desabilitar o cache do sistema de arquivos para arquivos específicos?

1

Eu tenho alguns arquivos grandes e estou ok com eles sendo lidos na capacidade de E / S de disco. Desejo ter o cache do sistema de arquivos livre para outros arquivos. É possível desativar o armazenamento em cache do sistema de arquivos para arquivos específicos no Linux? Eu quero fazer isso programaticamente via lib + java.

    
por Urvishsinh Mahida 21.06.2018 / 01:06

2 respostas

2

Você está procurando seu equivalente em Java do sinal O_DIRECT para open(2) . Consulte o link

    
por 21.06.2018 / 01:14
2

Você pode fazer isso para uma instância aberta do arquivo, mas não persistentemente para o arquivo em si. Você faz isso por instância do arquivo aberto usando o IO direto. Não sei como fazer isso em Java, mas em C e C ++, você passa o sinal O_DIRECT para a chamada open() .

Observe, no entanto, que isso tem algumas implicações potencialmente problemáticas, a saber:

  • É extremamente perigoso em determinados sistemas de arquivos. Mais notavelmente, as versões atuais do BTRFS têm sérios problemas com o IO direto quando você está gravando no arquivo.
  • Você não pode misturar o E / S direto com a E / S armazenada em cache, a menos que você use alguma forma de sincronização. As gravações em cache não serão exibidas com certeza para direcionar as leituras de E / S até você chamar fsync() ou fdatasync() e as gravações diretas de E / S talvez não sejam exibidas para as leituras de E / S em cache sempre .

Existe, no entanto, um método alternativo se você puder tolerar ter os dados temporariamente no cache. Você pode usar a interface POSIX fadvise (através da chamada do sistema posix_fadvise no Linux) para informar ao kernel que você não precisa de dados do arquivo quando terminar de lê-lo. Usando o sinalizador POSIX_FADV_DONTNEED , você pode dizer ao kernel para soltar uma região específica de um determinado arquivo do cache. Você pode realmente fazer isso enquanto está processando o arquivo também (lendo um trecho e, em seguida, imediatamente após a leitura chamando posix_fadvise nessa região do arquivo), embora as regiões para as quais você chama isso tenham que ser alinhadas à página do sistema Tamanho. Este é geralmente o método portátil preferido para lidar com as coisas, já que funciona em qualquer sistema compatível com POSIX com extensões em tempo real (que é praticamente qualquer sistema compatível com POSIX).

    
por 21.06.2018 / 21:37