Melhorando a performance do HD com hdparm!

Sei que os tutoriais de hdparm são simples e comuns, com isto, segue esse post para futura referência!

Considerações básicas: utilize /dev/hdX onde X é a letra do endereco lógico do seu hd.
(A->Primeiro Mestre, B->Primeiro Escravo, C->Segundo Mestre, D->Segundo Escravo, no meu caso o HD é /dev/hda)

Configuração padrão do HD (saída padrão do hdparm)

root@linux:~# hdparm /dev/hda

/dev/hda:
 multcount    = 16 (on)
 IO_support   =  0 (16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 8 (on)

É saudável lembrar que é bom efetuar um benchmark antes de alterar as configurações do HD para ter certeza de que houve uma melhoria do desempenho.

root@linux:~# hdparm -tT /dev/hda

/dev/hda:
 Timing cached reads:   1440 MB in  2.00 seconds = 720.00 MB/sec
 Timing buffered disk reads:  224 MB in  3.01 seconds =  74.42 MB/sec

O interessante para obter o máximo de desempenho do HD é habilitar o modo IO em 32-bits, expandir o prefetch do hd e habilitar o modo DMA.

Habilitando o modo 32-bits:

root@linux:~# hdparm -c1 /dev/hda

Expandindo o prefetch (leitura adiantada de dados):

O valor de ‘readahead’ é multiplicado por 512 pelo hd. No meu caso, o linux usava apenas 4k ao invés de 8k p/ o prefetch.

Parametros: -A1 (habilita prefetch) -A0 (desabilita prefetch) -a16 (tamanho do prefetch)

root@linux:~# hdparm -A1 -a16 /dev/hda

Habilitando o DMA:

Verificar os modos UDMA suportados:

root@linux:~# hdparm -i /dev/hda | grep UDMA
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

O asterisco indica o modo UDMA usado atualmente (no meu caso, udma5), e essa configuração é definida pela bios com base no seu sistema (vide nota a seguir sobre os itens fundamentais que definem o modo UDMA). Para alterar o modo udma, basta somar o modo escolhido com 64, por exemplo:
udma0 utilize 64 (64+0)
udma3 utilize 67 (64+3)
udma5 utilize 69 (64+5)

Cada modo UDMA corresponde a uma velocidade do barramento ATA, variando de 33 a 100 ou 133. Porém é válido lembrar que para alterar o modo de ATA33 para ATA133 são necessários 3 itens fundamentais: 1. Suporte por parte da Controladora ATA; 2. Cabeamento apropriado (Flat Cable para a velocidade desejada, ATA100 ou ATA133 utilizam o Flat Cable de 80 vias); 3. Suporte por parte do HD.

Parametros: -d1 (habilita) -d0 (desabilita) -X69 (modo udma escolhido)

root@linux:~# hdparm -d1 -X69 /dev/hda

Considerações finais

Você pode colocar todos os parametros em uma única linha e adicionar o comando completo no seu arquivo de inicialização /etc/rc.d/rc.local para configurar o HD toda vez que você inicializar o linux!

Comando completo:

hdparm -c1 -A1 -a16 -d1 -X69 /dev/hda

Efetuando um benchmark final:

root@linux:~# hdparm -tT /dev/hda

/dev/hda:
 Timing cached reads:   1472 MB in  2.00 seconds = 736.00 MB/sec
 Timing buffered disk reads:  224 MB in  3.00 seconds =  74.67 MB/sec

Conclusão…

No meu caso, habilitando o modo de 32-bits com um prefetch de 8k, o hd obteve uma performance superior ao definido na configuração padrão 😀

Escreva seu comentário: