
No documento do kernel Linux, o conselho POSIX_FADV_RANDOM parece desabilitar o readahead. Mas quando desativo o Readhead usando (sudo hdparm -A 0 /dev/sdb) recebo uma enorme degradação no desempenho; também notei que read(2) parece ser dividido a cada 512k e atua como chamadas separadas (não tenho certeza sobre o motivo, pode ser o setor máximo por solicitação).
Então, qual opção realmente desativa a leitura antecipada? POSIX_FADV_RANDOM também desativa o cache do sistema operacional ou devo adicionar um POSIX_FADV_DONTNEED.
Responder1
POSIX_FADV_RANDOM
desativa a leitura antecipada realizada pelo driver do sistema de arquivos do kernel. Aconselha a camada do sistema de arquivos a não ler mais do que foi solicitado. A leitura antecipada é feita no nível do arquivo: a camada do sistema de arquivos pode buscar dados extras do mesmo arquivo, mas não fará isso (muito) se você especificar POSIX_FADV_RANDOM
.
hdparm -A 0
leitura antecipada desabilitada realizada pelo próprio disco. Ele avisa ao disco que quando você lê um setor, ele não deve armazenar os próximos setores em seu cache interno.
Ambos desabilitam a leitura antecipada, mas em uma camada diferente do sistema.
POSIX_FADV_RANDOM
apenas desativa a pré-busca. Defina uma região para POSIX_FADV_DONTNEED
se não quiser que ela seja armazenada em cache (ou se quiser que ela seja removida do cache).