Eu gostaria de configurar o sistema para usar a maioria da RAM para o cache de metadados do sistema de arquivos, mas apenas uma quantidade razoavelmente pequena para arquivos de cache de leitura / gravação e pré-busca. Idealmente, eu gostaria de poder navegar no sistema de arquivos (tanto quanto ele se encaixa na RAM) sem girar os discos até abrir um arquivo.
Aqui estão os detalhes:
Eu tenho um servidor de arquivos caseiro. Possui cinco discos em um volume LVM em torno de 9 TB, mas apenas 4 GB de RAM. Como o servidor não faz muito mais do que servir os arquivos, a maior parte da RAM é usada para armazenamento em cache. ("Gratuito" relata 3,4G de 3,9G usados para cache.)
O servidor mora no meu quarto e, se todos os discos estiverem girando, haverá ruído suficiente para ser irritante quando estiver silencioso. (Não estou falando de procurar ruído, apenas girar. Os discos são de várias marcas e modelos, e acho que pequenas diferenças nas velocidades de rotação causam interferência. Nenhum disco é barulhento por si só, mas se alguns deles estão girando juntos, há um ligeiro ruído com um período sub-Hertz.) Por isso, configurei o servidor para reduzir os discos na maior parte do tempo.
Obviamente, se os discos forem girados para baixo quando eu abrir uma pasta no meu gerenciador de arquivos, haverá um atraso enquanto o disco que tiver essa pasta girar. Só isso não é grande coisa. Mas, dependendo de onde eu olho, isso pode acontecer várias vezes seguidas, se o LVM espalhar os metadados de cada subpasta nos diferentes discos.
Eu suspeito que o Linux preencha principalmente o cache com o conteúdo do arquivo e, possivelmente, com os dados pré-buscados. O cache não é muito útil além de alguns MB para garantir uma reprodução suave; se eu apenas assisti a um filme, provavelmente não voltarei a vê-lo tão cedo. A pré-busca, se acontecer, também é completamente inútil no meu caso , depois de mais de alguns MB.
Mas alguém poderia pensar que 4 GB devem ser suficientes para armazenar em cache a maioria dos metadados do sistema de arquivos, pelo menos as partes que já foram visitadas, para que eu possa navegar pelos arquivos sem precisar girar os discos, se forem dormindo.
Ainda haveria um atraso ao abrir o arquivo, mas tudo bem. Compare “clique; espera ; clique; espera ; clique; espera ; jogar; assistir "com" clique; clique; clique; jogar; espera ; Assistir". O primeiro é incrivelmente frustrante; o último é quase esperado.
Notas:
Caso isso importe, o kernel é 3.2, o sistema operacional é o Debian, o volume é lvm2 e o FS é ext4.
A única razão para a queda é o barulho durante a noite; caso contrário, o servidor está executando continuamente. (Eu consegui a energia mais baixa possível.) O atraso da rotação varia de acordo com a hora do dia.
Os discos rígidos são apenas para mídia. O sistema operacional está em uma unidade flash (pequena) separada. (O que significa que qualquer atraso de spin-up vem dos dados, não apenas porque eles precisam de algo
/usr
ou o que seja. Eu poderia poupar alguns GB nele se isso ajudasse de alguma forma com o meu problema.Um impacto razoável no desempenho não é grande coisa. Os discos são mais rápidos que minha rede de qualquer maneira.
fonte
find / -ls > /dev/null
, gire os discos e, em seguida,find
todos os arquivos novamente, os discos não girarão.free
mostra buffers subindo para cerca de 202 MB ao fazer isso. Mas, se eu fizer ofind
, entãocat /file/bigger/than/ram > /dev/null
, osfree
showscached
aparecerão para preencher o espaço vazio e, por algum motivobuffers
, cairão para cerca de 195MB. Então, se eu spin down dos discos e fazer asfind
novamente os discos ainda girar :-(swappiness
: está definido como padrão60
, mas a máquina não possui nenhuma partição de troca, portanto, não tenho certeza se faz muito. Acho que poderia colocar um arquivo de troca na unidade flash, mas não tenho idéia de como isso ajudaria ou como dimensioná-lo.