Encontrar / ls cache


10

Parece que a primeira vez que corro findou lsem um diretório leva um tempo para trabalhar. Porém, a cada vez que passa, é rápido, como se uma lista do conteúdo do diretório tivesse sido armazenada em cache ou indexada em algum lugar.

Existe uma maneira de preservar esse cache nas reinicializações do computador?


1
É de fato armazenado em cache. O Linux usa memória não utilizada como cache e buffers (esse é um motivo para você sempre ter alguma troca, mesmo com RAM "suficiente"). O comando livre mostra quanto está disponível. Não sei se há muito sentido em fazer cache entre as reinicializações, muito pode mudar entre as inicializações. Que tal fazer um cron-job ser executado com a menor prioridade a cada 10,30 minutos, para simplesmente passar por todos os seus arquivos? Deve manter o cache relativamente atualizado o tempo todo. Também pense que existe uma maneira (para o kernel) de detectar alterações no arquivo.
Baard Kopperud

Respostas:


8

Você pode usar o vmtouch para adicionar arquivos ao cache da página (cache do disco).

Coloque nohup vmtouch -dl <files or directories> &seu /etc/rc.localarquivo para adicionar e bloquear arquivos no cache da página durante a inicialização. Se você deseja adicionar arquivos ao cache da página, mas não deseja bloqueá-los na memória, use o -tsinalizador em vez dos -ldsinalizadores.

Para obter mais informações sobre o cache da página, consulte aqui , aqui e na wikipedia .


Esse comando não parece disponível no Ubuntu - existe uma alternativa que eu possa tentar?
Richard

@ Richard É muito fácil compilar o vmtouch: instale o build-essentialpacote. Download vmtouch.c. Execute gcc -O2 -o vmtouch vmtouch.cor make vmtouche você obtém o binário vmtouchque você pode copiar, por exemplo, /usr/local/binou chamar ./vmotouch.
Jofel

@ Richard Eu não uso o Ubuntu, então não testei isso e não me responsabilizo, mas pesquisando no Google Ubuntu mvtouch trouxe esse ppa .
terdon

@ jofel, sim, foi fácil o suficiente para compilar - obrigado. Eu apenas prefiro usar pacotes quando possível.
Richard

@Evan, corrija-me se estiver errado, mas não usaria vmtouchcomo um comando de inicialização retardar o trabalho inteiro? Minha esperança era preservar um cache através das botas em vez de (caro) regenerá-lo a cada vez.
Richard

2

"Preservar através de reinicializações", duvido. Mas você pode reconstruir trivialmente o cache na inicialização, o que realiza quase a mesma coisa menos um pequeno atraso.

Crie um arquivo /etc/cron.d/rebuild-fs-cachee coloque o seguinte:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Isso usa nicee ionice(que deve ser instalado por padrão e definitivamente estar disponível através do gerenciador de pacotes; o Debian os coloca coreutilse util-linux, respectivamente) para diminuir a prioridade do findprocesso aos níveis mais agradáveis ​​possíveis, o que significa que não deve interferir em mais nada em execução no sistema, mas levará um pouco mais de tempo para concluir. findele mesmo passará e stat()tudo, o que força o kernel a carregar os dados do sistema de arquivos do disco na memória.

Depois que o cache for construído, desde que não seja eliminado porque o sistema operacional precisa da memória para outra coisa, ele deve ser mantido. Eu tenho usado isso por um tempo e as listagens de diretório, mesmo em diretórios grandes, são significativamente mais rápidas do que sem o trabalho cron acima, embora eu não possa citar nenhum número exato.


1
Se você estiver indo para reinventar a roda, assim como você pode usar locate, que vem com updatedbatualizar um banco de dados localizar: en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@laebshade Eu não uso locatenada, mas uso lsmuito. E ocasionalmente find. (Além disso, find e ls são os comandos específicos sobre os quais o OP pergunta.) O objetivo de usar findaqui é que ele itera sobre tudo no armazenamento chamando stat (), para que o kernel precise carregar os metadados na memória. Uma vez lá, é tão bom como se estivesse armazenado em uma reinicialização.
um CVn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.