Limpar seletivamente o cache / buffers

1

É possível limpar seletivamente o conteúdo de um determinado sistema de arquivos, ou arquivo / diretório dentro de um sistema de arquivos, no Linux.

Isso pode ser feito globalmente com sync; echo 3 > /proc/sys/vm/drop_caches e para um sistema de arquivos inteiro, temporariamente, desmontando-o e remontando-o, mas não encontrei uma opção mais refinada.

Por que eu iria querer isso? Se houvesse um monte de blocos armazenados em cache devido a E / S de um processo que será repetido mais tarde e, em seguida, executar uma tarefa única (ou regular, mas não frequente) que resulta em um bloco de dados sendo armazenado em cache ( mas não o suficiente para empurrar o primeiro lote para fora), eu gostaria de dizer ao kernel que não me importo mais com o segundo lote de blocos, de modo que se um terceiro pedaço de E / S ocorrer, ele será removido e não o primeiro lote que foi carregado do disco - para que a tarefa de repetição rápida não seja retardada na próxima execução devido à tarefa única.

Como alternativa, existe uma maneira de iniciar um processo de modo a dizer ao kernel que "isto é um problema, não faça de tudo para armazenar em cache o que ele toca depois de terminar".

Isso, é claro, pode ser que eu queira perder tempo gerenciando micro algo que eu deveria deixar bem e deixar o kernel continuar sem interferências ...

    
por David Spillett 04.07.2010 / 22:32

2 respostas

1

A chamada do sistema para isso no Linux é fadvise onde você pode sugerir que arquivos diferentes sejam armazenados em cache ou não armazenados em cache e também sugerir o tipo de padrão de leitura (isto é, seqüencial ou aleatório). Alguém escreveu um wrapper de linha de comando para isso em perl aqui . As duas opções em que você está interessado são:

-dontneed
        Announces the expectation that file content won't be needed in
        the near future.

        Under Linux 2.6.9, this is known to cause the file content to be
        evicted from the buffer-cache immediately.

        Note that this option first causes an fsync of the file.

-noreuse
        Announces the expectation that file content won't be reused in
        the near future.
    
por 05.07.2010 / 14:14
1

Por que você faria isso? Você provavelmente desejará os dados armazenados em cache durante a execução. Uma vez que a execução é feita, os dados armazenados em cache ficarão sem memória, à medida que novas solicitações chegarem. Nesse meio tempo, ela ficará na memória de outra forma não utilizada.

Fazer E / S bruta provavelmente manterá o armazenamento em buffer no cache interno das unidades. Isso pode resultar em diminuição do desempenho do aplicativo, à medida que você solta o cache de O / S e a velocidade subseqüente. Quando comecei a me preocupar com a velocidade de acesso relativo, era da ordem de 100/1 em favor da memória. O benefício do armazenamento em cache versus E / S vem aumentando constantemente desde então.

Todas as considerações de segurança são discutíveis, pois a imagem do disco provavelmente estará disponível.

    
por 05.07.2010 / 01:48

Tags