Hdparm - Entendendo seu funcionamento e criando um script para Slackware

Aqui nos concentraremos nas configurações e parâmetros do hdparm. Nosso principal objetivo é entender como o software funciona, também criaremos um script que pode ser usado na inicialização do Slackware, e que com alguns ajustes, pode ser adaptado para outras distribuições.

[ Hits: 27.344 ]

Por: Jeferson Lopes de Oliveira Mendes em 12/06/2006 | Blog: http://jefersonlopes.com.br


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.tgz

Para quem utiliza Debian pode dar um simples:

# apt-get install hdparm
ou
# aptitude hdparm

que ele baixará o pacote e instalará o programa.

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 exemplo 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).

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Informações sobre o HD e testes de desempenho no sistema
   3. Script de inicialização
   4. Finalizando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Brincando com vetores

Criando Arrays, Arrays Multidimensionais e Hashes em BASH Script

Monitorando servidores pelo celular

Brincando com vetores

Introdução ao Shell Script (parte 2)

  
Comentários
[1] Comentário enviado por removido em 12/06/2006 - 20:12h

o meu tá com o ultra dma 5 ativado, ele é habilitado por padrão na instalação do Ubuntu, olha ae o resultado:

tiagozc@linux:~$ sudo hdparm -tT /dev/hda

/dev/hda:
Timing cached reads: 880 MB in 2.01 seconds = 438.31 MB/sec
Timing buffered disk reads: 154 MB in 3.03 seconds = 50.87 MB/sec

:D

[2] Comentário enviado por lothar_m em 13/06/2006 - 17:37h

na mesma situação de tiagozc
o resultado foi:

*****@gandalf:~$ sudo hdparm -Tt /dev/hda

/dev/hda:
Timing cached reads: 888 MB in 2.01 seconds = 442.30 MB/sec
Timing buffered disk reads: 108 MB in 3.00 seconds = 35.96 MB/sec

[3] Comentário enviado por tarso em 13/06/2006 - 18:09h

Muito bom

[4] Comentário enviado por JefersonLopes em 13/06/2006 - 18:14h

Amigos, existem distribuições que já ativam o DMA que seu HD suporta, outras não!!!

Também meu HD não é tão privilegiado como o de vocês. Um bom conjunto de HD e placa mão já é de ótima ajuda.

:)



[5] Comentário enviado por patrickbrandao em 15/06/2006 - 10:07h

Excelente artigo, até que enfim alguem explicou como sabendo do assunto e não recortando de receita de bolo!

Continue assim slack.

[6] Comentário enviado por joabes em 20/09/2006 - 13:11h

Caro amigo:

Preciso de uma ajudinha, quais as sequências de comandos que devo usar baseada nessas informações, meu disco preciso ativar o dma ou ultra dma do disco:

/dev/hda:

Model=SAMSUNG SP2514N, FwRev=VF100-41, SerialNo=S08BJ1FL709733
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
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
AdvancedPM=no WriteCache=enabled
Drive conforms to: unknown:

* signifies the current active mode


/dev/hda:

Model=SAMSUNG SP2514N, FwRev=VF100-41, SerialNo=S08BJ1FL709733
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
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
AdvancedPM=no WriteCache=enabled
Drive conforms to: unknown:

* signifies the current active mode



/dev/hda:
multcount = 16 (on)
IO_support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 0 (off)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 30401/255/63, sectors = 488397168, start = 0

O que preciso fazer para ativar o dma, quais os comando corretos a usar?

Cordialmente
Joabes

[7] Comentário enviado por JefersonLopes em 20/09/2006 - 13:27h

Olá Joabes

Vendo a linhas UDMA, ele suporta Ultra DMA 2, então:

hdparm /dev/hda -m16 -c1 -d1 -X udma2

Você pode também habilitar as opções "-A1" e "-a" para manter uma leitura otimizada do buffer. Também habilite o mascaramento de I/O (-u) IRQ que ajuda a sustentação de acesso a 32 bits.

Resumindo, você pode habilitar estas opções:

hdparm hdparm -m16 -c1 -d1 -u1 -X udma2 -A1 -a256


Caso estas opções apresentem algum problema de leitura, você pode ir fazendo alguns testes até encontrar as opções ideais para seu hd.


Espero que isso ajude.

Flw

[8] Comentário enviado por joabes em 23/09/2006 - 18:41h

Usando: hdparm -m16 -c1 -d1 -u1 -X udma2 -A1 -a256 /dev/hda

/dev/hda:
setting fs readahead to 256
BLKRASET failed: Invalid argument
setting 32-bit IO_support flag to 1
setting multcount to 16
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
setting xfermode to 66 (UltraDMA mode2)
Segmentation fault


O que fazer?

Cordialmente
Joabes

[9] Comentário enviado por JefersonLopes em 26/06/2007 - 01:59h

Eita... quase um ano depois que eu entro aqui... rsrsrs

Bom Joabe, não sei se ainda você passa por este problema, mas tente diminuir o valor da leitura antecipada para 128, ou mesmo deixar só a opção -A1 eliminando a -a256 da configuração.

Abs

[10] Comentário enviado por JefersonLopes em 26/06/2007 - 02:00h

Também baixe o Ultra DMA para 1 (udma1)... caramba... realmente faz tempo que não entre aqui no VoL.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts