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: