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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top