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_readahead
e 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.