Piter Punk's HomePage - Artigos
 
English version
Melhorando a Performance do seu HD

Piter PUNK

Atualmente os dispositivos IDE possuem taxas de transferência altas (através do UltraDMA) e várias outras maneiras de melhorar a sua performance. Com o hdparm é possível fazer este ajuste fino, é o que iremos ver neste artigo.

1. Introdução

O hdparm é um utilitário desenvolvido para configurar os parâmetros do HD (daí vem o nome, HD PARaMeters). Muitas vezes o seu HD está utilizando os ajustes mínimos e você não sabe porque a performance está tão aquém do desejado. Com um bom uso do hdparm isso muda, você pode configurar o seu drive para utilizar todos os recursos possíveis e imagináveis -;)

2. Observando o seu HD

A primeira coisa a fazer é observar a identificação do seu HD e as configurações atuais. Com base nestes dados é que serão feitas todas as alterações. É importante fazer estas verificações, pois alguns parâmetros errados podem danificar seus dados (e talvez seu HD). Olhe a identificação com o comando:

$ hdparm -i /dev/hda
Troque o /dev/hda pelo device a ser utilizado. Aqui na minha máquina o resultado foi:
/dev/hda:

Model=QUANTUM FIREBALLlct20 20, FwRev=APL.0900, SerialNo=552114732078
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } 
RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4 
BuffType=DualPortCache, BuffSize=418kB, MaxMultSect=8, MultSect=off
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=39876480
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 udma0 udma1 udma2 udma3 udma4 *udma5 
AdvancedPM=no 
Drive Supports : ATA/ATAPI-5 T13 1321D revision 1 : ATA-1 ATA-2 ATA-3
ATA-4 ATA-5

Que tipo de informações podemos tirar daí? Muitas importantes...

O MaxMultSect, indica qual a quantidade máxima de setores que ele pode ler de uma vez e o MultSect indica quantos estão sendo efetivamente utilizados. Mais abaixo temos os PIO modes e DMA modes suportados pelo seu dispositivo, o que está ativo no momento aparece com um * na frente. Por último, o AdvancedPM mostra se ele suporta o APM (Gerenciamento Avançado de Energia).

Outro comando para retirar informações é o:

$ hdparm /dev/hda

O resultado é semelhante a isto:

/dev/hda: 
 multcount = 0 (on) 
 I/O support = 0 (16-bit) 
 unmaskirq = 0 (off) 
 using_dma = 0 (off) 
 keepsettings = 0 (off) 
 nowerr = 0 (off) 
 readonly = 0 (off) 
 readahead = 8 (on) 
 geometry = 2482/255/63, sectors = 39876480, start = 0

Rapidamente, multcount é a quantidade de setores que ele está lendo por vez, I/O support indica o modo em que ele está (os disponíveis são 16/32/32sync). O using_dma revela se o recurso do DMA está ativo ou não. Se estiver ativo, keepsettings mantém as configurações após um soft reset (se você não sabe do que estou falando, deixe como está). readonly geralmente está setado para 1 apenas em CD-ROMs, este parâmetro sinaliza se o dispositivo é somente leitura. readahead mostra quantos setores à frente serão lidos quando você acessar o HD.

Se você não entendeu alguns destes parâmetros, não se preocupe, não é todo mundo que entende mesmo. E a maior parte deles serão explicadas com mais detalhes logo a frente. Alguns destes parâmetros se referem apenas a configuração física do seu HD (C/H/S, quantidade de cache, tipo de Buffer) e portanto não tem como ser configurados (a não ser com o ferro de solda -;)).

2.1. Medindo a Performance

Antes de começar, que tal medir a performance atual do seu HD? Faça isso com o comando:

$ hdparm -tT /dev/hda
/dev/hda:
 Timing buffer-cache reads:   128 MB in  0.60 seconds =213.33 MB/sec
 Timing buffered disk reads:  64 MB in 16.22 seconds =  3.95 MB/sec

Você irá receber duas respostas, uma dizendo sobre as transferências do buffer-cache e outra sobre transferências do disco para o buffer. A primeira mede bem o conjunto IDE/Memória/CPU, enquanto a segunda mede melhor as taxas de transferência do disco propriamente dito.

O ideal, é rodar esse teste duas ou três vezes e, de preferência, sem outros processos "atrapalhando", em Linux single.

3. Configurando o dispositivo

Agora vem a hora divertida, configurar o HD! Lembre-se que algumas destas configurações são perigosas e podem destruir tudo. Se guie sempre pelas informações que você conseguiu através do hdparm -i.

3.1. I/O support

Ok, a não ser que você possua uma interface IDE (E)ISA, todas as outras (PCI/VLB) suportam o modo de 32bits. Se o seu computador é mais novo que um 486 com certeza sua IDE é PCI. Se o seu computador for um 486, depende muito da sua placa-mãe. Se o seu computador for MCA eu não tenho a mínima idéia do que fazer.

  • hdparm -c0 para colocar no modo 16-bits;
  • hdparm -c1 para o modo de 32-bits e;
  • hdparm -c3 para 32-bits com sincronização.

O modo 3 é necessário apenas para alguns chipsets. Normalmente coloque o modo 1 (o desempenho é melhor). Não achei documentação sobre o modo 2 (16-bits também), suponho que seja 16bits com sincronização...

3.2. MultSect ou Multcount

Este é bem simples. Coloque no máximo suportado pelo seu HD. No caso do meu, o MaxMultSect é igual a 8. Então colocarei o MultSect igualzinho. Faça isso com o comando:

$ hdparm -m 8 /dev/hda

Obviamente, no caso do seu HD pode ser necessário trocar o /dev/hda pelo dispositivo correto e o número 8 pelo número que corresponde ao MaxMultSect do seu HD. Sem segredos -:)

3.3. Ativando DMA

Outro fácil, você ativa o DMA fazendo hdparm -d1 /dev/hda, para isso funcionar direito, a sua interface IDE tem que estar preparada e suportar DMA.

3.4. PIO modes e DMA modes

Estes dois são setados pelo mesmo parâmetro, o -X. Este é um daqueles parâmetros que podem destruir todos os seus dados e botar fogo na sua casa. Coloque apenas os modos suportados pelo seu equipamento.

Funciona mais ou menos assim, para os modos de DMA normal (multiword DMA ou mdma) você coloca -X32+(número do dma). Para colocar em mdma2, segundo esta sintaxe, você digita o seguinte comando:

$ hdparm -X34 /dev/hda

Para os modos de UltraDMA e PIO o processo é semelhante. Com a diferenca que o número base para os modos PIO não é 32, é 8. E para os modos de UltraDMA o número mágico é 64. Como meu HD suporta ATA100, coloquei-o em udma5, com o seguinte comando:

$ hdparm -X69 /dev/hda

Lembre-se que os modos mais altos de DMA estão disponíveis apenas para alguns chipsets. Ainda bem que o meu está entre eles -;). Os modos de ATA66 e ATA100, necessitam de um cabo especial de 80 vias. Colocar seu HD em ATA100 sem o cabo apropriado não é definitivamente uma boa idéia.

3.5. Readahead

A idéia do readahead é fácil de confundir com o multcount, mas ambos são conceitos diferentes. O multcount é limitado pelo seu hardware, é uma capacidade do seu HD de ler mais de um setor a cada requisição. Já o readahead diz para seu computador quantos setores para frente ele deve ler.

Isso faz que nas leituras de grandes arquivos, o acesso seja mais rápido. Porém, torna-se mais lento para arquivos pequenos. Uma boa idéia e deixar este valor igual ao do multcount, assim não se torna fazer mais de um acesso para ler a quantidade requisitada de setores à frente.

Se você for acessar muitos arquivos grandes, pode ser uma boa idéia colocar um valor maior no readahead. O valor padrão é 8 setores (4kbytes geralmente) por leitura. A sintaxe do comando é:

$ hdparm -a n /dev/hda

Onde o n representa a quantidade de setores a serem lidos.

3.6. Unmasking IRQ

Não consegui achar um bom nome para a tradução desta opção, mas ela decididamente aumenta em muito a performance do sistema, principalmente se você estiver usando dispositivos seriais (como o mouse ou modem)

 
$ hdparm -u n /dev/hda

Onde está n, substitua por 0 (desativado) ou 1 (ativado). Esta opção também aumenta a interatividade do sistema, tornando-o menos sensível a transferências em disco. Uma ótima idéia é combinar essa opção com o preemptive patch ou com o kernel 2.6 que já vem com o preemptive patch.

4. Ajustes finais

Existem várias outras configurações a serem feitas com o auxílio do hdparm. Boa parte delas, podem ser vistas utilizando as páginas de manual do comando. As indicadas aqui foram apenas as mais comuns.

Todas as configurações desaparecem após você rebootar o micro (não adianta setar o keep settings, ele serve apenas para o soft reset), é uma boa idéia colocá-las no arquivo /etc/rc.d/rc.local

Se você pretende colocar o hdparm para iniciar no boot, lembre de colocar um "q" na frente de cada opção, assim o seu processo de boot não fica poluído pelas várias mensagens do hdparm... veja a diferença entre executar o comando sem o -q:

$ hdparm -u1 -d1 /dev/hda

/dev/hda:
 setting unmaskirq to 1 (on)
 setting using_dma to 1 (on)
 unmaskirq    =  1 (on)
 using_dma    =  1 (on)
e com o -q:
$ hdparm -qu1 -qd1 /dev/hda

A segunda opção fica bem mais agradável... principalmente se houverem muitos HDs e várias configurações para cada um deles.

Quaisquer dúvidas, críticas ou sugestões podem ser enviadas para o endereço tradicional: piterpk@terra.com.br


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004