hdparm: Tire o máximo do seu HD

Neste artigo tentarei explicar os conceitos básicos do hdparm, uma importantíssima ferramenta de configuração que pode deixar o seu HD em ponto de bala, tinindo e pronto pra qualquer tarefa.

[ Hits: 230.540 ]

Por: Davidson Rodrigues Paulo em 19/11/2004 | Blog: http://davidsonpaulo.com/


Testando o desempenho



Uma ferramenta de fundamental importância no hdparm é o teste de desempenho. Você usá-las antes de fazer alterações nos parâmetros do HD e, assim que fizer alterações, voltar a realizar os testes para comparar e verificar se houve melhora no desempenho ou não.

Vejamos como se faz isso:

# hdparm -Tt /dev/hda
/dev/hda:
 Timing cached reads:  1200 MB in  2.00 seconds = 598.89 MB/sec
 Timing buffered disk reads: 82 MB in  3.06 seconds = 26.77 MB/sec

Aqui foram feitos dois testes. O primeiro é o de tempo de leitura com cache (cached reads), e o segundo, de tempo de leitura de disco com buffer (buffered disk reads).

Você deve aplicar esse testes como o mínimo de recursos sendo utilizados. De preferência, utilize o modo monousuário:

# init 1

Para você o quanto você pode perder em desempenho, fiz um teste simples: desativei todos os recursos do disco, como DMA, leitura adiantada, etc, e fiz o teste de desempenho, e em seguida repeti o teste após ativar os devidos recursos. Veja:

# hdparm -c0 -d0 -A0 -m0 -a0 /dev/hda
/dev/hda:
 setting fs readahead to 0
 setting 32-bit IO_support flag to 0
 setting multcount to 0
 setting using_dma to 0 (off)
 setting drive read-lookahead to 0 (off)
 multcount    =  0 (off)
 IO_support   =  0 (default 16-bit)
 using_dma    =  0 (off)
 readahead    =  0 (off)

# hdparm -Tt /dev/hda
/dev/hda:
 Timing cached reads:   1196 MB in  2.00 seconds = 596.90 MB/sec
 Timing buffered disk reads: 2 MB in  4.30 seconds = 476.46 kB/sec

# hdparm -c1 -d1 -X69 -A1 -a16 -m16 /dev/hda
/dev/hda:
 setting fs readahead to 16
 setting 32-bit IO_support flag to 1
 setting multcount to 16
 setting using_dma to 1 (on)
 setting xfermode to 69 (UltraDMA mode5)
 setting drive read-lookahead to 1 (on)
 multcount    = 16 (on)
 IO_support   =  1 (32-bit)
 using_dma    =  1 (on)
 readahead    = 16 (on)

# hdparm -Tt /dev/hda
/dev/hda:
 Timing cached reads:   1200 MB in  2.00 seconds = 599.79 MB/sec
 Timing buffered disk reads: 82 MB in 3.04 seconds = 26.94 MB/sec

Veja agora a tabela de desempenho:



Como se vê, configurado com o hdparm, o HD alcançou uma performance 5692% maior que a alcançada sem as configurações, nas gravações com buffer (buffered disk reads).

O ideal é que você faça esses testes antes e depois de modificar qualquer parâmetro, para ter certeza de que não está fazendo uma configuração que vai prejudicar o desempenho do HD.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação
   3. Obtendo e analisando informações
   4. Configurando o disco
   5. O gerenciamento acústico e de energia
   6. Testando o desempenho
   7. Ativando o hdparm na inicialização do sistema
   8. Considerações finais
Outros artigos deste autor

Site for IE: Até quando?

Monitore o seu Linux com o Conky

Por que não migram

Seu Slackware atualizado com SWARET

Fundamentos do sistema Linux - Gerenciadores de inicialização

Leitura recomendada

Funtoo + bspwm + Polybar + Rofi - Instalação e Configuração

Slackware - Limpeza automática da pasta /tmp

Incrementando as funções do KDE com "servicemenus"

Fazendo um Kmenu excelente

Configurando um Super OpenBox!

  
Comentários
[1] Comentário enviado por cvs em 19/11/2004 - 08:27h

Muito bom seu artigo cara, gostei mesmo já usando o hdparm há algum tempo obtive muitas respostas aqui.. .só faço uma ressalva, a respeito da instalação, normalmente ele já vem instalado por default... é só...parabens.

[2] Comentário enviado por rfranzen em 19/11/2004 - 09:16h

Muito bom artigo, bem explicado. Quando chegar em casa vou testar :)

[]'s !

[3] Comentário enviado por gelemeurer em 19/11/2004 - 09:39h

Ótimo artigo, valeu!!!

Aqui no IDE aumentou consideravelmente o desempenho, já no scsi: "operation not supported on SCSI disks"

Verei melhor isto mas se tiveres alguma dica...

[]s

Gele


[4] Comentário enviado por y2h4ck em 19/11/2004 - 11:45h

Eu usava o hdparm, melhorou bastante o desempenho, mas infelizmente pelo que andei estu dando meu hd Maxtor 20gb nao permite setar o DMA

Mas o artigo ta show cara, parabens!

Abraços

[5] Comentário enviado por m4sk4r4 em 19/11/2004 - 13:49h

Olá Davidson,

Show de bola seu artigo, gostei muito, value,

t+
[]'s

[6] Comentário enviado por lowpis em 19/11/2004 - 14:01h

O meu dá esse erro:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
Alguém sabe o porquê?

E, pra quem usa o Gentoo, edite as configurações no arquivo /etc/conf.d/hdparm
O arquivo eh bem explicado, mas basicamente, você precisa colocar uma variável com os argumentos. Aqui em casa, usei:
hda_args="-c1 -d1 -X69 -A1 -a64 -m16"

Depois, para colocar o hdparm na inicialização, faça:
$ rc-update add hdparm boot

[7] Comentário enviado por gibabsb em 19/11/2004 - 18:56h

Parabéns pelo artigo muito bom mesmo, tem uma máteria sobre hdparm na revista LInux Magazine do mês passado, vale a pena dar uma olhada.
Tenho apenas uma dúvida, uso o RH9 e não encontrei o arguivo hdparm.conf então como faço para habilita-lo logo na inicialização ou ele já inicializa automático?
Um abraço

[8] Comentário enviado por bighead em 19/11/2004 - 20:30h

Muito bom , mas eu queria que vc desse uma olhada neste erro e me ajudasse a corrigi-lo!

# hdparm -c1 -d1 -X69 -m16 -A1 -a64 /dev/hda

/dev/hda:
setting fs readahead to 64
setting 32-bit IO_support flag to 1
setting multcount to 16
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error
setting drive read-lookahead to 1 (on)
multcount = 16 (on)
IO_support = 1 (32-bit)
using_dma = 1 (on)
readahead = 64 (on)
root@darkstar:~# hdparm -i /dev/hda
ai quando eu digito :
root@darkstar:~# hdparm -i /dev/hda

/dev/hda:

Model=WDC WD100EB-00BHF0, FwRev=15.15M15, SerialNo=WD-WMA6K6151472
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=19541088
IORDY=on/off, tPIO={min:120,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: device does not report version:

* signifies the current active mode

Viu ele não modificou a opção para o modo udma5 , será que tem como consertar este erro.

[9] Comentário enviado por davidsonpaulo em 19/11/2004 - 20:36h

bighead,

HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

Essa mensagem siginifica que houve erro de entrada/saída no instante em que o hdparm tentava setar o seu HD para o modo UDMA5. Isso pode ter diversos motivos, e um deles é o seu HD na verdade não suportar o modo UDMA5, apesar de o hdparm reconhecer que suporta. Tente ativar os modos udma4 (-X68) e udma3 (-X67). Ou então, configure o /etc/hdparm.conf e reinicie o computador para ver se as configurações funcionam corretamente quando aplicadas no momento do boot.

Abraços

[10] Comentário enviado por removido em 20/11/2004 - 01:10h

SCRIPT DE EXECUÇÃO DO HDPARM

O script abaixo está diponível em http://www.guiadohardware.net/kurumin/dicas/005/index.php#01 e é de autoria do Alan Rafael Rodrigo Batista.
Bom proveito!
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
. Ganho de performance no HD
Por Alan Rafael Rodrigo Batista

Crie um arquivo:

sudo kedit harddisk.sh

Coloque nele o conteúdo abaixo:

#!/bin/sh
echo "mostrando na tela as configurações do disco"
hdparm -c -d -t /dev/hda #corrija aqui caso seu disco não seja o hda
echo
echo "melhorando a leitura e escrita do hda"
hdparm -c 1 -d 1 -t /dev/hda #corrija aqui caso seu disco não seja o hda
echo "feito!"

Agora dê a permissão:

sudo chmod a+x harddisk.sh

E execute no terminal como root:

./harddisk.sh



[11] Comentário enviado por pop_lamen em 20/11/2004 - 01:30h

Muito bom o artigo, bem completo, estudado.
Prabéns, todos os artigos da comunidade deveriam ser como o seu, e não assuntos cobertos só pela metade.
Wainer.Chiari

[12] Comentário enviado por nemphilis em 20/11/2004 - 22:21h

este artigo me chamou a atenção, além da boa linguagem utilizada, sanou todas as duvidas dos topicos abordados. Parabéns bozolinux, eeeeeeeesse menino vai longe!!!

[13] Comentário enviado por bighead em 21/11/2004 - 13:19h

Muito obrigado Davidson.
Será que o hdparm pode resolver um problema num hd que apresenta este erro:artition check:
hda: hda1 hda2 hda3
hdb:hdb: dma_intr: status=0x51 { DriveReady SeekComplete Er
ror }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hdb: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hdb: dma_intr: error=0x10 { SectorIdNotFound }, LBAsect=0, s
ector=0
hda: DMA disabled
hdb: DMA disabled
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
end_request: I/O error, dev 03:40 (hdb), sector 0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=2,
sector=2
end_request: I/O error, dev 03:40 (hdb), sector 2
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=4,
sector=4
end_request: I/O error, dev 03:40 (hdb), sector 4
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
ide0: reset: success
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=6,
sector=6
end_request: I/O error, dev 03:40 (hdb), sector 6
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
hdb: read_intr: status=0x59 { DriveReady SeekComplete DataRe
quest Error }
hdb: read_intr: error=0x10 { SectorIdNotFound }, LBAsect=0,
sector=0
Muito obrigado a vc pela atenção e a todos da comunidade!!!!!!!!!

[14] Comentário enviado por davidsonpaulo em 23/11/2004 - 16:04h

bighead,

Essas mesmas mensagens aparecem num computador velho de um amigo meu, e o problema é a quantidade de 'bad blocks' (setores defeituosos) no HD. O hdparm não vai consertar isso, pois sua função não é corrigir problemas em HDs, mas somente configurá-los com os devidos recursos a fim de melhorar a performance de leitura e escrita.

Abraços

[15] Comentário enviado por GrupoFimdeprova em 01/02/2005 - 09:32h

Muito legal o artigo!
Espero que aumente a performance do meu disco

[16] Comentário enviado por impalerdrumer em 27/02/2005 - 19:35h

cara nenhum dos meus dois hds estao setando o udma4(o máximo suportado pela minha placa mãe q é ata66), ele dá o seguinte erro:
/dev/hda:
setting xfermode to 68 (UltraDMA mode4)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output error

vi vc falando pra um cara aqui q estava com a mesma duivida, q esse problema pode ser relacionado ao hd nao suportar o modo q se esta tentando setar, mas tenho certeza de que meus hds suportam, tanto que um deles é um Samsung novinho de 7200rpm, q suporta até ata133 por sinal.....

se puder me ajudar fico muitissimo grato
Álvaro

[17] Comentário enviado por himura_kenshin em 28/04/2006 - 09:00h

root@yakuza:/home/kurosaki# hdparm -d1 /dev/hda

/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)

alguem poderia me ajudar aki?!?! nao consigo ativar o dma

[18] Comentário enviado por mtarcinalli em 14/09/2006 - 11:34h

Pode ser que o módulo do IDE do seu micro não esteja habilitado no kernel, aqui recompilei e resolveu

[19] Comentário enviado por leorm037 em 17/12/2006 - 20:13h

Parabéns, aqui funcionou tudo certinho.

No meu caso uso o slack, acho que o melhor lugar para colocar é no /etc/rc.d/rc.local, porque também não tenho o /etc/hdparm.conf

Abraços,

Leo

[20] Comentário enviado por marcus-rj em 08/02/2007 - 20:28h

Muito bom o artigo!! Ja conheci o hdparm, mas nao de forma tao completa como nesse artigo. Valeu pela rica informação!!

Nota 10!

[21] Comentário enviado por cytron em 23/02/2007 - 15:51h

Encontrei a solução para o SATA, veja bem como estava fácil de achar:

HDA = hdparm

SDA = shparm

O site é http://sg.torque.net/sg/sdparm.html, mas já vou avisando, é coisa para alienígena! Eu não consegui configurar nada, é muito diferente do hdparm.

Se alguém conseguir fazer alguma melhoria avise.

Tem pra smart também: http://smartmontools.sourceforge.net/man/smartctl.8.html

[22] Comentário enviado por removido em 12/07/2007 - 03:54h

Davidson,

Achei seu artigo show! Aumentar o desempenho de um disco é imprescindível, principalmente, quando o assunto se trata de servidores, onde a velocidade do disco é um fator crucial.

Atenciosamente,

Slackmaster ( jlgomessouza@gmail.com )

http://dangercode.blogspot.com

[23] Comentário enviado por juno em 06/08/2007 - 14:44h

Cara,
Parabéns pelo artigo !
Me ajudou bastante.

Abraços,
Juno

[24] Comentário enviado por wagnux em 08/02/2008 - 10:05h

Estou com o mesmo problema apresentado pelos colegas:

Depois de executar esse comando # hdparm -d 1 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)

Alguém teria uma sugestão pra resolver esse problema?

[25] Comentário enviado por removido em 25/06/2008 - 09:57h

3 ano e meio depois e este artigo ainda tá salvando a minha pele... parabéns...

[26] Comentário enviado por marcelohcm em 16/01/2012 - 11:46h

olá
quando digito hdparm -i /dev/sda
ele me dá essa saída

/dev/sda:
HDIO_DRIVE_CMD(identify) failed: Invalid exchange
HDIO_GET_IDENTITY failed: Invalid argument


gostaria de saber se isso é algum problema do hd...

[27] Comentário enviado por davidsonpaulo em 16/01/2012 - 11:54h

marcelohcm, o hdparm só serve para discos IDE, e ao que tudo indica o seu disco é SCSI ou SATA. Nesse caso, você precisará utilizar o comando sdparm. Um grande abraço!

[28] Comentário enviado por removido em 23/01/2014 - 12:41h

Artigo excelente! Parabéns!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts

Performance
Velocidade de gravação sem hdparm com hdparm
cached reads 596,90 MBps 599,79 MBps +0,48%
buffered disk reads 476,46 kBps 26,95 MBps +5692%