As leituras regulares se beneficiam do mmap?

0

Se eu usar o mmap em algum descritor de arquivo fd, chamadas regulares para read () estarão "cientes" de que existe um mapeamento de memória do arquivo e lido diretamente da memória?

E se mlock () for usado depois de mmap (). É correto dizer que nenhuma leitura () subseqüente no arquivo precisará acessar o disco?

    
por ElefEnt 18.02.2017 / 01:36

1 resposta

2

Eu acho que depende do que você entende por "ciente".

Na medida em que a chamada de sistema read() s é uma solicitação ao kernel para copiar o conteúdo de um arquivo que inicia na posição atual para o buffer de memória designado pelo programa, read() em um arquivo regular executará a mesma tarefa forma ou não existe simultaneamente um mapeamento de memória do arquivo. Não há "consciência".

Agora, o arquivo é mmap() ed e read() , pode haver uma otimização de desempenho a ser alcançada. Por exemplo, se o arquivo for read() primeiro, as seções do arquivo que foram lidas provavelmente já estarão no cache de páginas e, posteriormente, o acesso ao mapeamento de memória não precisará acessá-las novamente a partir do disco. Ou, inversamente, se houver um mapeamento de memória que já tenha sido paginado, um read() subseqüente não precisará ir para o disco novamente. Então, nesse sentido, você pode, de alguma forma, considerar os mmap() e read() "conscientes" um do outro.

    
por 18.02.2017 / 01:42