Você está procurando seu equivalente em Java do sinal O_DIRECT
para open(2)
. Consulte o link
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.
Você está procurando seu equivalente em Java do sinal O_DIRECT
para open(2)
. Consulte o link
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:
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).
Tags cache filesystems