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
|