O Linux lê adiante quando leituras simultâneas são feitas no mesmo arquivo

O Linux lê adiante quando leituras simultâneas são feitas no mesmo arquivo

O Linux executa readaheads (especificados em /sys/block//queue/read_ahead_kb) quando um arquivo é lido sequencialmente.

SO interessado: Red Hat Linux Sistema de arquivos interessado: xfs, ext4

Quais são os critérios para decidir se uma leitura sequencial é feita?Considere várias leituras simultâneas feitas no mesmo arquivo usando pread (https://man7.org/linux/man-pages/man2/pwrite.2.html) com FDs iguais ou diferentes.

por exemplo

Mesmo FD. lê nas posições 10-20-30-78-89 (de leituras sequenciais) -40-50-60-70 - 23-34 (de leituras sequenciais) - 80-90-100...

As leituras sutis fora de sequência acima poderiam evitar leituras antecipadas neste caso?

Em caso afirmativo, o uso de dois FDs diferentes resolveria esse problema (ou seja, um FD separado usado para leituras em 78-89-23-34)? (ou seja, os readaheads acontecerão normalmente para leituras 10-20-30-40-50)

Responder1

As leituras sutis fora de sequência acima podem evitar leituras antecipadas neste caso?

Sim, leituras fora de sequência do mesmo descritor de arquivo podem afetar readaheads, mas o kernel tenta levar isso em consideração - pelo menos para pequenas leituras “aleatórias” em paralelo com leituras sequenciais. Vera descrição do design de leitura antecipada sob demanda, em particular:

Em leituras sequenciais intercaladas, fluxos simultâneos no mesmo fd podem invalidar o estado readahead um do outro. Portanto, sinalizamos a nova página readahead em (start+size-async_size) com PG_readahead e a usamos como indicador readahead. O sinalizador não será definido em páginas já armazenadas em cache, para evitar a confusão de leitura antecipada, economizando pesquisas inúteis no cache de páginas.

Você pode ver onde isso se encaixa olhando paraondemand_readahead, em particularseu chamado paratry_context_readaheade os comentários ao redor.

Como sempre, ao tentar remover gargalos de desempenho, você não deve levar em conta possíveis gargalos, exceto como dicas: você deve criar seus próprios benchmarks e analisar as características de desempenho de seus cenários específicos. Pode ser o caso, por exemplo, de que suas leituras fora de sequência leiam apenas páginas de ocorrências que já estão no cache de páginas como resultado de leitura antecipada em suas leituras sequenciais.

informação relacionada