Dizer ao kernel do Linux para colocar um arquivo no cache de disco?

3

Existe algum comando para que um arquivo seja lido e carregado no cache de disco do Linux? Isso está em um sistema debian atualizado.

Eu sei que no caso geral, é melhor deixar o kernel do linux descobrir isso. Mas eu tenho um caso de ponta. Eu tenho um laptop que tem um diretor NFS montado, e eu quero jogar um arquivo de vídeo longo, mas eu não quero ter um problema de rede interromper o playnig. Eu sei que o arquivo (grande) será lido em sua totalidade mais adiante. Eu sei que nada mais (realmente) será executado enquanto estiver jogando este vídeo. Há memória livre suficiente para armazenar este arquivo.

(Eu sei que eu poderia simplesmente copiar o arquivo em um novo sistema de arquivos tmpfs, mas estou curioso para saber se existe uma maneira ainda mais curta de fazê-lo)

    
por Rory 10.07.2012 / 11:14

2 respostas

5

Um pequeno programa que mmap() ed o arquivo com a MAP_LOCKED flag set faria o truque. Você precisará executar este programa como root ou um usuário com um valor RLIMIT_MEMLOCK maior que o tamanho do arquivo que você deseja mapear.

Como SaveTheRbtz mencionou, vmtouch tem esse recurso embutido. A manpage sugere que vmtouch -l /some/file fará o truque.

    
por 10.07.2012 / 11:43
3

Se você realmente controlar o ambiente local de forma estrita, um simples cat $ file > / dev / null deve ser suficiente. É bastante não-determinístico, quando o despejo de cache remove esse arquivo - mas se você tem muita memória RAM e ninguém a consome, deve ser mantido.

Se houver uma maneira persistente e determinante de manter um arquivo no cache - dunno ...

    
por 10.07.2012 / 11:20