Eu tenho um servidor bastante antigo que possui 4 GB de RAM e está praticamente servindo os mesmos arquivos o dia todo, mas o faz a partir do disco rígido, enquanto 3 GB de RAM são "gratuitos".
Qualquer pessoa que já tenha tentado rodar um drive ram pode testemunhar que é impressionante em termos de velocidade. O uso de memória desse sistema geralmente nunca é superior a 1 GB / 4 GB, então quero saber se existe uma maneira de usar essa memória extra para algo bom.
- É possível dizer ao sistema de arquivos para sempre servir determinados arquivos fora da RAM?
- Existem outros métodos que eu possa usar para melhorar os recursos de leitura de arquivos usando a RAM?
Mais especificamente, não estou procurando um 'hack' aqui. Quero que as chamadas do sistema de arquivos sirvam os arquivos da RAM sem a necessidade de criar uma unidade ram e copiar os arquivos manualmente. Ou pelo menos um script que faça isso por mim.
As aplicações possíveis aqui são:
- Servidores da Web com arquivos estáticos que são lidos muito
- Servidores de aplicativos com grandes bibliotecas
- Computadores de mesa com muita RAM
Alguma ideia?
Editar:
- Achei isso muito informativo: O cache de páginas do Linux e o pdflush
- Como Zan apontou, a memória não é realmente livre. O que quero dizer é que ele não está sendo usado por aplicativos e quero controlar o que deve ser armazenado em cache na memória.
fonte
Respostas:
O vmtouch parece ser uma boa ferramenta para o trabalho.
Luzes:
manual do vmtouch
EDIT: O uso conforme solicitado na pergunta está listado no exemplo 5 na página inicial do vmtouch
EDIT2: Conforme observado nos comentários, agora existe um repositório git disponível.
fonte
vmtouch
se encaixa bem nesse nicho.Isto também é possível usar o vmtouch Toucher memória virtual utilidade .
A ferramenta permite controlar o cache do sistema de arquivos em um sistema Linux. Você pode forçar ou bloquear um arquivo ou diretório específico no subsistema de cache da VM ou usá-lo para verificar quais partes de um arquivo / diretório estão contidas na VM.
Ou...
fonte
O truque de um pobre homem para colocar coisas no cache do sistema de arquivos é simplesmente classificá-lo e redirecioná-lo para / dev / null.
fonte
cat
é o arquivo para / dev / null periodicamenteO Linux armazenará em cache o máximo de E / S de disco na memória possível. É isso que são as estatísticas de cache e memória de buffer. Provavelmente fará um trabalho melhor do que você armazenará as coisas certas.
No entanto, se você insistir em armazenar seus dados na memória, poderá criar uma unidade ram usando tmpfs ou ramfs. A diferença é que o ramfs alocará toda a memória solicitada, pois o tmpfs usará apenas a memória que o seu dispositivo de bloco está usando. Minha memória está um pouco enferrujada, mas você deve conseguir:
ou
e copie seus dados para o diretório Obviamente, quando você desliga a máquina ou desmonta a partição, seus dados serão perdidos.
fonte
Após algumas leituras extensivas sobre os recursos de troca e armazenamento em cache do kernel 2.6, encontrei 'fcoretools'. Que consiste em duas ferramentas;
(Caso alguém ache isso interessante, eu estou postando aqui)
fonte
Existem duas configurações do kernel que podem ajudar consideravelmente, mesmo sem o uso de outras ferramentas:
swappiness
informa ao kernel do linux quão agressivamente deve usar o swap. Citando o artigo da Wikipedia:
vfs_cache_pressure
Citando vm.txt :
Ao definir
swappiness
alto (como 100), o kernel move tudo o que não precisa trocar, liberando RAM para armazenar arquivos em cache. E definindo um valorvfs_cache_pressure
mais baixo (digamos 50, não 0!), Favorecerá o cache de arquivos em vez de manter os dados do aplicativo na RAM.(Eu trabalho em um grande projeto Java e, toda vez que o executo, é preciso muita RAM e liberamos o cache do disco, então na próxima vez que compilei o projeto, tudo foi lido do disco novamente. Ao ajustar essas duas configurações, eu gerencio para manter as fontes e a saída compilada em cache na RAM, o que acelera o processo consideravelmente.)
fonte
Duvido muito que ele esteja realmente servindo arquivos do disco com 3 GB de RAM livre. O cache de arquivos do Linux é muito bom.
Se você estiver vendo E / S de disco, examinarei suas configurações de log. Muitos logs são definidos como sem buffer, para garantir que as informações mais recentes estejam disponíveis no caso de uma falha. Em sistemas que precisam ser rápidos independentemente, use E / S de log em buffer ou use um servidor de log remoto.
fonte
Se você possui bastante memória, pode simplesmente ler os arquivos que deseja armazenar em cache com gato ou similar. O Linux fará um bom trabalho mantendo-o por perto.
fonte
Você poderá ter um programa que apenas
mmap
seus arquivos permanecerão em execução.fonte
Existem vários sistemas ramfs que você pode usar (por exemplo, ramfs, tmpfs), mas, em geral, se os arquivos estão sendo lidos com tanta frequência, eles ficam no cache do sistema de arquivos. Se o seu conjunto de arquivos de trabalho for maior que o seu RAM grátis, os arquivos serão limpos dele - mas se o seu conjunto de trabalho for maior que o seu RAM grátis, também não há como encaixar tudo em um disco ram.
Verifique a saída do comando "free" em um shell - o valor na última coluna, em "Cache", é o quanto de sua ram livre está sendo usado para o cache do sistema de arquivos.
fonte
Quanto à sua última pergunta, verifique se a RAM está em diferentes canais de memória para que o processador possa buscar os dados em paralelo.
fonte
Eu acho que isso pode ser melhor resolvido no nível do aplicativo. Por exemplo, provavelmente existem servidores da Web especializados para isso, ou você pode considerar o mod_cache com o Apache. Se você tem um objetivo específico, como fornecer conteúdo da Web mais rapidamente, pode obter melhorias nesse tipo de coisa que eu acho.
Mas sua pergunta é de natureza geral, o subsistema de memória Linux foi projetado para fornecer o melhor uso geral da RAM. Se você deseja direcionar certos tipos de desempenho, considere procurar tudo em / proc / sys / vm.
O pacote fcoretools é interessante, eu estaria interessado em qualquer artigo sobre sua aplicação ... Este link fala sobre as chamadas de sistema reais usadas em uma aplicação.
fonte
Os computadores desktop (por exemplo, o ubuntu) já usam arquivos de pré-carregamento (pelo menos, bibliotecas compartilhadas populares) na memória durante a inicialização. É usado para acelerar o tempo de inicialização e inicialização de diferentes bloarware, como FF, OO, KDE e GNOME (com evolução bloat-mailer).
A ferramenta é chamada readahead http://packages.ubuntu.com/dapper/admin/readahead
Também há syscall correspondente: readahead (2) http://linux.die.net/man/2/readahead
Há também um projeto de daemon de pré-carregamento: http://linux.die.net/man/8/preload
fonte
http://www.coker.com.au/memlockd/ faz isso
embora você realmente não precise dele, o linux fará um bom trabalho de armazenar em cache os arquivos que você está usando por conta própria.
fonte
Eu apenas tentei dd se = / dev / sua partição raiz de = / dev / null \ bs = 1Mcount = como a memória você deseja preencher
não me dá o controle que você deseja, mas pelo menos tenta usar memória desperdiçada
fonte
eu uso find / -name stringofrandomcharacter ajuda muito
fonte
Não é exatamente o que foi solicitado, mas eu uso
para acionar a inicialização de arquivos em um volume da AWS criado a partir de um instantâneo. É mais focado do que a recomendação oficial do uso de dd, se você quiser apenas ler alguns arquivos.
fonte
Às vezes, posso querer armazenar em cache arquivos em uma determinada pasta e suas subpastas. Eu apenas vou para esta pasta e execute o seguinte:
encontrar . -exec cp {} / dev / null \;
E esses arquivos são armazenados em cache
fonte