Montar / usr na RAM (carregando do HDD ao iniciar, e salvando no momento do desligamento)

4

Eu tenho o cenário atual:

  • 16 GB ou RAM. Na maior parte, cerca de 10 ~ 12GB não utilizados

  • Quase nunca instala / remove software, este é um sistema maduro

  • Somente reinicialize como uma vez por semana, portanto, o tempo de reinicialização é irrelevante

  • /usr tem cerca de 8 GB

  • O disco rígido está lento e não há orçamento para mudar isso no futuro próximo

  • A montagem /tmp as tmpfs in fstab fez maravilhas para o desempenho

E eu acabei de ter essa ideia maluca:

É possível, de alguma forma, usar minha memória RAM para "armazenar" /usr ?

Na medida em que, ao iniciar, ele lê o conteúdo atual de /usr do HDD e o copia para tmpfs e monta como /usr ?

Se possível, também liberando o conteúdo (talvez atualizado) de volta ao HDD ao desligar? Ou talvez me permitindo facilmente "temporariamente voltar ao HDD" quando eventualmente necessário para instalar / remover novos softwares ou atualizações?

Qualquer abordagem é bem-vinda, os comandos prontos para uso serão altamente considerados.

Obrigado!

    
por MestreLion 12.05.2012 / 01:41

2 respostas

7

Isso é possível, mas sem sentido. O kernel mantém um cache de dados do disco na RAM. Os dados que você usou mais recentemente são mantidos na RAM. Você naturalmente terminará com as partes de /usr que você usa com frequência na RAM, e as partes que você não usa não ocuparão RAM.

Se você quiser um tempo de reação melhor ao iniciar um aplicativo, poderá propagar o cache. Um arquivo é carregado na memória na primeira vez que você o usa e permanece lá até que a memória seja reutilizada para outra coisa. Você pode forçar um arquivo a ser carregado:

cat /path/to/file >/dev/null

Por exemplo, para pré-carregar todos os executáveis e bibliotecas na RAM:

cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null

Isso pode demorar um pouco para ser concluído, então você deve fazer isso em segundo plano. Você pode colocar o seguinte comando em /etc/rc.local :

ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &

Para carregar também todas as bibliotecas nos subdiretórios de /usr/lib* , pode ser útil executar find :

ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec ionice -c 3 cat '{}' ';' > /dev/null &
    
por Gilles 12.05.2012 / 01:53
2
ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &

Não será executado, porque há muitos diretórios dentro das bibliotecas. tente encontrar:

ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec cat '{}' ';' > /dev/null &

Tudo que ele produz vai para / dev / null, então nada vai te aborrecer.

Eu acho que ambos ionice são necessários porque o find executa os comandos em um processo próprio. Por favor, corrija-me se eu estiver errado. (Parece que eu estava errado.)

Esta linha em rc.local deve fazer o truque para a resposta já escolhida.

[edit] removeu o segundo "ionice" como sugerido no comentário.

    
por qwc 31.08.2012 / 11:57

Tags