Manter um arquivo no buffer do bloco OS
-
02-07-2019 - |
Pergunta
Eu preciso manter o máximo que puder de um grande arquivo no cache bloco de sistema operacional, mesmo que seja maior do que eu pode caber na RAM, e eu estou continuamente ler outro arquivo muito grande. ATM eu vou remover grande parte do grande arquivo importante do cache do sistema durante a transmissão forma Ler outro arquivo.
Solução
Em um sistema POSIX como o Linux ou Solaris, tente usar posix_fadvise.
No arquivo de streaming, fazer algo como isto:
posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
bytes = pread(fd, buffer, 64 * 1024, current_pos);
current_pos += 64 * 1024;
posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}
E você pode aplicar POSIX_FADV_WILLNEED para o outro arquivo, que deve aumentar sua prioridade memória.
Agora, eu sei que o Windows Vista e Server 2008 também pode fazer truques bacanas com as prioridades de memória. provavelmente versões mais antigas, como XP pode fazer truques mais básicos também. Mas eu não sei as funções fora do topo da minha cabeça e não tem tempo de procurá-los.
Outras dicas
Dentro linux, você pode montar um sistema de arquivos como o tipo tmpfs , que usa memória swap disponível como apoio, se necessário. Você deve ser capaz de criar um maior sistema de arquivos do que o tamanho da memória e vai priorizar o conteúdo desse sistema de arquivos no cache do sistema.
mount -t tmpfs none /mnt/point
Veja: http://lxr.linux.no/linux/Documentation /filesystems/tmpfs.txt
Você também pode beneficiar da swapiness
arquivos e drop_cache
dentro /proc/sys/vm
Se você estiver usando o Windows, considere abrir o arquivo que está a digitalizar através com a bandeira
FILE_FLAG_SEQUENTIAL_SCAN
Você também pode usar
FILE_FLAG_NO_BUFFERING
para esse arquivo, mas impõe algumas restrições sobre o tamanho de leitura e tampão alinhamento.
Alguns sistemas operacionais têm ramdisks que você pode usar para anular um segmento de memória RAM para o armazenamento e depois montá-lo como um sistema de arquivos.
O que eu não entendo, porém, é por isso que você quer manter o sistema operacional do cache do arquivo. Sua pergunta completo não faz muito sentido para mim.
Comprar mais RAM (que é relativamente barato!) Ou deixar que o sistema operacional fazer a sua coisa. Eu acho que você verá que contornar o OS vai ser mais problema do que vale a pena. O sistema operacional irá armazenar em cache o máximo do arquivo conforme necessário, até que o seu ou qualquer outro aplicativo precisa de memória.
Eu acho que você poderia minimizar o número de processos, mas é provavelmente mais rápido para comprar mais memória.
mlock () e mlockall () parte respectivamente de bloqueio ou a totalidade do espaço de endereço virtual do processo de chamada para a RAM, impedindo que a memória de ser paginada para a área de swap.
(copiado do (2) página homem MLOCK Linux)