Hdparm – Entendendo seu funcionamento e pequeno script
Segunda-feira/8 - Outubro/2007
Introdução
A princípio, este meu artigo já se encontra públicado no VoL já a algum tempo, sendo o mesmo, elaborado em uma época que minha maquina não era tão poderosa e meus HDs não eram tão rápidos. E como, muitas vezes me recordo do Slackware ( a distro que realmente me trouxe e me fez aprender sobre software livre) resolvi “re-publicar” este artigo aqui no Blog, que como se trata de um projeto pessoal, derrepente pode haver outras pessoas que possam realmente interesadas sobre o hdparm e aqui também poderam encontrar alguma informação a respeito que no link original. No final do arquivo estão dispostos o link para o artigo no Viva o Linux em respeito a esta grande e amada comunidade sobre software livre no Brasil.
Breve Explicação
As vezes nossos HDs não estão tão rápicos quanto o esperado em uma cópia de vários arquivos ou restauração de um backup, com isto procuramos saber o porque de sua baixa performance. No Linux, a principal ferramenta para isso é o hdparm.
Entre as várias possibilidades úteis com o hdparm, podemos verificar e obter informações para futura análise dos discos, configuração de discos ópticos e rígidos, testes de desempenho, gerenciamento de energia e ajustar os parâmetros de configuração para os mesmos.
Só não devemos esquecer que para cada drive de disco ou hard disc e para cada fabricante existe uma configuração específica. Então utilize os dados aqui mencionados com extrema cautela e de preferência como um esboço para uma configuração mais fiel e específica para o seu sistema.
Informações sobre o HD e testes de desempenho no sistema
Caso você já tenha o hdparm instalado, já poderemos utilizá-lo para buscar informações no sistema. Caso não o tenha instalado, procure no CD1 de instalação do Slackware na raiz do cdrom “slackware/a/hdparm-6.1-i486.tgz” e utilize como superusuário (depois de montado o drive de CD):# installpkg slackware/a/hdparm-6,1-i486.tgzPara quem utiliza Debian pode dar um simples apt-get install hdparm ou aptitude hdparmque ele baixará o pacote e instalará o programa. Mas hoje em dia 99% das distribuições linux já vem com tal e util aplicativo instalado, então é bem provável que sua distro possua o hdparm.Após instalado verificamos as informações do HD com o parâmetros -i ou -I, sendo que o primeiro vai lhe fornecer informações menos técnicas sobre o disco rígido/drive e o segundo te dará informações completas e detalhadas, onde poderemos saber o que seu disco rígido suporta e o que não suporta.
Mas sempre verifique se tua BIOS suporta certo parâmetros, pois se teu HD suportar Ultra-DMA 4 ou 5 e sua BIOS disser que suporta no máximo Ultra-DMA 2, não utilize UDMA4, pois não vai adiantar muito e poderá ter problemas de compatibilidade como travamentos no sistema e correndo o risco de perder dados no disco.
Formas de obter informações:
# hdparm -i /dev/hda /dev/hda:
Model=ST340014A, FwRev=3.06, SerialNo=5JXAFYM6
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
CurCHS=4047/16/255, CurSects=16511760, LBA=yes, LBAsects=78165360
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2:
* signifies the current active mode
O que podemos tirar deste exemplo?
Neste “resumo” podemos verificar Modelo, Firmware e Serial. Veja:
(Model=ST340014A, FwRev=3.06, SerialNo=5JXAFYM6)
CSH e LBA compatível do HD: linha 3 e linha 5 – (RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4) & (CurCHS=4047/16/255, CurSects=16511760, LBA=yes, LBAsects=78165360)
Na 4ª linha podemos saber o tamanho do buffers de leitura ( BuffSize=2048kB ) e qual o máximo de transferência máxima múltipla por setores ( MaxMultSect=16, MultSect=16 ). Nas linhas 7,8 e 9; verificamos os modos PIO,DMA e UDMA suportado e em qual está operando no momento.
E por último se o gerenciamento de energia está ativo ou não ( AdvancedPM=no), se o cache está ativo (WriteCache=enabled) e se o drive é compatível com o padrão ATA ( Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2 ).
Outro modo de obter uma informação mais precisa é:
# hdparm -I /dev/hda
mas vamos nos concentrar no exemplo já utilizado e verificado.
Antes de continuarmos, verifique o que já está habilitado no seu HD com “hdparm /dev/hda” e teremos a seguinte listagem:
/dev/hda: multcount = 0 (off) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 0 (off) geometry = 16383/255/63, sectors = 78165360, start = 0
e faça um teste de desempenho com:
# hdparm -Tt /dev/hda
/dev/hda: Timing cached reads: 500 MB in 2.00 seconds = 250.51 MB/sec Timing buffered disk reads: 10 MB in 3.22 seconds = 3.11 MB/sec
Como vimos, isto está muito abaixo do esperado. Sabemos que podemos habilitar muitas das opções que estão desabilitadas e com isso melhorar progressivamente o desempenho.
Vamos detalhar as opções que estão desabilitadas comparando o comando hdparm -i /dev/hda e hdparm /dev/hda, ok?
# hdparm -i /dev/hda
hdparm /dev/hda opção a usar MaxMultSect=16, MultSect=16 multcount = 0 (off) -m16 UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5 using_dma = 0 (off) -d1 e -X66 ou X udma2 IORDY=on/off IO_support = 0 (default 16-bit) -c1 BuffSize=2048kB e WriteCache=disable readahead = 0 (off) -A1 e -a256
Habilitamos então as opções que podemos utilizar da seguinte forma:
# hdparm -c1 -d1 -m16 -A1 -a256 -X udma2 /dev/hda
e vemos agora como ficou o desempenho do mesmo com:
# hdparm -Tt /dev/hda
/dev/hda: Timing cached reads: 580 MB in 2.01 seconds = 288.60 MB/sec Timing buffered disk reads: 66 MB in 3.01 seconds = 21.92 MB/sec
Nossa!!! O que aconteceu aqui??? Tivemos um salto enorme de desempenho, com ganhos no Buffer de disco em torno de 500% e do cache uns 16%! Como podemos explicar isso?? Mágica?? Como veremos agora, não se trata de mágica nenhuma. Veja um breve resumo das opções utilizadas como descrito na página do manual:
- -m16 – A modalidade múltipla do setor… permitindo transferência de setores múltiplos por interrupção de I/O, melhor que o um setor por cada interrupção. Quando esta característica é permitida, reduz tipicamente a carga geral do sistema operando no disco entre 30-50%… A maioria das “HDs” suportam os ajustes mínimos de 2, de 4, de 8, ou de 16 (setores). Os ajustes maiores podem também ser possíveis, dependendo do “disco rígido” utilizado.
- -d1 – Habilita ou desabilita o modo DMA… Verifique se sua BIOS suporta… (Com certeza sim!)
- -c1 – Habilita (sustentação 32-bit de E)IDE I/O… (ou seja, interrupções de Entrada e Saída a 32 bits)
- -A1 – Desabilita/Habilita a leitura antecipada/adiantada da IDE – geralmente Habilitado por padrão…
- -a128 Configura a leitura adiantada. O valor especificado é multiplicado por 512 Bytes. Assim, se você usar 8, a leitura adiantada será de 4 KB. No caso de 128, será utilizado 64KB na leitura adiantada, e assim sucessivamente…
- -X – udma2 Habilita o modo Ultra-DMA mode 2… veja mais no manpage do hdparm
Além destas opções existem outras. Caso queira saber mais, veja a página do manual do hdparm (man hdparm).
Script de inicialização
Podemos criar um script para ser executado na inicialização do sistema, evitando de você ter que digitar os mesmos comandos toda vez que reiniciar a máquina. Neste script coloquei todas as opções funcionais do hdparm para o meu sistema, então modifique algumas opções para o perfeito funcionamento em seu Linux. Copie e salve como o arquivo como /etc/rc.d/rc.hdparm no caso do Slackware.Script:
#!/bin/sh
# Desenvolvido com base na página do manual do hdparm por Jeferson Lopes
# Pode ser modificado e redistribuído conforme a GPL v.2
# Vale ressaltar que as configurações aqui foram feitas para o padrão IDE
# por exemplo: “hd” IDE para “sd” no caso de SATA ou SCSI
# Não se esqueçam de verificar os parâmetros validos para seus dispositivos# Parâmetros de configuração
HDP=/usr/sbin/hdparm
HD0=/dev/hda
HD1=/dev/hdb
DVD0=/dev/hdc
DVD1=/dev/hdd
IDMA0="-c1 -d1 -u1 -k1 -A1 -a256 -m16 -S60 -W1 -X udma2"
IDMA1="-c1 -d1 -u1 -k1 -A1 -a512 -m16 -S12 -W1 -X udma2"
IDMA2="-c1 -d3 -u1 -k1 -A1 -a256 -m16 -S60 -W1 -X udma4"
IDMA4="-c1 -d3 -u1 -k1 -A1 -a512 -m16 -S12 -W1 -X udma4"
IDMA_DV="-c1 -d1 -X66"
STDMA0="-c0 -d0 -a0 -u0 -k0 -m0 -S0 -W0 -X mdma2"
STDMA1="-c0 -d0"init_hdparm() {
# Ajustar HardDisks
echo "Iniciando parâmetros para seus HardDiscs..."
$HDP $IDMA0 $HD0 1> /dev/null 2> /dev/null
$HDP $IDMA1 $HD1 1> /dev/null 2> /dev/null
echo "[OK...]"
# Ajustar OpticDisks
echo "Ajustando Ultra-DMA 2 para seus OpticDiscs..."
$HDP $IDMA_DV $DVD0 1> /dev/null 2> /dev/null
$HDP $IDMA_DV $DVD1 1> /dev/null 2> /dev/null
echo "[OK...]"
}
stop_hdparm() {
# Ajusta parâmetros dos drives de disco para seu funcionamento mais básico.
# Utilize esta opção caso queira parar o “hdparm” ou por configurações erradas/problemas de leitura nos dispositivos
echo "Parando serviço do hdparm em todos os seus dispositivos de armazenamento..."
$HDP $STDMA0 $HD0
$HDP $STDMA0 $HD1
$HDP $STDMA1 $DVD0
$HDP $STDMA1 $DVD1
}
status_hdparm() {
# Verifica Status de seus HDs e Drives Opticos
$HDP $HD0
$HDP $HD1
$HDP $DVD0
$HDP $DVD1
}
case "$1" in
"start")
init_hdparm
;;
"stop")
stop_hdparm
;;
"status")
status_hdparm
;;
*)
echo “Utilize rc.hdparm start | stop | status para iniciar | parar | ou verificar o status do hdparm…”
esac
Sua utilização é simples depois de implementado, podendo ser utilizado como por exemplo:# ./rc.hdparm start
para iniciar;# ./rc.hdparm stop
para pararou ainda:
# ./rc.hdparm status
para verificar o status de seus HDs ou Drives de CD/DVD.
Para automatizar a entrada do sistema, copie as seguintes linhas para o início ou fim de seu “rc.M” ou “rc.local”:
# Inicia parâmetros em /etc/rc.d/rc.hdparm
if [ -x /etc/rc.d/rc.hdparm ]; then
. /etc/rc.d/rc.hdparm start
fi
Finalizando
Espero não ter fugido muito do idéia principal de criar um script para o hdparm na inicialização do Slackware, mas consegui, creio eu, passar uma idéia de algumas das funções e opções do hdparm.Estou disposto a sugestões e opiniões para melhorar o script e/ou adaptação com novas opções para o mesmo.Caso precisem de uma mão na roda, lembrem-se:$ man hdparm
Até mais pessoal.
Autor: Jeferson Lopes de Oliveira Mendes
Data: 12/06/2006
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4847
Entry Filed under: Hardware, Linux, Slackware, Software Livre, hard disk, hdparm. Tags: desempenho, hd.
2 Comments Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed





1.
Junior | Quarta-feira/10 - Outubro/2007 at 16:28
Show… documento mais completo em pt_BR q eu já vi.
Abraço Jeff…
2.
Denial | Terça-feira/13 - Novembro/2007 at 18:38
Você é o cara. Continue com o ótimo trabalho, amigo. Abraço!!!