O arquivo de monitoramento lê o aquecimento de cache

2

Depois de adicionar mais memória à minha máquina Linux, fiquei tentado a usar o cache mais agressivamente.

A coisa é: eu inicializo minha máquina, vou ao banheiro, volto e faço o login. Demora meio minuto para entrar. Então eu começo o firefox e de novo leva algum tempo. Quando eu entro e volto, todas essas coisas acontecem em segundos, porque o cache está quente então. Então eu pensei: como eu posso ensinar minha máquina a colocar todos esses arquivos no cache enquanto eu estou no banheiro.

Eu olhei para o pré-carregamento e achei os resultados um pouco decepcionantes. A causa disto parece ser que ele monitora apenas arquivos mmap () ed e não arquivos que são lidos por meio de read ().

Eu suspeito que isso seja porque os arquivos mmap () ed são mais fáceis de serem observados. Quando um arquivo mmap () sa de aplicativo permanece na memória por algum tempo, enquanto open () - read () - close () pode acontecer em uma fração de segundo (corrija-me se estiver errado).

Parece não haver uma maneira simples de ser notificado quando um arquivo é lido. Há inotificância, mas requer o registro de diretórios e o IIRC corretamente, não se destina a monitorar sistemas de arquivos inteiros.

Idealmente, eu gostaria de ter um dispositivo em / dev (como um tty) do qual eu possa ler os nomes de arquivos dos quais algumas aplicações leem.

(1) Existe algo assim disponível?

(2) Existem razões pelas quais isso é difícil?

Se eu tivesse informações sobre o acréscimo de arquivos de leitura, poderia aquecer facilmente o cache durante a inicialização.

    
por Martin Drautzburg 27.08.2013 / 15:42

1 resposta

0

Em relação ao armazenamento em cache de read chamadas do sistema:

A chamada do sistema read pode ser aplicada em um grande número de tipos de soquete. Portanto, não há lógica de cache para o próprio read . No entanto, se você executar operações de E / S em um sistema de arquivos, o próprio sistema de arquivos poderá suportar técnicas de armazenamento em cache, mas isso dependerá do sistema de arquivos.

Isso é diferente de mmap , porque mmap é feito especificamente para mapear grandes arquivos na memória e operá-los. Se você fizer isso, talvez valha a pena considerar o uso de mmap em vez de read .

Com relação à segunda parte do seu post, onde você diz que gostaria de obter uma lista de arquivos dos quais um aplicativo ou processo definido está lendo:

Não sei como você pode obter esse tipo de dado em um arquivo de dispositivo em /dev . Mas, usando o System Tap, deve ser fácil criar um módulo do kernel que imprima todos os argumentos para read ou open chamadas do sistema que um processo definido está fazendo no dmesg. Então você poderia adicionar algo como um prefixo pré-definido a esta saída, então se você fizer dmesg | grep <prefix> você obteria toda a saída deste módulo do kernel da mesma forma que você descreve você gostaria de um /dev device.

Observe que isso não deve ser usado na produção, mas apenas para fins de depuração ou outros fins de não produção.

Este é um bom guia sobre o básico do System Tap, depois de aprender você deve ser capaz de criar um script System Tap que requer apenas o nome de um executável ou o PID de um processo como entrada. Isso poderia imprimir os argumentos para todas as chamadas de sistema read ou open que vêm de um determinado processo ou aplicativo para o seu dmesg:

link

    
por 27.08.2013 / 15:59