Atenção: As dicas a seguir servem para melhorar sua transferência de dados e uso em geral do seu sistema de arquivos em muitos casos. Por favor leia todo o tutorial antes de realizar quaisquer mudanças. Os comandos a seguir não implicam em risco de perda de dados! O tutorial foi testado em várias configurações diferentes, de um Atom 525 a um Core i72600k entre outros, com um único disco rígido ou vários discos rígidos e nas seguintes distros: Ubuntu, Mint Linux, OpenSuse, Mandriva e Centos! Se algo estiver errado ou você tiver novidades para contribuir, esteja a vontade para me avisar!1) Melhorando as requisições ao disco!É possível modificar o número de requisições que o seu disco rígido pode fazer ao ler ou gravar seus dados! Esses valores podem ser aumentados ou diminuídos e vão depender principalmente do tipo de uso que você faz do seu sistema de arquivos. Com esses valores alterados você pode aumentar ou diminuir a taxa de transferência dos dados. Fiz testes com o ext4, mas você pode fazer essas alterações no ext3, no JFS, no XFS e no NTFS também!
Resumindo, não existe um valor geral que vai ser bom para todos os casos. Você terá que fazer os seus testes, eu vou colocar aqui as minhas sugestões de acordo com meus testes pessoais!
Em geral valores mais altos tendem a ajudar na gravação dos dados, contudo se o seu sistema tiver muitos dados pequenos a latência do sistema pode aumentar, ou seja, o tempo de leitura aumenta e você vai sentir o sistema mais lento.
Esse valor é dado pelo
nr_requests. O
nr_requests fica na pasta
/sys/block/sdx/queue/nr_requests.
Onde o
sdx vai depender da letra do seu disco rígido. Isso mesmo, você pode alterar esse valor de acordo com cada disco rígido do seu sistema. Essa modificação portanto vale para o disco inteiro e para todas as partições dentro dele.
O valor é dado em
KB e pode variar entre:
4 / 8 / 16 / 32 / 64 / 128 / 256 / 512 / 1024 / 2048 O valor padrão é
128. Nos testes que eu li e nos realizados por mim em algumas máquinas o valor de
512 é o que apresentou melhores resultados no geral. Em um disco em que praticamente só vai ser usado para atividades de gravação você deve conseguir melhores resultados com
1024 ou 2048.
Para descobrir o valor do seu
nr_requests siga o exemplo:
$ cat /sys/block/sdx/queue/nr_requests
Para alterá-lo você faz como root:
# echo 512 > /sys/block/sdx/queue/nr_requests
Essa alteração já passa a valer imediatamente! Você pode fazer seus testes e verificar se isso ajuda ou não. Se usar apenas o comando echo, todas as vezes que reiniciar a máquina o valor padrão volta a vigorar, ou seja, 128. Se quiser que o valor ideal para você esteja sempre ativo, coloque essa linha de comando dentro do arquivo
/etc/rc.local antes do
exit 0. Para cada disco uma linha de comando!
2) Melhorando o Buffer de leitura!Outra opção de tunagem, entre inúmeras, para transferência de arquivos é alterar os valores do
read_ahead_kb. Alterar esse valor para mais melhora as taxas de leitura sequenciais. Portanto na maioria dos casos um valor aumentado não vai melhorar o desempenho do sistema, isso porque a maioria de nossos sistemas faz leituras randômicas quando em uso geral. O valor padrão é
128 e novamente para verificar o seu valor use o comando
cat. O
read_ahead_kb também se encontra na pasta
/sys/block/sdx/queue/read_ahead_kb. O exemplo então fica:
$ cat /sys/block/sdx/queue/read_ahead_kb
Para alterá-lo você usa o echo, os valores possíveis são:
4 / 8 / 16 / 32 / 64 / 128 / 256 / 512 / 1024 / 2048 / 4096 / 8192 / 16384Para máximo desempenho de leitura sequencial use 16384! Esse valor define o quão grande uma atividade de leitura pode ter. Como usuário root:
# echo 16384 > /sys/block/sdx/queue/read_ahead_kb
Essa alteração já passa a valer imediatamente! Você pode fazer seus testes e verificar se isso ajuda ou não. Se usar apenas o comando echo, todas as vezes que reiniciar a máquina o valor padrão volta a vigorar, ou seja, 128. Se quiser que o valor ideal para você esteja sempre ativo, coloque essa linha de comando dentro do arquivo
/etc/rc.local antes do
exit 0. Para cada disco uma linha de comando!
Você pode então se perguntar quando aumentar esse valor é útil afinal? Quando você vai fazer uma grande transferência de dados de um disco para o outro! Nos meus testes com um pobre Atom as taxas de transferências aumentaram em até
10MB/s. Em ambientes de grandes servidores os ganhos podem alcançar até
400MB/s!
3) Dicas em Geral de quando e como usar esses parâmetros!Ao utilizar
512 no
nr_requests e
16384 no
read_ahead_kb , consegui diminuir em pouco mais de 34 segundos a transferência de arquivos dentro do próprio HD do meu Atom 525 do trabalho. Isso com um grande volume de dados e num Atom com apenas um HD! Seus ganhos podem ser maiores com um processador mais potente e com mais de um disco envolvido. A má notícia é que se usar esses valores no disco onde o seu sistema está instalado, você só conseguirá fazer a transferência de arquivos!!! Tentar fazer outra coisa será praticamente impossível num Atom, no Corei7 eu ainda consegui usar outra coisa, mas muito lento.
O ideal é usar esses valores em um disco que só vai servir para dados e não vai ser usado com o sistema. Como a tunagem pode ser feita para cada disco e se você tiver vários discos no sistema, acaba sendo uma boa idéia!
Outra boa dica é se você vai fazer uma transferência grande de arquivos que envolve um HD externo ou até mesmo um novo HD que você precisa fazer backup de uma montanha de dados.
Você pode usar o echo para tunar os dois arquivos, faz a transferência e depois pode voltar tudo ao normal ao reiniciar a sua máquina.
Em meus testes, quando usei o
nr_requests e o
read_ahead_kb tunados em
512 e
16384 respectivamente, de maneira temporária e depois voltei aos valores originais de 128, o sistema não ficou legal. Ficou lento! Só voltou ao normal depois de reiniciar.
Tenho usado apenas o
nr_requests com 512 em várias máquinas de configurações diferentes com bons resultados em uso diário! Com apenas o
nr_requests tunado é perfeitamente possível fazer até três transferências de arquivos ao mesmo tempo e usar o sistema, isso num Atom 525. O
read_ahead_kb eu deixo padrão, só altero quando preciso fazer uma grande transferência de dados.
Ao utilizar o
nr_requests e o read_ahead_kb tunados em meu servidor de arquivos e na minha máquina de casa para transferir dados pela rede gigabit com o Samba consegui até
71MB/s de taxa de transferência sustentada com 3 arquivos ao mesmo tempo, notem a foto abaixo como exemplo:
Com o
nr_requests e o read_ahead_kb tunados, você poderá ver as taxas de transferências aumentarem com o tempo e não ir caindo como de costume!
Então era isso pessoal!
Espero ter ajudado mais do que complicado!