você está aqui: Home  → Arquivo de Mensagens

GNU Linux - Otimização do Acesso a Disco

Colaboração: Marcelo de Gomensoro Malheiros

Data de Publicação: 30 de Abril de 2001

O Marcelo me deu uma dica valiosissima para otimizar o tempo de acesso a disco em meu computador com Conectiva GNU/Linux.

Antes da dica porém cumpre lembrar que o comando hdparm deve ser usado com MUITO cuidado, pois algumas opções, se ativadas, podem corromper os dados em seu disco. Na descrição a seguir inclui apenas aqueles parâmetros que podem ser alterados com segurança e ainda assim garantir um ganho de performance substancial, como vocês poderão constatar. Para mais informações sobre o significado dos parâmetros listados, consulte a manpage do comando hdparm com o comando "man hdparm".

Segue abaixo a transcrição do que fiz em minha máquina com algumas observações minhas.

O comando hdparm invocado tendo como parâmetro apenas a unidade de disco que se deseja otimizar fornece os parâmetros de configuração adotados:

[root@paris /root]# hdparm /dev/hda

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

Como se pode ver acima, a maioria das opções de otimização estão desativadas (off).

O comando a seguir realiza testes de leitura no disco e nos oferece ao final a taxa de transferência obtida:

[root@paris /root]# hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:  64 MB in 16.02 seconds =  4.00 MB/sec

A taxa de transferência foi de 4MB/s, correspondente ao default do sistema.

Vamos então ativar o parâmetro "I/O support":

[root@paris /root]# hdparm -c 1 /dev/hda
/dev/hda:
 setting 32-bit I/O support flag to 1
 I/O support  =  1 (32-bit)

Vejamos então que melhoria a alteração deste parâmetro trouxe ao sistema:

[root@paris /root]# hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:  64 MB in  9.50 seconds =  6.74 MB/sec

Já obtivemos uma boa melhora, o tempo de acesso a disco caiu quase que pela metade.

Alteremos agora o parâmetro "using_dma":]

[root@paris /root]# hdparm -d 1 /dev/hda
/dev/hda:
 setting using_dma to 1 (on)
 using_dma    =  1 (on)

A nossa configuração fica então como:

[root@paris /root]# hdparm /dev/hda
/dev/hda:
 multcount    =  0 (off)
 I/O support  =  1 (32-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 nowerr       =  0 (off)
 readonly     =  0 (off)
 readahead    =  8 (on)
 geometry     = 1245/255/63, sectors = 20005650, start = 0

Façamos outro teste para vermos o ganho obtido:

[root@paris /root]# hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:  64 MB in  5.19 seconds = 12.33 MB/sec

O tempo de acesso a disco passou de 4MB/s para 12.33MB/s, uma melhora substancial.

Para ativar o comando hdparm permanentemente, utilize, em sistemas Conectiva Linux e outros derivados do RedHat, o comando ntsysv. Altere antes os parâmetros que se deseja ativar no arquivo /etc/sysconfig/hdparm.

Este arquivo, no meu computador, tem a seguinte forma:

### IDE devices ###
#  /dev/hda - primary master
#  /dev/hdb - primary slave
#  /dev/hdc - secondary master
#  /dev/hdd - secondary slave
DEVICE="/dev/hda /dev/hdb /dev/hdc /dev/hdd"
 
### Status ###
#  0 - disable
#  1 - enable
STATUS="1 0 0 0"
 
### Multiple sector mode (aka IDE Block Mode) ###
#  Common values: 0, 2, 4, 8, 16 (fast)
MULTCOUNT="-1 -1 -1 -1"
 
### IDE 32-bit I/O support ###
#  0 - 16-bit (default)
#  1 - 32-bit (fast)
#  2 - 16-bit
#  3 - 32-bit w/ special sync (fast/safe)
IO_SUPPORT="1 1 1 1"
 
### Interrupt-unmask ###
# -1 - disable
#  0 - safe
#  1 - fast
UNMASKIRQ="-1 -1 -1 -1"
 
### Using DMA ###
# NOTE: only works with a few combinations of drives and interfaces
# which support DMA and which are known to the IDE driver
# -1 - disable
#  0 - safe
#  1 - fast
USING_DMA="1 1 1 1"


Veja a relação completa dos artigos de Marcelo de Gomensoro Malheiros