Cache de buffer artificialmente primário?

3

É benéfico preparar artificialmente o cache do buffer ao lidar com arquivos maiores?

Aqui está um cenário: um arquivo grande precisa ser processado, linha por linha. Conceitualmente, é fácil paralelizar a tarefa para saturar uma máquina com vários núcleos. No entanto, como as linhas precisam ser lidas primeiro (antes de distribuí-las aos trabalhadores round-robin), o processo geral torna-se vinculado a E / S e, portanto, mais lento.

É razoável ler todas ou algumas partes do arquivo no cache do buffer antecipadamente para ter tempos de leitura mais rápidos, quando o processamento real ocorre?

Atualização: eu escrevi um pequeno front-end para a chamada de sistema readahead . Tentando adicionar algum benchmark mais tarde ...

    
por miku 17.07.2014 / 09:40

1 resposta

0

Para preparar o cache com um arquivo inteiro:

cat big.file >/dev/null

Para preparar o cache com uma parte de um arquivo, conforme este comentário :

time dd if=big.file of=/dev/null bs=1024k count=XXX skip=YYY

Exemplo de arquivo 2.5G:

$ time rarara big.file 0 2459650481
real    0m13.803s

$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

$ time dd if=big.file of=/dev/null bs=4096 count=600501 skip=0
real    0m14.394s
    
por 17.07.2014 / 14:09