Como determinar se os dados são gravados no disco ou armazenados em cache?

4

Estou aprendendo chamadas de operação de arquivos no Linux. As funções read() e write() e muitas outras usam o cache para aumentar o desempenho, e eu sei que fsync() pode transferir dados do cache para o dispositivo de disco.

No entanto, existem comandos ou chamadas de sistema que podem determinar se os dados estão armazenados em cache ou gravados no disco?

    
por Krist Pan 07.03.2015 / 03:56

2 respostas

3

Os dados de leitura são (diretamente) lidos do cache apenas se já estiverem lá. Isso implica que os dados em cache foram acessados anteriormente por um processo e mantidos em cache. Não há nenhuma chamada de sistema ou qualquer método para um processo saber se algum dado a ser lido já está no cache ou não.

Por outro lado, um processo pode selecionar se deseja que os dados gravados sejam armazenados imediatamente no disco ou somente após um atraso variável, que é o caso geral. Isso é feito usando o sinalizador O_SYNC ao abrir o arquivo.

Existe também o sinalizador O_DIRECT que, quando suportado, força todos os I / Os a contornar o cache de leitura e gravação e vai diretamente para o disco.

Por fim, o próprio disco rígido é livre para implementar seu próprio cache, assim, mesmo depois que uma chamada de gravação síncrona tiver retornado, não há dados de garantia já existentes nos discos.

    
por 07.03.2015 / 21:35
1

fsync já faz isso para o arquivo em questão (escrever no disco), mas isso não garante isso para o diretório. Isso requer uma chamada extra por fsync.

    
por 07.03.2015 / 23:24